PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [GELÖST] Kette_l_bwd = Kettenspeedlinks * -1 nicht möglich?



oratus sum
15.02.2010, 18:41
Hallo,

Ich bekomme ein Fehler bei der Operation:

Kette_l_bwd = Kettenspeedlinks * -1

Beide Variablen sind Integer.
Der Error sagt:

Invald Datatype

Code Umfeld:


Rechte_entfernung = Srf02_entfernung(srf02_slaveid_rechts) 'US Rechts
Linke_entfernung = Srf02_entfernung(srf02_slaveid_links) 'US Links

'Ir_front = Getadc(2) 'IR vorn
'Ir_left = Getadc(3) 'IR links
'Ir_right = Getadc(1) 'IR rechts

'Berechnung der Kettengeschwindigkeit
Kettenspeedlinks = Linke_entfernung * Convert 'Kette = US Entfernung in cm * 2.55
Kettenspeedrechts = Rechte_entfernung * Convert 'Kette = US Entfernung in cm * 2.55



Kette_l_fwd = Kettenspeedlinks
Kette_l_bwd = Kettenspeedlinks * -1
Kette_r_fwd = Kettenspeedrechts
Kette_r_bwd = Kettenspeedrechts * -1

Kette_l_slow_fwd = Kettenspeedlinks - 40
Kette_r_slow_fwd = Kettenspeedrechts - 40

oratus sum
15.02.2010, 19:19
Komisch und wenn ich sowas mache:

Dim Kette_l_bwd As Integer
Kette_l_bwd = -100

sagt er:
StoreBit error

Was bedeutet das?

for_ro
15.02.2010, 19:23
Hallo,
welche Bascom Version hast du denn?
Ich kann dies mit der neuesten Version 1.11.9.8 ohne Fehler kompilieren.

Jaecko
15.02.2010, 19:27
Bei Kette_l_bwd = Kettenspeedlinks * -1 kanns sein, dass Bascom (in älteren Versionen) nicht mit den 2 aufeinanderfolgenden Operatoren klarkommt. Das war (ist immer noch?) ein Nachteil bei Bascom, dass so Dinge wie a+3*5-2 nicht gehen (also nur 1 Operator pro Anweisung).
Über den Umweg x = -1 und danach Kette_l_bwd = Kettenspeedlinks * x müssts mit deiner Version aber gehen.

oratus sum
15.02.2010, 20:21
Ich hab Version:
1.11.9.0

Das kann ich z.b. Problemlos kompilieren:

Dim a As Integer
Dim b as Integer

a= 2.25465

b = a * -1

Das funktioniert...

Das mit dem Umweg war auch mein Tipp werds jetzt testen.

Was ich noch prbioert hab ist, dass ich zur sicherheit Kettenspeedlinks in ein INteger umwandle mittels:

Bei Kette_l_bwd = Int(Kettenspeedlinks) * -1
Da kommt aber wieder StoreBit error, der andere Fehler ist dann weg...

Jaecko
15.02.2010, 20:27
Schreib mal den kompletten Programmcode.
Irgendwie hab ich langsam die Vermutung, dass da weiter oben bei irgend ner DIM o.ä. was faul ist.

edit: jetzt hats irgendwie die Reihenfolge der Beiträge durcheinandergewürfelt...

oratus sum
15.02.2010, 20:28
Wenn ich das so mache wie du:

Minus = -1

'Sensorenabfrage:
Rechte_entfernung = Srf02_entfernung(srf02_slaveid_rechts) 'US Rechts
Linke_entfernung = Srf02_entfernung(srf02_slaveid_links) 'US Links

'Ir_front = Getadc(2) 'IR vorn
'Ir_left = Getadc(3) 'IR links
'Ir_right = Getadc(1) 'IR rechts

'Berechnung der Kettengeschwindigkeit
Kettenspeedlinks = Linke_entfernung * Convert 'Kette = US Entfernung in cm * 2.55
Kettenspeedrechts = Rechte_entfernung * Convert 'Kette = US Entfernung in cm * 2.55



Kette_l_fwd = Kettenspeedlinks
Kette_l_bwd = Kettenspeedrechts * Minus
Kette_r_fwd = Kettenspeedrechts
Kette_r_bwd = Kettenspeedrechts * Minus


bekomme ich wieder den invalid Datatype Error

oratus sum
16.02.2010, 21:00
Okay mein Fehler....

Also ich habe die Variable Kette_l_fwd schon als alias für ein Port verwendet. Klar konnte das nicht funktionieren.

Bei so vielen Variablen Aliasen usw verliert man schon schnell den Überblick

guenter1604
17.02.2010, 13:13
Wäre ein

Kette_l_bwd = abs(Kettenspeedrechts)
Kette_r_bwd = abs(Kettenspeedrechts)

nicht schneller und hübscher ?

Günter

oratus sum
17.02.2010, 14:41
die ABS funktionien liefert doch immer positive Zahlen oder? Ich will ja negative haben.

Mein Sub lautet nämlich

Drive(Byval Speed_l As Integer, Byval Speed_r As Integer)

bei einer negativen Zahl fährt er Rückwärts

guenter1604
17.02.2010, 15:20
stimmt! Wenn nicht nur das Minus weg soll ist abs nicht sinnvoll.