-         

Ergebnis 1 bis 3 von 3

Thema: Bestimmte Aktion bei Empfangen eines Zeichens

  1. #1

    Bestimmte Aktion bei Empfangen eines Zeichens

    Anzeige

    Hallo,

    ich bin noch recht unerfahren mit dem Asuro und brauche daher eure Hilfe.

    Ich habe ein Programm geschrieben, sodass der Asuro wenn er ein belieges IR-Signal empfängt, zunächst beschleunigt und dann eine Linie verfolgt (Linienverfolgung ganz simpel).

    Jetzt will ich noch erreichen, dass wenn man am PC die Taste "s" drückt, der Asuro sich um 180° dreht ein Stückchen vor fährt und sich selbst auf unbestimmte Zeit im Kreis dreht.

    Leider bekomm ich das nicht so hin wie ich es will.

    Der Code sieht folgendermaßen aus:

    Code:
    #include "asuro.h"
    #include "myasuro.h"
    
    int main (void)
    {
    Init();
    
    unsigned char daten;
    unsigned char v; 
    unsigned int data [2];
    
    StatusLED(OFF);
    
    
    SerRead(daten,1,0);		//Bei Empfang eines beliebigen IR-Signals
    
    int i;
    v=80; 
    
    for (i=0; i<120 ; i++)
    {
    MotorSpeed(v,v);
    v++;
    Msleep(1);				//Beschleunigungsvorgang
    }
    
    while(1)
    {
    EncoderInit();
    FrontLED (ON);
    LineData (data);
    
    if(data[0] > data[1])	
    {
    MotorSpeed(140,40);	
    }
    
    else
    {
    MotorSpeed(40,140);			//Linienverfolgung
    }
    
    unsigned char daten[1];
    SerRead (&daten,1,0);
    
    if(daten[0] == 's')
    {
    Turn (180,120);
    Go(100,100);
    MotorDir(FWD,FWD);
    MotorSpeed(255,0);
    }
    
    
    
    }
    
    return 0;
    
    }

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.01.2009
    Ort
    NRW
    Beiträge
    561
    Hallo

    Meinst du "beliebiges IR-Signal"?
    Ich denk mal ja.

    Versuch mal den Code (ungetestet):
    Code:
    #include "asuro.h"
    #include "myasuro.h"
    
    int main (void)
    {
    Init();
    
    unsigned char daten;
    unsigned char v;
    char c[3]={0,0,0};
    
    StatusLED(OFF);
    
    do{
    c[0]=0;c[1]=0;c[2]=0;
    SerRead(c,3,20);      
    } while(!(c[1]=='g'||c[0]=='g')); //Bei Empfang des Buchstaben "g"
    int i;
    v=80;
    
    for (i=0; i<120 ; i++)
    {
    MotorSpeed(v,v);
    v++;
    Msleep(1);            //Beschleunigungsvorgang
    }
    
    while(1)
    {
    EncoderInit();
    FrontLED (ON);
    LineData (data);
    
    if(data[0] > data[1])   
    {
    MotorSpeed(140,40);   
    }
    
    else
    {
    MotorSpeed(40,140);         //Linienverfolgung
    }
    SerRead(c,3,20); 
    
    
    if((c[1]=='s'||c[0]=='s')) //Bei Empfang des Buchstaben "s" (Doppelabgleich um sicher zu gehn)
    {
    Turn (180,120);
    Go(100,100);
    MotorDir(FWD,FWD);
    MotorSpeed(255,0);
    }
    c[0]=0;c[1]=0;c[2]=0;
    
    
    }
    
    return 0;
    
    }
    Hab den Großteil deines Programms einfach mal so übernommen und meinen Teil an die entscheidenen Stellen gepackt.

    Gruß Thund3r

  3. #3
    Tut mir Leid falls ich mich undeutig ausgedrückt habe.

    Also es soll so ablaufen:

    Wenn ich Hyperterminal öffne und dort eine beliebe Taste drücke, soll er losfahren (Beschleunigungsvorgang) und sofort mit der Linienverfolgung anfangen.

    Das funktioniert soweit.

    Was ich jetzt noch einbauen will, ist, dass wenn ich in Hyperterminal die Taste "s" drücke er bestimmte Aktionen ausführt.

    Ich denke mal, dass ist auch das was du gedacht hast oder?

    Ich werds nachher mal prüfen, musste grade feststellen, dass die Batterien leer sind (deswegen ist er in letzter Zeit also auch nicht wirklich mehr geradeaus gefahren^^)

    Danke schonmal für die Hilfe so far!

Berechtigungen

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