-
Hab da jetzt ein anderes Problem:
Ich lese einen String von der RS232 ein, zerlege diesen in ein Array und verwende die Werte, um zunächst mal einen Schrittmotor zu steuern.
Da man mit einer Achse ja in beide Richtungen fahren kann, habe ich auch negative Werte. Die Vorzeichenerkennung funktioniert, wie aber bekomme ich den Wert in's Positive ?
Hier der Code:
Code:
...
Dim Ar(5) as string * 100
Dim X as double
...
If X < 0 then
Portc.1 = 0 'CW/CCW Umschaltung
Portd.5 = 1 'Signalisierung auf LED1 zur Kontrolle
X = Val(Ar(1)) * (-1)
Print "Xcorr=" ; X 'Kontrollausgabe des umgekehrten Wertes
Else
Portc.1 = 1 'CW/CCW bleibt
Portd.5 = 0 'Kontroll LED1 bleibt aus
end if
...
Er erkennt, dass der Wert kleiner null ist, da er die LED einschaltet und den Wert zurückgibt, allerdings ist er immer noch negativ !
Ich brauche diesen aber positiv, da die Schritte in einer anschließenden Schleife von null bis Wert hochgezählt werden.
Kann mir jemand einen Tipp geben ?
-
Ich verstehe dein Programm nicht ganz:
X enthält schon vor dem IF den Wert?
Warum greifst du dann aud das Array zurück und schreibst nicht
X = -1*X
Ich habe mit Bascom keine Erfahrung, aber könnte es hier ein Problem mit der Umwandlung des Strings nach double sein?
/jan
-
... in PHP kann ich Werte so zuweisen:
X = X * (-1)
Definiert ist das so, dass ich der Variablen einen neuen Wert zuweisen kann, indem ich sie selbst zur Berechnung hernehme. Bascom bringt hier die Fehlermeldung dass Quell und Zielvariable nicht gleich sind - lässt eine Berechnung mit sich selbst also nicht zu.
Außerdem muß ich den String ja in eine Zahl umwandeln, da ich sonst keine Berechnungen durchführen kann.
Du brinst mich jetzt aber auf eine Idee: Vielleicht gibt es eine Möglichkeit, im String noch das Vorzeichen zu kappen, vor ich daraus eine Zahl mache. Dann hätte ich dieses Problemchen auch gelöst.
-
..oder eine 0 an der Stelle addieren
X &= ~ 0b100000000000000
-
Hab nun auch eine Möglichkeit gefunden:
Xc = Mid(ar(1) , 2)
X = Val(Xc)
Somit kappe ich einfach das Vorzeichen.
Dein Source dürfte aber weniger Platz brauchen, da ich schon wieder über 4096 Bytes Source bin und ich mir nun doch die Bascom-Vollversion besorgen muss.