PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zusammenfügen von 2 Programmteilen



ASURO1995
10.01.2009, 20:40
Hallo miteinander!

Ich beschäftige mich noch nicht lange mit dem ASURO und kenne mich daher noch nicht so gut mit dem C++ aus. Am Dienstag den 20.1.09 halte ich in der Schule ein Projekt über Roboter und habe mir deshalb ein Programm ausgedacht, welches die Zuschauer in Staunen versetzen sollte.
Aber leider habe ich ein kleines Problem. Mein ASURO folgt keiner Linie, nachdem ich ihn per Infrarotkomunikation frage: WAS KANNST DU?
Das Linienfolg Programm fuktioniert nicht wie als Einzelprogramm.


#include "asuro.h"
int main(void){
unsigned char data [] = "01234567891011121314";
unsigned int lineData[2];
int d;
Init();

while(1){
for(d=0;d<1;d++){
SerWrite(" Hallo liebe Zuschauer!",23);
for(d=0;d<1000;d++){
Sleep(255);}
SerWrite(" Mein Name ist ASURO und ich bin ein mobiler Roboter!",53);
for(d=0;d<1500;d++){
Sleep(255);}
SerWrite(" ASURO ist die abkuerzung fuer",33);
SerWrite(" Another Small and Unique Robot from Oberpfaffenhofen!",54);
for(d=0;d<2000;d++){
Sleep(255);}
SerWrite(" Ich wurde im Institut fuer Robotik und Mechatronik in Oberpfaffenhofen entwickelt!",83);
for(d=0;d<2500;d++){
Sleep(255);}
SerWrite(" Mein Programmierer ist Pascal Keller!",38);
for(d=0;d<1500;d++){
Sleep(255);}
SerRead(data,14,0);
if (data[0] == 'W' && data[1] == 'A' && data[2] == 'S'
&& data[3] == ' ' && data[4] == 'K' && data[5] == 'A'
&& data[6] == 'N' && data[7] == 'N' && data[8] == 'S'
&& data[9] == 'T' && data[10] == ' '
&& data[11] == 'D' && data[12] == 'U' && data[13] == '?')
SerWrite(" ICH KANN EINER LINIE FOLGEN!",29);}
FrontLED(ON);
MotorDir(FWD,FWD);
LineData(lineData);
if(lineData[0]>lineData[1])
{MotorSpeed(150,50);BackLED(ON,OFF);StatusLED(YELL OW);}
else
{MotorSpeed(50,150);BackLED(OFF,ON);StatusLED(RED) ;}
}
return 0;
}


Ich bin um jede Antwort froh und danke euch schon im voraus!HELPHELP

p_mork
10.01.2009, 21:08
Hallo Pascal,

die Abfrage, ob der Roboter eher links oder rechts auf der Linie steht geschieht bei dir nur ein einziges Mal, danach startet das ganze Programm von vorne. Damit er der Linie folgt, muss das Abfragen und Regeln ständig in einer Schleife gemacht werden.

MfG Mark

ASURO1995
11.01.2009, 09:36
:)Vielen dank für deine schnelle Antwort!

ASURO1995
11.01.2009, 10:38
Hier habe ich nochmal das ganze Programm



#include "asuro.h"
int main(void){
unsigned char data [] = "01234567891011121314";
unsigned int lineData[2];
int d;
Init();
for(d=0;d<1;d++){
SerWrite(" Hallo liebe Zuschauer!",23);
for(d=0;d<1000;d++){
Sleep(255);}
SerWrite(" Mein Name ist ASURO und ich bin ein mobiler Roboter!",53);
for(d=0;d<1500;d++){
Sleep(255);}
SerWrite(" ASURO ist die abkuerzung fuer",33);
SerWrite(" Another Small and Unique Robot from Oberpfaffenhofen!",54);
for(d=0;d<2000;d++){
Sleep(255);}
SerWrite(" Ich wurde im Institut fuer Robotik und Mechatronik in Oberpfaffenhofen entwickelt!",83);
for(d=0;d<2500;d++){
Sleep(255);}
SerWrite(" Mein Programmierer ist Pascal Keller!",38);
for(d=0;d<1500;d++){
Sleep(255);}
FrontLED(ON);
SerRead(data,14,0);
if (data[0] == 'W' && data[1] == 'A' && data[2] == 'S'
&& data[3] == ' ' && data[4] == 'K' && data[5] == 'A'
&& data[6] == 'N' && data[7] == 'N' && data[8] == 'S'
&& data[9] == 'T' && data[10] == ' '
&& data[11] == 'D' && data[12] == 'U' && data[13] == '?')
SerWrite(" ICH KANN EINER LINIE FOLGEN!",29);
for(d=0;d<1000;d++){
Sleep(255);}
}
while(1){

MotorDir(FWD,FWD);
LineData(lineData);
if(lineData[0]>lineData[1])
{MotorSpeed(150,50);BackLED(ON,OFF);StatusLED(YELL OW);}
else
{MotorSpeed(50,150);BackLED(OFF,ON);StatusLED(RED) ;}
}
return 0;
}

Wsk8
11.01.2009, 14:20
Hallo,
vermutlich wirste so das linienfolgeprogramm nie gestartet kriegen. Die Chance das die Zeichenkette "WAS KANNST DU" richtig ankommt ist sehr gering. Mach es lieber so dass er das Programm startet wenn er 13 beliebige Zeichen empfangen hat (weiß ja keiner ob er jetzt wirklich "was kannst" du empfangen hat). Die etwas schwere Möglichkeit wäre, ihn jedes Zeichen ausgeben zu lassen und wenn es Falsch ist, du es durch einen Tastendruck löschen kannst, damit man es neu eingeben kann.

mfg

ASURO1995
11.01.2009, 14:48
Hallo Wsk8
Ich habe das Programm schon einige Male ausprobiert und habe dabei noch keinen Fehler entdekt. Das Linienfolgprogramm funktioniert übrigens. Aber um sicher zu sein, werde ich deine Tips berüksichtigen.

vielen dank

ASURO1995