negativen Wert v. Poti zu positiven Wert umkehren

Gast #4745115
Lesenswert?
• ▲
▼
Hallöle.

void loop(){
int potiwert=analogRead(Analogpin);
 potiwert=map(potiwert, 0, 1023, -500, 500);

 if (potiwert <= - 1 && potiwert >-500){
potiwert= potiwert*(potiwert)/ potiwert;
Serial.println (potiwert);
delay(1000);}

}

Dieser Code soll für meinen Schrittmotor sein, welcher so dann die 
Drehgeschwindigkeit und die Richtung ändert je nach Potiwert.
Daher das set.Speed ja keine negativen Werte annimmt, habe ich den Code 
so eingerichtet ,dass wenn der Potiwert in den negativen Bereich geht, 
dann die Werte in der if Schleife umgedreht werden.
Im Seriellen-Monitor werden aber weiterhin negative Werte ausgegeben.
Ich habe das dann auch noch mal mit der Wurzel ziehen aus dem potiwert 
versucht also statt geteilt durch den potiwert am Ende die Wurzel aus 
dem potiwert.
Ebenfalls mit keinem Erfolg.
Ich wäre sehr froh wenn mir vieleicht jemand einen Tipp geben könnte was 
ich falsch mache.

M. f. G. Mar.
Gast #4745157
Lesenswert?
• ▲
▼
Mario schrieb:

> Ich habe das dann auch noch mal mit der Wurzel ziehen aus dem potiwert
> versucht also statt geteilt durch den potiwert am Ende die Wurzel aus
> dem potiwert.


Aber der Potiwert ist doch negativ...du hast also die Wurzel aus einer 
negativen Zahl gezogen?
#4745196
Lesenswert?
• ▲
▼
Mario schrieb:
> Im Seriellen-Monitor werden aber weiterhin negative Werte ausgegeben.
Was ergibt denn (-20)*(-20)/(-20)? -20? Klar, daß Minus mal Minus mal 
Minus wieder Minus ergibt. Wie wär's mit -1 * (-20) oder kurz -(-20)?


> Ich habe das dann auch noch mal mit der Wurzel ziehen aus dem potiwert
> versucht also statt geteilt durch den potiwert am Ende die Wurzel aus
> dem potiwert.
> Ebenfalls mit keinem Erfolg.
Ja klar, die Quadratwurzel aus einer negativen Zahl ziehen, und das mit 
einem Integer.
In Mathe wohl nicht aufgepaßt und dann programmieren wollen? Lern doch 
erst mal Mathe, dann klappt das auch mit der Integerarithmetik.
#4745222
Lesenswert?
• ▲
▼
Das mit dem map() ist doch unnötig kompliziert, und hat zusätzlich den 
Nachteil, dass der Bereich der Mittelstellung nicht berücksichtigt wird, 
in der der Motor stehen bleiben soll.
Was hat dir an dieser Lösung nicht gefallen?

Beitrag "Re: Poti mit Schrittmotor"

Und warum machst du einen neuen Thread zum gleichen Thema auf?
Ursprungsthread: 
Beitrag "Poti mit Schrittmotor"
Gast #4745228
Lesenswert?
• ▲
▼
Mario schrieb:
> potiwert= potiwert*(potiwert)/ potiwert;

Unabhängig ob das funktioniert oder nicht.
Nur um einen Betragswert zu bilden dürfte eine Multiplikation und eine 
Division auf einem kleinen µC der das nicht in Hardware kann so ziemlich 
das langsamste sein, was man machen kann.
Ausserdem muss deine Variable durch die Multiplikation mindestens die 
doppelte Länge haben (16Bit für eine 8 Bit Variable)

Das erst mal einfachste (wenn man die Funktion abs() nicht hat oder 
kennt) wäre zumindest:
if (wert < 0)
  wert := wert * (-1);

aber auch nicht unbedingt schnell wegen der Multiplikation:
Schneller geht so:
Beitrag "Sehr schneller Absolutbetrag AVR"

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.