PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro Linienverfolgung....



murdocg
26.01.2009, 11:35
hi hab nach längerer zeit mal wieder meinen asuro vom regal geholt.
habe dann versucht ihn dieses programm abarbeiten zulassen:

#include “asuro.h” // Linienverfolgung auf die einfachste Art
int main(void) {
unsigned int data[2]; //Speicher bereitstellen
Init();
FrontLED(ON); // Linienbeleuchtung einschalten
MotorDir(FWD,FWD); // Beide Motoren auf vorwärts
while(1){ // Endlosschleife, ASURO soll beliebig
// lang einer Linie nachfahren
LineData(data); // aktuelle Helligkeitswerte der
// Fototransistoren einlesen
if (data [0] > data [1] ) // links heller als rechts...
{MotorSpeed(200,150);} // ... dann links mehr Gas geben...
else
{MotorSpeed(150,200);} // ... sonst rechts mehr Gas geben!
}
return 0;
}
Er fährt aber nur nach Links (im kreis)....

murdocg
26.01.2009, 12:12
Brauche noch Hilfe bei einem meiner andren Programme...

#include "asuro.h"
int main(void) {
Init();
StatusLED(RED);
MotorDir(FWD,FWD);
MotorSpeed (180,180);
if (PollSwitch(2)) {
MotorDir(RWD,RWD);
MotorSpeed(150,150);
Sleep (216);
MotorDir(FWD,FWD);
MotorSpeed(180,130);
Sleep (216);
MotorSpeed(180,180);
}
else if (PollSwitch(5)) {
MotorDir(RWD,RWD);
MotorSpeed(150,150);
Sleep (216);
MotorDir(FWD,FWD);
MotorSpeed(130,180);
Sleep (216);
MotorSpeed(180,180);
}
while(1); // Endlosschleife
return 0;}

Wenn ich dieses Prog. kompilieren will bekomme ich immer folgende Fehlermeldung:

-------- begin --------
avr-gcc --version
avr-gcc (GCC) 3.3.1
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c -o test.o
test.c: In function `main':
test.c:7: error: too many arguments to function `PollSwitch'
test.c:16: error: too many arguments to function `PollSwitch'
make: *** [test.o] Error 1

> Process Exit Code: 2

Need help! Ich krieg das echt nit hin :(

Valen
26.01.2009, 14:05
Brauche noch Hilfe bei einem meiner andren Programme...

...
if (PollSwitch(2)) {
...
else if (PollSwitch(5)) {
...

Wenn ich dieses Prog. kompilieren will bekomme ich immer folgende Fehlermeldung:

...
test.c: In function `main':
test.c:7: error: too many arguments to function `PollSwitch'
test.c:16: error: too many arguments to function `PollSwitch'
...
Need help! Ich krieg das echt nit hin :(Ist doch klar vom error log. Was hast du mit dem 2 und 5 vor? Die Pollswitch()-funktion gibt ein binaire summe der tasten zuruck. Mann kan nicht wählen welcher taste er misst. Im If-statement sollte man genau testen welcher werte das ist. Etwa wie

if(Pollswitch()==1)

Aber such mal auf "Pollswitch()" im forum wie andere leute das gebraucht haben. Das obene ist nicht optimal.

Dabei, einer if-statement wirds nur 'true' wenn die test (oder zuruckgabe wert einer funktion) nicht_nul ist. Also 'if (1)' ist 'true', aber auch 'if (2048)', oder 'if (-1)'. 'if (0)' ist 'false'.

murdocg
26.01.2009, 18:36
Okai. Verstanden habe ich das nicht. Kannst du, wenn die Funktionen meines Programms klar sind, mir mal eine Verbesserte Veriosn posten. Im Vergleich von richtig Falsch, versteh ichs oclhe Sachen immer besser.

Valen
26.01.2009, 19:17
Ok, suchen nach eine gutes beispiel war nicht zo einfach, muss ich erkennen. Aber ScWeiNePaPSt.xD hat ein gutes beispie hier mit Pollswitch(). Besser vieleicht die code von Radbruch an zu schauen, weil es etwas 'logisch'-er ist. https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=45140&highlight=pollswitch

Erst wird Pollswitch mehrmahls abgefragt und in einem variablen gespeichert.

t1 = PollSwitch();
t2 = PollSwitch();

Diesen variabblen werden dan verglichen ob die tasten stabiel sind.

if((t1 == 0) && (t2 == 0)) [stabiel keine tasten]

oder

else if (t1 && (t1 == t2)) [stabiel irgend welcher tasten sind angeschtossen]

Und dann werden die tasten genau getested welcher kombination von tasten das sind:

if (t1 & 0x38) [tasten sind: 38 hex = 56 decimal= 32+16+8 decimal]

Leider vergesse ich immer ob das die tasten am linker oder rechter seite sind.

radbruch
27.01.2009, 13:51
K6 (mit PollSwitch()-Wert 1) ist neben dem Schalter S1:

malediction
28.01.2009, 08:51
hi...

ich habe in diesem (https://www.roboternetz.de/phpBB2/viewtopic.php?p=421635#421635) thread einmal gepostet, wie man die tasterabfrage richtig schön implementieren kann und so läuft sie bei mir auch 100%ig exakt.

vielleicht hilfts dir ja...

lg, malediction

(edit: @valen: man kann sich die anordnung ganz leicht merken: du liest ja eine 6-stellige binärzahl aus (oder vllt auch 8, wobei die beiden msbs dann nicht interessieren). und die sieht beispielsweise so aus: 001000. dabei ist das erste bit ganz links genau der linke taster, wenn du von hinten (also vom batteriefach aus) über asuro schaust, und das ganz rechte eben der rechte taster. also ist in meinem beispiel der 3. taster von links gedrückt. das ist meine eselsbrücke dabei.)

Valen
28.01.2009, 14:00
Danke dir beiden, nun werde ich es niehmals mehr vergessen.