wenn ich das mache funkt aber der Liniensensor nicht mehr
wie meinst du das?
//[code]
#include "asuro.h"
#include "stdlib.h"
int main(void)
{
int x=0,LANG=0,z=0,t=0;
unsigned int data[2];
char data0[5], data1[5];
Init();
x++;
if (x > 1000)
LANG++;
if (x > 1000)
x = 0;
while( 1 )
{
char message[] = "1";
SerRead(message,1,0);
if(message[0] == 'g')
{FrontLED(ON);
{
MotorDir(FWD,FWD);
MotorSpeed(110,100);
BackLED(OFF,OFF);
if ( data[0] < 50 )
{
MotorDir(RWD,RWD);
MotorSpeed(100,150);
BackLED(ON,OFF);
for(z=0 ; z < 40 ; z++){Sleep(216);}
}
if ( data[1] < 50 )
{
MotorDir(RWD,RWD);
MotorSpeed(100,150);
BackLED(OFF,ON);
for(z=0 ; z < 40 ; z++){Sleep(216);}
}
}
if (PollSwitch() >= 1)
{
MotorDir(RWD,RWD);
MotorSpeed(255,255);
BackLED(OFF,OFF);
StatusLED(RED);
for(z=0 ; z < 100 ; z++){Sleep(216);}
}
}
else if (message[0] == 's')
{
MotorDir(FREE,FREE);
MotorSpeed(0,0);
FrontLED(OFF);
StatusLED(OFF);
}
}
return 0;
}
//[code]
Mit dem Blauen Teil möchte ich das Programm über Hyper T starten und Pausieren (Stoppen)
wenn ich das mache funkt aber der Liniensensor nicht mehr
hat da wer ne idee was es da heben könnte
mfg Problem
wenn ich das mache funkt aber der Liniensensor nicht mehr
wie meinst du das?
Mein roby fährt dann immer über den schwarzen Fleck drüber
Noch was wichtiges wenn ich g drücke fährt er rückwärts los wenn ich nochmal g drücke färht er vorwärts noch mal g rückwärts .......... wenn ich dann mal s drücke bleibt er stehen
kennst du dich aus
ein bisschen komisch da ich ja über das ganze Programm die {} Klammer gemacht habe
mfg
wozu sind data0[] und data1[] ??
Die werden gar nicht gebraucht.
Banale Antwort auf dein Problem: Es fehlt die Liniensensorabfrage:
ohne dem funktioniert es natürlich nicht....Code:LineData(data);
Gruß
DL
#include "asuro.h"
#include "stdlib.h"
int main(void)
{
int x=0,LANG=0,z=0,t=0;
unsigned int data[2];
char data0[5], data1[5];
Init();
x++;
if (x > 1000)
LANG++;
if (x > 1000)
x = 0;
while( 1 )
{
char message[] = "1";
SerRead(message,1,0);
if(message[0] == 'G')
{FrontLED(ON);
{ LineData(data);
itoa (data[0], data0, 5);
itoa (data[1], data1, 5);
SerWrite (data0, 4);
SerWrite (" links\n\r", ;
SerWrite (data1, 4);
SerWrite (" rechts\n\r", 9);
for (t=0; t < 2; t++)
{
Sleep (72);
}
}
{
MotorDir(FWD,FWD);
MotorSpeed(110,100);
BackLED(OFF,OFF);
if ( data[0] < 50 )
{
MotorDir(RWD,RWD);
MotorSpeed(100,150);
BackLED(ON,OFF);
for(z=0 ; z < 40 ; z++){Sleep(216);}
}
if ( data[1] < 50 )
{
MotorDir(RWD,RWD);
MotorSpeed(100,150);
BackLED(OFF,ON);
for(z=0 ; z < 40 ; z++){Sleep(216);}
}
}
if (PollSwitch() >= 1)
{
MotorDir(RWD,RWD);
MotorSpeed(255,255);
BackLED(OFF,OFF);
StatusLED(RED);
for(z=0 ; z < 100 ; z++){Sleep(216);}
}
}
if(message[0] == 'S')
{
MotorDir(FREE,FREE);
FrontLED(OFF); //Dieser Teil müste eigentlich so funktonieren oder
StatusLED(OFF);
}
}
return 0;
}
so sieht jetzt aus funkt auch nicht
sie data sind dass ich am hyper T sehe wie groß der WErt der Sensoren ist
Hallo
Es macht überhaupt keinen Sinn hier im RN-Forum und auch bei arexx wegen jedem minimalen Problemchen einen neuen Thread zu starten. Versuche es selbst zu lösen sonst lernst du es nie. Ich sag mal grob zwei Tage eigenes Ausprobieren sollten schon vergehen bevor man sich hilfesuchend in einem Forum meldet.
Und noch ein Tipp: Verwende mehr Kommentare. Zum einen wird dir selbst dann klar, was du da machst. Zum anderen können wir leichter nachvollziehen, was du machen willst. Programme mit Kommentaren braucht man auch nicht mit farbigen Markierungen versehen und kannst deshalb die Codetags verwenden. Für meinen Geschmack verwendest du auch zuviele Leerzeilen, dadurch werden dein Programme für mich nahezu unleserlich.
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Ok werde ich machen
Ich habe gedacht ich machs mit farbe das es übersichtlicher wird
mfg
In deinem Thread auf das Arexx Forum habe ich geschrieben das entweder den Deklaration von de message 'Zeichenketten' oder den Standard-wert von SerRead (wann kein Zeichen empfangen wird) den eintrit von den if-abfragen verhindert. Aber nach weitere Gedanken bin ich sicher das den SerRead Befehl dein komplete Program Blockiert biss ein Zeichen empfangen wird. Dein Asuro reagiert nicht auf den Liniensensor weil er einfach nicht weiter als SerRead geht.(Eben wenn du doch den fehlende LineData(data); in dein Program geschrieben hatte.) Den 0 parameter am ende von SerRead meint das es immer warten bleibt biss irgendeiner Zeichen empfangen wird. Das es Forwärts oder Ruckwärts fahrt ist nicht ein Zeichen das es dauernt dein Code ablauft. Den Motoren drehen einfach dumm weiter.
Das soll besser gehen:
#include "asuro.h"
#include "stdlib.h"
int main(void)
{
int x=0,LANG=0,z=0,t=0;
unsigned int data[2];
char data0[5], data1[5];
char message[] = "1";
Init();
...
while( 1 )
{
SerRead(message,1,1); //1 Zeichen empfangen, weiter gehen nacht 1 Zeichen 'Zeitbasis'!
LineData(data); //Messe die Linienhelligkeit
if(message[0] == 'G')
...
Das empfangene zeichen im message zuruck senden zum Rechner mit SerWrite kann auch helfen verstehen wieso es nicht Korrekt reagiert. Einfach darauf verlassen das das Zeichen Korrekt ankommt bei Asuro kann man nicht.
Ich möchte in diesen Forum weiterschreiben
Hier das steht in asuro.c drinen
Code:void SerRead(unsigned char *data, unsigned char length,unsigned int timeout) { unsigned char i = 0; unsigned int time = 0; UCSRB = 0x10; // enable receiver /* non blocking */ if (timeout != 0) { while (i < length && time++ < timeout) { if (UCSRA & 0x80) { data[i++] = UDR; time = 0; } } if (time > timeout) data[0] = 'T'; } /* blocking */ else { while (i < length) { if (UCSRA & 0x80) data[i++] = UDR; } } }
Lesezeichen