PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Was ist an diesem Programmcode falsch?



JensD
17.11.2006, 19:52
Hallo,
ich habe mich jetzt einmal daran gemacht einen kleinen Programmcode zu machen. Dieser Programmcode soll dazu dienen das der Roboter normal mit 150 fährt und bei einer Kollision rückwärts fahren soll:

///////////////////////////////////////////
// Asuroprogramm Version 1 // 15.11.2006 //
// Von Jens // Erstentwicklung//
///////////////////////////////////////////

#include "asuro.h"

unsigned char taste;

/////////////////////////////////////////////
int main(void)
{
Init();
taste = PollSwitch();
if (taste>0)
{
MotorDir(RWD,RWD);
MotorSpeed(100,100);
StatusLED(RED);
BackLED(OFF,OFF);
}
else
{
MotorDir(FWD,FWD);
MotorSpeed(150,150);
StatusLED(GREEN);
BackLED(ON,ON);
}
while(1);
return 0;
}




So, nach dem ich dieses Programm geschrieben hatte, flashede ich es auf den Asuro. Doch dieser fährt dauernd rückwärts, auch ohne Kollision und auf gar keinen Fall vorwärts! Was ist an diesem Programmcode falsch? .. ist meine Frage.
Danke und MFG
JensD

EDH
17.11.2006, 19:54
(1)die if abfrage muss in die while schleife rein
(2) so wird der asuro dann (wenn du die if abfrage ind er while schleife drinn hast) zwar an der wand annhalten, aber dann wider gegen die wasn fahren, al swollte er sie durchbrechen

mfg EDH

JensD
17.11.2006, 20:00
Wie mache ich die If-Abfrage in die while-Schleife?

EDH
17.11.2006, 20:12
so ungefähr :



#include "asuro.h"

unsigned char taste;

/////////////////////////////////////////////
int main(void)
{
Init();
while(1) {
taste = PollSwitch();
if (taste>0)
{
MotorDir(RWD,RWD);
MotorSpeed(100,100);
StatusLED(RED);
BackLED(OFF,OFF);
}
else
{
MotorDir(FWD,FWD);
MotorSpeed(150,150);
StatusLED(GREEN);
BackLED(ON,ON);
}
}
return 0;
}


mfg EDH

JensD
17.11.2006, 20:20
Das klappt bei mir nicht jetzt fährt er nur vorwärts aber die Taster machen auf Berührung nichts.(??)
Gruß JensD

EDH
17.11.2006, 20:42
(1) vieliecht schreibst du mal konkret was der asruo machen soll?
(2) ruf pollswitch mehrmals hinterneindaner auf

mfg EDH

damaltor
17.11.2006, 21:52
1. bitte nutze den CODE Button um deinen Programmcode zu posten.
2. Du Musst ein Programm machen, was ungefähr so aussieht:



int tastegedrueckt=0;
int main(void){
init();
While(1){

PollSwitch();
PollSwitch(); //Zum ausschliessen von falschen Werten
PollSwitch();

tastegedrueckt=PollSwitch();

if (tastegedrueckt!=0){ //Wenn eine Taste gedrückt wurde...

MotorDir(RWD,RWD);
MotorSpeed(150,150); //Dann fahre rückwärts.

}
else{ //ansonsten...
MotorDir(FWD,FWD);
MotorSpeed(150,150);
}

return 0;

}



könnte sein, dass da was nich ganz 100%ig ist, also erstmal durchchecken was der compiler so sagt.

Sowie eine taste gedrückt wurde, wird die variable tastegedrueckt nicht mehr 0 sein. (kann aber sein, dass die funktion pollswitch() einen falschen wert ausgibt, dann hast du leider pech...). wenn die variable nicht mehr 0 ist wird er rückwärts fahren. nachteil: er wird dauern wieder vor die wand fahren, weil sowie er ein stückchen rückwärts gefahren ist ist ja die variable wieder 0 und er fährt wieder vorwärts... man könnte natürlich auch noch eine verzögerung mit sleep() einbauen, aber das überlasse ich dir =)