Tigger88
25.06.2008, 23:40
Hallo!
Für ein Schulprojekt sollte mein Asuro eine Linie verfolgen und mithilfe der Taster Hindernisen ausweichen, je nachdem welche Taster betätigt werden.
Leider will das Programm nicht so wie ich.
Könnte jemand vllt. mit dem geschulten Auge einen Blick drauf werfen und den Fehler finden?
Der Asuro verfolgt nur die Linie, auf Taster gibt es keine Reaktion.
Ich sitze schon seit 2 Tagen an dem und bin ratlos.
Danke euch sehr im Voraus!!
#include "asuro.h"
#include "myasuro.h"
#define FULL_L 200
#define FULL_R 200
/************************************************** *************************
*
* unsigned int data[2]; = Speicher fur Liniensensor reservieren
*
* data[0] = linker Sensor, data[1] = rechter Sensor
************************************************** **************************/
//DEFINITIONEN FUER TEILPROGRAMM DER TASTER
/* Motor vorwдrts */
void MotorFwd(void)
{
MotorDir(FWD,FWD);
MotorSpeed(FULL_L,FULL_R);
}
/* Motor rьckwдrts */
void MotorRwd(void)
{
MotorDir(RWD,RWD);
MotorSpeed(FULL_L,FULL_R);
}
/* Motor rьckwдrts Links */
void MotorRwdL(void)
{
MotorDir(RWD,RWD);
MotorSpeed(FULL_L,0);
}
/* Motor rьckwдrts Rechts */
void MotorRwdR(void)
{
MotorDir(RWD,RWD);
MotorSpeed(0, FULL_R);
}
/* Motor stop */
void MotorStop(void)
{
MotorSpeed(0,0);
}
//ENDE DER DEFINITIONEN
void FollowLine (void) //FollowLine wird erklдrt bzw. definiert
{
unsigned int data[2]; //Speicher fuer Liniensensor reservieren
Init();
FrontLED(ON);
MotorDir(FWD,FWD);
while(1)
{
{
if
(PollSwitch()<=0)
LineData(data); //Liniensensor auslesen
if(data[0]>data[1]) //Wenn links heller als rechts
{
MotorSpeed(150,30); //dann links schneller als rechts
}
else //ansonsten
{
MotorSpeed(30,150); //rechts schneller als links
}
}
}
}
int main(void)
{
unsigned char t1, t2;
Init();
EncoderInit ();
while (1)
{
if
(PollSwitch()>=0);
{
t1 = PollSwitch(); //Taster zweimal abfragen
t2 = PollSwitch();
}
{
if (t1 == 0 && t2 == 0) /* keine Taste gedrueckt*/
{
FollowLine(); //Linie folgen (Programm von oben ausfuehren)
FrontLED(ON);
BackLED(OFF,OFF);
}
else if ( (t1 != 0) && (t2 != 0) && (t1 == t2)) //sonst wenn Tasten ungleich null
{
MotorStop(); //Motor anhalten. WELCHE TASTEN gedrueckt? 3 Moeglichkeiten:
if ( t1 == 0x12) //0x12, also tasten vorne gedrьckt?
{
Go(-10,100); // dann: 10cm nach hinten; geschw 100
BackLED(ON,OFF); // mit eingeschalteten hinteren LEDs
}
if ((t1 & 0x07) > 0 ) /* Tasten links gedrьckt? */
{
Turn (-90, 150); // dann: rechts um 90 grad geschw 150
FrontLED(OFF);
BackLED(ON,OFF);
}
if (t1 & 0x30) /* Tasten rechts gedrьckt? */
{
Turn (90, 150); // links um 90 grad geschw 150
FrontLED(OFF);
BackLED(OFF,ON);
}
Msleep(1000); /* 1 Sekunde warten */
}
}
}
return 0;
}
Für ein Schulprojekt sollte mein Asuro eine Linie verfolgen und mithilfe der Taster Hindernisen ausweichen, je nachdem welche Taster betätigt werden.
Leider will das Programm nicht so wie ich.
Könnte jemand vllt. mit dem geschulten Auge einen Blick drauf werfen und den Fehler finden?
Der Asuro verfolgt nur die Linie, auf Taster gibt es keine Reaktion.
Ich sitze schon seit 2 Tagen an dem und bin ratlos.
Danke euch sehr im Voraus!!
#include "asuro.h"
#include "myasuro.h"
#define FULL_L 200
#define FULL_R 200
/************************************************** *************************
*
* unsigned int data[2]; = Speicher fur Liniensensor reservieren
*
* data[0] = linker Sensor, data[1] = rechter Sensor
************************************************** **************************/
//DEFINITIONEN FUER TEILPROGRAMM DER TASTER
/* Motor vorwдrts */
void MotorFwd(void)
{
MotorDir(FWD,FWD);
MotorSpeed(FULL_L,FULL_R);
}
/* Motor rьckwдrts */
void MotorRwd(void)
{
MotorDir(RWD,RWD);
MotorSpeed(FULL_L,FULL_R);
}
/* Motor rьckwдrts Links */
void MotorRwdL(void)
{
MotorDir(RWD,RWD);
MotorSpeed(FULL_L,0);
}
/* Motor rьckwдrts Rechts */
void MotorRwdR(void)
{
MotorDir(RWD,RWD);
MotorSpeed(0, FULL_R);
}
/* Motor stop */
void MotorStop(void)
{
MotorSpeed(0,0);
}
//ENDE DER DEFINITIONEN
void FollowLine (void) //FollowLine wird erklдrt bzw. definiert
{
unsigned int data[2]; //Speicher fuer Liniensensor reservieren
Init();
FrontLED(ON);
MotorDir(FWD,FWD);
while(1)
{
{
if
(PollSwitch()<=0)
LineData(data); //Liniensensor auslesen
if(data[0]>data[1]) //Wenn links heller als rechts
{
MotorSpeed(150,30); //dann links schneller als rechts
}
else //ansonsten
{
MotorSpeed(30,150); //rechts schneller als links
}
}
}
}
int main(void)
{
unsigned char t1, t2;
Init();
EncoderInit ();
while (1)
{
if
(PollSwitch()>=0);
{
t1 = PollSwitch(); //Taster zweimal abfragen
t2 = PollSwitch();
}
{
if (t1 == 0 && t2 == 0) /* keine Taste gedrueckt*/
{
FollowLine(); //Linie folgen (Programm von oben ausfuehren)
FrontLED(ON);
BackLED(OFF,OFF);
}
else if ( (t1 != 0) && (t2 != 0) && (t1 == t2)) //sonst wenn Tasten ungleich null
{
MotorStop(); //Motor anhalten. WELCHE TASTEN gedrueckt? 3 Moeglichkeiten:
if ( t1 == 0x12) //0x12, also tasten vorne gedrьckt?
{
Go(-10,100); // dann: 10cm nach hinten; geschw 100
BackLED(ON,OFF); // mit eingeschalteten hinteren LEDs
}
if ((t1 & 0x07) > 0 ) /* Tasten links gedrьckt? */
{
Turn (-90, 150); // dann: rechts um 90 grad geschw 150
FrontLED(OFF);
BackLED(ON,OFF);
}
if (t1 & 0x30) /* Tasten rechts gedrьckt? */
{
Turn (90, 150); // links um 90 grad geschw 150
FrontLED(OFF);
BackLED(OFF,ON);
}
Msleep(1000); /* 1 Sekunde warten */
}
}
}
return 0;
}