gcc tutorial auf mikrocontroller.net reinkucken
Also ich habe ein kleines "Kollisions - zurückfahr - umdreh - weiterfahr" Programm geschrieben und möchte jetzt das Asuro je nach dem wie er sich gestoßen hat verschieden dreht. Jetzt mein Problem: Ich weiß nicht wie ich einzelne Gruppen von Tasten ansprechen soll.
Hier mal das Programm:
An die Leute denen es aufgefallen istCode:#include "asuro.h" int main(void) { Init(); int t; MotorDir(FWD,FWD); MotorSpeed(120,120); StatusLED(GREEN); FrontLED(ON); while (1){ while (PollSwitch()==0) { SerWrite("Ab die Post!",12); } MotorSpeed(0,0); StatusLED(RED); MotorDir(RWD,RWD); MotorSpeed(120,120); BackLED(ON,ON); for(t=0;t<1000;t++){ Sleep(72);} BackLED(OFF,OFF); MotorDir(FWD,FWD); MotorSpeed(0,180); for (t=0; t<1000; t++){ Sleep(72);} MotorDir(FWD,FWD); MotorSpeed(120,120); } }
Ich habe Teile das Programms insbesondere die for - Schleife aus diesem Forum übernommen um mir Anzugucken wie man so ein Programm erstellt.
gcc tutorial auf mikrocontroller.net reinkucken
Tut mir leid ich habe mir das Tutorial anguckt und da stand nichts zu einelne Sensoren auslesen.
Das hier ist auch nichts? http://www.mikrocontroller.net/artic...n_und_Schalter
Nein modifizier doch mal mein Programm so, dass es auf einzelne Taster reagiert, vielleicht versteh ich es ja dann
So sind ja die rückgabewerte:
Bit0 (1) -> K6
Bit1 (2) -> K5
Bit2 (4) -> K4
Bit3 (8) -> K3
Bit4 (16) -> K2
Bit5 (32) -> K1
dazu habe ich auch eine frage, und zwar sagen wir einmal, dass K1 gedrückt wird. Dann belpmmen wir den Wert 32 zurück, aber den kann ma n doch auch erhalten, wenn K2, K4 und K5 gedrückt sind.
Aber nun zu deiner Frage.
Mit den Knöpfen 2 - 6 sollte es ja keine Probleme geben, denn da kann man nie auf 2 verschiedene arten auf den gleichen wert kommen einfach schreiben:
und der rest ist meine Frage.Code:taste = PollSwitch(); if (taste==1) ... else if(taste==2) ... else if(taste==4) ... else if(taste==8) ... else if(taste==16) ...
Ich hoffe ,dass das hier richtig ist.
lg
Hannes
Ich habe das nach deinem Beitrag hier weiterentwickelt, aber es passiert nichts, außer, dass die StatusLED grün leuchtet.Code:hallo#include "asuro.h" int main(void) { Init(); int zeit; unsigned char taste; taste = PollSwitch(); MotorDir(FWD,FWD); MotorSpeed(120,124); StatusLED(GREEN); FrontLED(ON); while (1){ StartSwitch(); StopSwitch(); if (taste==1 | taste==2 | taste==4) { MotorSpeed(0,0); StatusLED(RED); BackLED(ON,ON); MotorDir(RWD,RWD); MotorSpeed(150,152); for(zeit=0;zeit<1000;zeit++){ Sleep(72);} BackLED(OFF,OFF); StatusLED(GREEN); MotorDir(FWD,FWD); MotorSpeed(180,0); for (zeit=0; zeit<500; zeit++){ Sleep(72);} MotorSpeed(120,124); for(zeit=0;zeit<500;zeit++){ Sleep(72);} BackLED(OFF,OFF); StatusLED(GREEN); MotorDir(FWD,FWD); MotorSpeed(0,180); for (zeit=0; zeit<500; zeit++){ Sleep(72);} MotorSpeed(120,121); } else if (taste==8 | taste==16 | taste==32) { MotorSpeed(0,0); StatusLED(RED); BackLED(ON,ON); MotorDir(RWD,RWD); MotorSpeed(150,152); for(zeit=0;zeit<1000;zeit++){ Sleep(72);} BackLED(OFF,OFF); StatusLED(GREEN); MotorDir(FWD,FWD); MotorSpeed(0,180); for (zeit=0; zeit<500; zeit++){ Sleep(72);} MotorSpeed(120,124); for(zeit=0;zeit<500;zeit++){ Sleep(72);} BackLED(OFF,OFF); StatusLED(GREEN); MotorDir(FWD,FWD); MotorSpeed(180,0); for (zeit=0; zeit<500; zeit++){ Sleep(72);} MotorSpeed(120,121); } } }
ich glaube ich habe den Fehler gefunden.
wie ich das weiß ist doch ODER = || und nicht |
Demnach müsste der Quellcode so heißen:
Bitte korigieren wenn das falsch ist.Code:hallo#include "asuro.h" int main(void) { Init(); int zeit; unsigned char taste; taste = PollSwitch(); MotorDir(FWD,FWD); MotorSpeed(120,124); StatusLED(GREEN); FrontLED(ON); while (1){ StartSwitch(); StopSwitch(); if (taste==1 || taste==2 || taste==4) { MotorSpeed(0,0); StatusLED(RED); BackLED(ON,ON); MotorDir(RWD,RWD); MotorSpeed(150,152); for(zeit=0;zeit<1000;zeit++){ Sleep(72);} BackLED(OFF,OFF); StatusLED(GREEN); MotorDir(FWD,FWD); MotorSpeed(180,0); for (zeit=0; zeit<500; zeit++){ Sleep(72);} MotorSpeed(120,124); for(zeit=0;zeit<500;zeit++){ Sleep(72);} BackLED(OFF,OFF); StatusLED(GREEN); MotorDir(FWD,FWD); MotorSpeed(0,180); for (zeit=0; zeit<500; zeit++){ Sleep(72);} MotorSpeed(120,121); } else if (taste==8 || taste==16 || taste==32) { MotorSpeed(0,0); StatusLED(RED); BackLED(ON,ON); MotorDir(RWD,RWD); MotorSpeed(150,152); for(zeit=0;zeit<1000;zeit++){ Sleep(72);} BackLED(OFF,OFF); StatusLED(GREEN); MotorDir(FWD,FWD); MotorSpeed(0,180); for (zeit=0; zeit<500; zeit++){ Sleep(72);} MotorSpeed(120,124); for(zeit=0;zeit<500;zeit++){ Sleep(72);} BackLED(OFF,OFF); StatusLED(GREEN); MotorDir(FWD,FWD); MotorSpeed(180,0); for (zeit=0; zeit<500; zeit++){ Sleep(72);} MotorSpeed(120,121); } } }
- Tut mir leid euch enttäuschen zu müssen, aber es funktioniert immer noch nicht.
Das einzige was passiert ist, dass die BackLED leuchten und die StatusLED grün leuchtet.Code:#include "asuro.h" int main(void) { Init(); int zeit; unsigned char taste; taste = PollSwitch(); MotorDir(FWD,FWD); MotorSpeed(120,124); StatusLED(GREEN); FrontLED(ON); while (1){ StartSwitch(); StopSwitch(); if (taste==1 || taste==2 || taste==4) { MotorSpeed(0,0); StatusLED(RED); BackLED(ON,ON); MotorDir(RWD,RWD); MotorSpeed(150,152); for(zeit=0;zeit<1000;zeit++){ Sleep(72);} BackLED(OFF,OFF); StatusLED(GREEN); MotorDir(FWD,FWD); MotorSpeed(180,0); for (zeit=0; zeit<500; zeit++){ Sleep(72);} MotorSpeed(120,124); for(zeit=0;zeit<500;zeit++){ Sleep(72);} BackLED(OFF,OFF); StatusLED(GREEN); MotorDir(FWD,FWD); MotorSpeed(0,180); for (zeit=0; zeit<500; zeit++){ Sleep(72);} MotorSpeed(120,121); } else if (taste==8 || taste==16 || taste==32) { MotorSpeed(0,0); StatusLED(RED); BackLED(ON,ON); MotorDir(RWD,RWD); MotorSpeed(150,152); for(zeit=0;zeit<1000;zeit++){ Sleep(72);} BackLED(OFF,OFF); StatusLED(GREEN); MotorDir(FWD,FWD); MotorSpeed(0,180); for (zeit=0; zeit<500; zeit++){ Sleep(72);} MotorSpeed(120,124); for(zeit=0;zeit<500;zeit++){ Sleep(72);} BackLED(OFF,OFF); StatusLED(GREEN); MotorDir(FWD,FWD); MotorSpeed(180,0); for (zeit=0; zeit<500; zeit++){ Sleep(72);} MotorSpeed(120,121); } } while(1); return(0); }
Das Programm soll ja eigentlich so wirken, dass wenn er irgendwo antstößt zurückfährt, und je nachdem wie er sich gestoßen hat dreht (90°) kurz fährt wieder um 90° dreht (aber diesmal in die andere Richtung) und dann weiterfährt. Ohne die Idee mit einzelne Taster auslesen funktionierte es übrigens.
Nun was soll ich machen?
Edit: Könnte es vielleicht an if hängen, da ich im anderen Programm(das funktioniert hat) while benutzt habe.
post doch mal deinen alten Code bei dem es Funktioniert hat, dann kann ich ja mal schauen ob man das einfacher umschreiben kann.
Dass z.B: beim drücken der taste 2 das licht ot wird, den ganzen rest (fahren) kann man ja immer noch in die schleife integrieren.
Lesezeichen