So habe das mit den Tastern verbessert.
Der ganze Code sieht jetzt in etwa so aus:
Nun kommen aber noch 2 Warnungen:Code:#include "asuro.h" #include <stdlib.h> unsigned char ir1; #define PWM_STEP 5 #define MESSZEIT 500 //ms #define FULL_L 130 #define FULL_R 130 /* Motor vorwärts */ void MotorFwd(void) { MotorDir(FWD,FWD); MotorSpeed(FULL_L,FULL_R); } /* Motor rückwärts */ void MotorRwd(void) { MotorDir(RWD,RWD); MotorSpeed(FULL_L,FULL_R); } /* Motor rückwärts Links */ void MotorRwdL(void) { MotorDir(RWD,RWD); MotorSpeed(FULL_L,0); } /* Motor rückwärts Rechts */ void MotorRwdR(void) { MotorDir(RWD,RWD); MotorSpeed(0, FULL_R); } /* Motor stop */ void MotorStop(void) { MotorSpeed(0,0); } int main (void) { unsigned int lData[2]; unsigned char sw, speed; unsigned char ir; int t1, t2; int u; int Reibung_links; int Reibung_rechts; unsigned char ir2; Init(); DDRD |= (1 << DDD1); // Port D1 als Ausgang PORTD &= ~(1 << PD1); // PD1 auf LOW OCR2 = 0xFB; speed=130; Encoder_Init(); for(;;) { ir=PIND & (1 << PD0); FrontLED(ON); LineData(lData); if (PIND & (1 << PD0)) { if(lData[1] <= 80 && lData[1] >= 10) { BackLED(ON,ON); StatusLED(GREEN); MotorDir(RWD, RWD); MotorSpeed(190, 190); Msleep(500); MotorDir(BREAK, RWD); MotorSpeed(0, 150); Msleep(500); } else { FrontLED(ON); BackLED(OFF,OFF); StatusLED(RED); MotorDir(FWD, FWD); MotorSpeed(140, 140); } } else { BackLED(ON,ON); MotorDir(RWD,RWD); MotorSpeed(speed,speed); if (speed > 0) Msleep(500); MotorDir(BREAK,RWD); MotorSpeed(0,speed); if (speed > 0) Msleep(500); } ir1=ir; ir2=ir1; sw = PollSwitch(); if (sw & 0x04) { OCR2 = 0xFC; } if (sw & 0x08) { OCR2 = 0xFB; } u=Batterie(); // u=922 entspricht 5.03V Encoder_Set(0,0); // Messung starten Msleep(500); // 500 ms Messen Reibung_links = PWM*u*10/255-25*encoder[LEFT]; Reibung_rechts = PWM*u*10/255-25*encoder[RIGHT]; LineData(lData); // nochmals erneut prüfen ob er eine Tischkante erreicht hat, //da er ja 0,5 Sekunden für das Messen gebraucht hat. if(lData[1] <= 80 && lData[1] >= 10) { BackLED(ON,ON); StatusLED(GREEN); MotorDir(RWD, RWD); MotorSpeed(190, 190); Msleep(500); MotorDir(BREAK, RWD); MotorSpeed(0, 150); Msleep(500); } if(Reibung_links >= 108 || Reibung_rechts >= 108) //Jetzt prüfen ob die Reibung den bestimmten Wert erreicht hat { BackLED(ON,ON); StatusLED(YELLOW); MotorDir(RWD, RWD); MotorSpeed(150, 150); Msleep(800); MotorDir(BREAK, RWD); MotorSpeed(0, 150); Msleep(530); } t1 = PollSwitch(); t2 = PollSwitch(); if (t1 == 0 && t2 == 0) { MotorFwd(); /* vorwärts fahren */ FrontLED(ON); BackLED(OFF,OFF); } else if (t1 && t2 && t1 == t2) { MotorStop(); if (t1 & 0x07) /* Tasten links gedrückt? */ { MotorRwdL(); /* Rückwärtskurve links fahren */ FrontLED(OFF); BackLED(ON,OFF); } if (t1 & 0x38) /* Tasten rechts gedrückt? */ { MotorRwdR(); /* Rückwärtskurve rechts fahren */ FrontLED(OFF); BackLED(OFF,ON); } Msleep(1000); /* 1 Sekunde fahren */ } } return 0; }
test.c:136: warning: suggest parentheses around arithmetic in operand of |
test.c:137: warning: suggest parentheses around arithmetic in operand of |
in diesen Zeilen:
Reibung_links = PWM*u*10/255-25*encoder[LEFT];
Reibung_rechts = PWM*u*10/255-25*encoder[RIGHT];







Zitieren

Lesezeichen