ok danke... kann ich jetzt aber auf die schnelle nicht testen da der asuro grad bei einem anderen projekt mitglied ist der da mal nach schaut
habe ihm aber gesagt er soll das programm mal drauf schreiben und die werte überprüfen
Druckbare Version
ok danke... kann ich jetzt aber auf die schnelle nicht testen da der asuro grad bei einem anderen projekt mitglied ist der da mal nach schaut
habe ihm aber gesagt er soll das programm mal drauf schreiben und die werte überprüfen
ich bekomme eine fehlermeldung wenn ich den code compilieren will
Code:#include "asuro.h"
#include <stdlib.h>
int main (void)
{
int t;
unsigned int data[2];
unsigned char links[7];
unsigned char rechts[7];
for (t=0;t<25;t++)
{
LineData (data);
itoa (data[0], links, 10);
itoa (data[1], rechts, 10);
SerWrite (text, 6);
SerWrite ("\n\r", 2);
SerWrite (test, 6);
SerWrite ("\n\n\r", 3);
Sleep (215);
}
StatusLED (RED);
return 0;
}
Fehlermeldung:
test.c: In function `main':
test.c:19: error: `text' undeclared (first use in this function)
test.c:19: error: (Each undeclared identifier is reported only once
test.c:19: error: for each function it appears in.)
test.c:22: error: `test' undeclared (first use in this function)
make: *** [test.o] Error 1
> Process Exit Code: 2
Hast du text und test deklariert?
Genau...
Deine SerWrite zeilen sollten wie das folgende sein:
Code:...
SerWrite (links, 6);
SerWrite ("\n\r", 2);
SerWrite (rechts, 6);
SerWrite ("\n\n\r", 3);
...
ok jetzt funktioniert er^^ jetzt muss ich den nur noch mein kumpel geben
ich hab mal ne frage wie kann ich die phototransistoren so programmieren dass beide gleichzeitig weiß und schwarz unterscheiden? geht des überhaupt? also ich will ein programm schreiben dass wenn der boden weiß ist eine bestimmte aktion ausgeführt wird und wenn er schwarz ist etwas anderes gemacht wird. er soll dann im prinziep einen schwarzen punkt auf einer großen fläche finden ist das möglich oder soll ich dafür eine abdunkeln und die andere hell lassen oder so?
gibt es auch eine möglichkeit dass der asuro den schwarzen gegenstand findet un dann einer schwarzen linie folgt um ihn irgendwo hin zu bringen?hat jemand n lösungsvorschlag?
Das geht im Prinzip. Du hast diese beiden Phototransistoren an den Eingängen PC2 und PC3 also an ADC2 und ADC3 angeschlossen. Nun kannst Du bei geeigneter Programmierung bzw. Initialisierung der ADCs die aktuelle Spannung an diesen Eingängen abfragen, entweder im Wert 0 ... 255 (8 bittig) oder 0 ... 1023 (10 bittig).
Die Helligkeitsunterscheidung liefe dann so ungefähr (hier die Werte NUR als Beispiel für 8 Bit):
0 bis 100 <=> schwarz (bzw. dunkel)
150 bis 255 <=> weiß (bzw. hell)
Der SFH300 ist über den für unser Auge sichtbaren Wellenbereich des Lichtes empfindlich, damit sollte die Unterscheidung schon gut gehen.
Viel Erfolg
okay dann bin ich schonmal erleichtert dass meine idee möglich ist =D wie müsst ich des dann in nem programm schreiben? also halt dass beide zB einen wert zw 150-255 haben? ich hab schonmal angefangen:
#include <asuro.h>
#include <myasuro.h>
int main (void)
{
unsigned int data [2]
Init();
FrontLED(ON);
LineData(data);
if(
{
}
}
ich weis jetzt aber nicht was ich nach if schreiben soll
ich bin ned wirklich gut im programmieren des ist das problem xD
okay also ich hab jetzt mal n programm geschrieben aber ich hab da n paar probleme also ich wollt dass mein asuro an der wand entlang fährt und in einer art wohnung also auch mit mehreren zimmern einen gegenstand sucht.
ich hab jez mithilfe von internet und beispielprogramme ein eigenes programm geschrieben aber er tut ned ganz was er soll...
ich hab mir des so gedacht:
wenn der boden weiß ist soll er einen bogen fahren, damit er mit dem taster rechts außen an der wand anstößt. dann dreht er sich ein stück auf der stelle um von der wand weg zu kommen und fährt wieder einen bogen bis zur wand sollte er sich mal zu weit drehen warum auch immer und stößt mit dem linken taster an der wand an dreht er sich wieder so dass er richtig rum steht. sobal der boden unter ihm schwarz wird oder er einen schwarzen gegenstand erreicht bleibt er stehen. dann sollen die backleds blinken und die statusled wechselt mehrfach die farbe (grün-gelb-grün-gelb...). und anschliesend könnte er noch über eine schwarze linie wieder nach draußen finden.
mein programm funktioniert allerdings nicht wirklich. wenn ich den asuro einschalte dann bleibt er stehen die vordere led leuchtet die backled rechts hinten leuchtet ebenfalls und die statusled leuchtet gelb. ich weis nicht woran es liegt
hier das programm:
Code:#include <asuro.h>
#include <myasuro.h>
int main (void)
{
int anzahlwiederholungen=0, i=6;
int ldata[2];
unsigned int data[2]
;unsigned char t1, t2; <- ich weis nicht warum aber ohne das ";" am anfang wurde mir ein error angezeigt
Init();
FrontLED(ON);
LineData(ldata);
if(ldata[0]>125,ldata[1]>125)
{
while (1)
{
t1 = PollSwitch();
t2 = PollSwitch();
if (t1 == 0 && t2 == 0) /* keine Taste */
{
MotorDir(FWD,FWD); /* Rechtsbogen fahren */
MotorSpeed(150,120);
/* FrontLED(ON);
BackLED(OFF,OFF);*/
}
else if (t1 && t2 && t1 == t2)
{
MotorDir(BREAK,BREAK);
if (t1 & 0x07) /* Tasten links gedrückt? */
{
MotorDir(RWD,RWD); /* auf der Stelle umdrehen */
MotorSpeed(150,150);
/*FrontLED(OFF);
BackLED(ON,OFF);*/
}
if (t1 & 0x38 ) /* Tasten rechts gedrückt? */
{
MotorDir(FWD,FWD); /* Vorwärts Linkskurve */
MotorSpeed(100,150);
/* FrontLED(OFF);
BackLED(OFF,ON);*/
}
Msleep(1000); /* 1 Sekunde fahren */
}
}
}
else if(ldata[0]<125,ldata[1]<125)
{
while (anzahlwiederholungen<i)
{
MotorDir(BREAK,BREAK);
MotorSpeed(BREAK,BREAK);
StatusLED(GREEN);
BackLED(ON,OFF);
StatusLED(YELLOW);
BackLED(OFF,ON);
anzahlwiederholungen++;
}
}
else if(ldata[0]>ldata[1])
{
MotorDir(FWD,FWD);
MotorSpeed(175,125);
}
else if(ldata[0]<ldata[1])
{
MotorDir(FWD,FWD);
MotorSpeed(125,175);
}
return 0;
}
weis jemand wo der fehler liegen könnte? ich komm irgendwie nicht weiter...
Was meinst die mit diese If abfrage?
Versuch dich deine Code so zu schreiben, mit weitere tiefe einsprungen (Tab-Taste) bei jedes neue {} Code-block:Code:if(ldata[0]>125,ldata[1]>125)
Das macht deine Code viel übersichtlicher.Code:#include <asuro.h>
#include <myasuro.h>
int main (void)
{
int anzahlwiederholungen=0, i=6;
int ldata[2];
unsigned int data[2];
unsigned char t1, t2; <- ich weis nicht warum aber ohne das ";" am anfang wurde mir ein error angezeigt
Init();
FrontLED(ON);
LineData(ldata);
if(ldata[0]>125,ldata[1]>125)
{
while (1)
{
t1 = PollSwitch();
t2 = PollSwitch();
if (t1 == 0 && t2 == 0) /* keine Taste */
{
MotorDir(FWD,FWD); /* Rechtsbogen fahren */
MotorSpeed(150,120);
/* FrontLED(ON);
BackLED(OFF,OFF);*/
}
else if (t1 && t2 && t1 == t2)
{
MotorDir(BREAK,BREAK);
if (t1 & 0x07) /* Tasten links gedrückt? */
{
MotorDir(RWD,RWD); /* auf der Stelle umdrehen */
MotorSpeed(150,150);
/*FrontLED(OFF);
BackLED(ON,OFF);*/
}
if (t1 & 0x38 ) /* Tasten rechts gedrückt? */
{
MotorDir(FWD,FWD); /* Vorwärts Linkskurve */
MotorSpeed(100,150);
/* FrontLED(OFF);
BackLED(OFF,ON);*/
}
Msleep(1000); /* 1 Sekunde fahren */
}
}
}
else if(ldata[0]<125,ldata[1]<125)
{
while (anzahlwiederholungen<i)
{
MotorDir(BREAK,BREAK);
MotorSpeed(BREAK,BREAK);
StatusLED(GREEN);
BackLED(ON,OFF);
StatusLED(YELLOW);
BackLED(OFF,ON);
anzahlwiederholungen++;
}
}
else if(ldata[0]>ldata[1])
{
MotorDir(FWD,FWD);
MotorSpeed(175,125);
}
else if(ldata[0]<ldata[1])
{
MotorDir(FWD,FWD);
MotorSpeed(125,175);
}
return 0;
}