-         

Ergebnis 1 bis 6 von 6

Thema: Zusammenfügen von 2 Programmteilen

  1. #1
    ASURO1995
    Gast

    Zusammenfügen von 2 Programmteilen

    Anzeige

    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.

    Code:
    #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(YELLOW);}
       else
       {MotorSpeed(50,150);BackLED(OFF,ON);StatusLED(RED);}
       }
       return 0; 
       }
    Ich bin um jede Antwort froh und danke euch schon im voraus![schild=17 fontcolor=8B0000 shadowcolor=C0C0C0 shieldshadow=1]HELP[/schild][schild=random fontcolor=FF0000 shadowcolor=C0C0C0 shieldshadow=1]HELP[/schild]

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.03.2006
    Ort
    Darmstadt
    Alter
    26
    Beiträge
    522
    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

  3. #3
    ASURO1995
    Gast
    Vielen dank für deine schnelle Antwort!

  4. #4
    ASURO1995
    Gast
    Hier habe ich nochmal das ganze Programm

    Code:
    #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(YELLOW);}
       else
       {MotorSpeed(50,150);BackLED(OFF,ON);StatusLED(RED);}
       }
       return 0; 
       }

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    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

  6. #6
    ASURO1995
    Gast
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •