PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bestimmte Aktion bei Empfangen eines Zeichens



Greek
05.03.2010, 19:20
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:


#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;

}

Thund3r
06.03.2010, 10:44
Hallo

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

Versuch mal den Code (ungetestet):


#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

Greek
06.03.2010, 11:19
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!