PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verständnissproblem im Programm



frank1210
14.01.2010, 08:54
Hi.
Aus dem Heft"SPASS MIT ASURO Teil2" habe ich das PRO__""Nur ein Stück geradeaus"abgetippt und compilliert. Hinter gedanke dabei ist , das Programmieren ansatzweise(learnig bei dooing" zu begreifen.
OK compillieren hat funktioniert, keine Fehler, geflasht, auch keine fehler-und siehe da der ASURO fährt ein STÜCK. jetzt meine Frage:
woher weis das Programm das es bei case172 anhlten soll?
Gruß Frank

Felix G
14.01.2010, 09:15
Ich denke du solltest mal den Code posten, denn sonst kann dir Niemand helfen der dieses spezielle Heft nicht hat.

Und damit er gut lesbar ist, setz ihn bitte zwischen
und

frank1210
14.01.2010, 10:22
Also hier erstmal der Code:

#include "asuro.h" // Schwellwert Hell Dunkel
#define TRIGGERLEVEL 540
#define HYSTERESIS 10
#define LOW 0
#define HIGH 1

int main (void){
unsigned int data[2];
signed int status [2]={0,0};
signed int difference=0;
unsigned int distance=0;
signed int speed;
Init();
while(1){
switch(distance){
case 0:MotorDir(FWD,FWD);speed=255;break;
case 150:speed=200; break;
case 160:speed=150;break;
case 172:MotorDir(BREAK,BREAK);break;
}
OdometrieData(data);
if((status[0]==LOW)&&(data[0]>TRIGGERLEVEL+HYSTERESIS)){
status[0]=HIGH;
difference++;
distance++;
}
if((status[0]==HIGH)&&(data[0]<TRIGGERLEVEL-HYSTERESIS)){
status[0]=LOW;
difference++;
distance++;
}
if((status[1]==LOW)&&(data[1]>TRIGGERLEVEL+HYSTERESIS)){
status[1]=HIGH;
difference--;
}
if((status[1]==HIGH)&&(data[1]<TRIGGERLEVEL-HYSTERESIS)){
status[1]=LOW;
difference--;
}
if (difference<-speed)difference=-speed;
if (difference>speed)difference=speed;
StatusLED(status[0]+status[1]*2);
if (difference>0)MotorSpeed(speed-difference,speed);
else MotorSpeed(speed,speed+difference);
}
return 0;
}

A.Hoffmann
14.01.2010, 11:26
Hallo Frank
Wenn die Variable distance den Wert 172 hat, dann wird die Funktion MotorDir aufgerufen.
Dies Funktion ist in asuro.h definiert, ebenso der Übergabeparameter BREAK.
Sie steuert die Drehrichtung der Motoren. Über die Parameter werden die Port – Pins
zu den beiden H-Brücken gesetzt.
In diesem Fall werden die Motoren kurzgeschlossen. ( Bremsen )

MFG
August Hoffmann

Valen
14.01.2010, 20:12
Und die variabele Distance wird mit 1 inkrementiert (erhöht) bei jede gemessen (OdometrieData) schwarz/weiss ubergang (triggerlevel wert +/- hysteresis wert) auf den beiden geberscheiben.

radbruch
14.01.2010, 20:38
..ob der erkannte Übergang von hell nach dunkel oder von dunkel nach hell war wird für jede Seite getrennt in status[0] und status[1] gespeichert...