-
Vielen Dank er fährt jetzt so wie ich das möchte.
Jetzt wollte ich eine kleine Modifikation machen und mal was mit den Kollisionsdinger machen:
Code:
#include "asuro.h"
int i;
int main(void)
{
Init();
MotorDir(FWD,FWD);
MotorSpeed(200,200);
StatusLED(GREEN);
if ((PollSwitch()!=0) || (PollSwitch()!=0) || (PollSwitch()!=0))
{
MotorDir(BREAK,BREAK);
MotorSpeed(0,0);
StatusLED(RED);
for(i=0; i<1000; i++) Sleep(72);
MotorDir(FWD,BREAK);
MotorSpeed(100,0);
StatusLED(GREEN);
}
while(1);
return(0);
Jedoch fährt er mir jetzt durch, was nicht sein sollte - aber laut einem anderem Forum, soll man die Abfrage mehrmals, oder so wie oben machen, da verschiedene Werte zurückkommen und man das so umgehen könnte (suchs euch nochmals raus, wenn ihr wollt).
Weiters hab ich eine generelle Frage - arbeitet ihr noch immer in der test.c? Welche Dateien von der Original-Cd sind essentiell? Hab diese hier rüberkopiert:
file:///home/davidb/Asuro/AsuroFl.ini
file:///home/davidb/Asuro/Test-all.bat
file:///home/davidb/Asuro/Test-clean.bat
file:///home/davidb/Asuro/asuro.c
file:///home/davidb/Asuro/asuro.d
file:///home/davidb/Asuro/asuro.h
file:///home/davidb/Asuro/asuro.lst
file:///home/davidb/Asuro/asuro.o
file:///home/davidb/Asuro/makefile
file:///home/davidb/Asuro/test.c
file:///home/davidb/Asuro/test.c~
file:///home/davidb/Asuro/test.d
file:///home/davidb/Asuro/test.eep
file:///home/davidb/Asuro/test.elf
file:///home/davidb/Asuro/test.hex
file:///home/davidb/Asuro/test.lss
file:///home/davidb/Asuro/test.lst
file:///home/davidb/Asuro/test.map
file:///home/davidb/Asuro/test.o
file:///home/davidb/Asuro/test_original.c
Brauch ich da wirklich alles? test.c ist ja meine und asuro.h brauch ich ja auch...
Macht ihr euch eigentlich eigene Programme? Was müsste ich dazu beachten. Ist es überhaupt ratsam, weil normal reicht es ja aus, wenn man immer in der test.c arbeitet, man kann sie anders abspeichern wenn man verschiedene Programme abspielen will...
-
So jetzt hab ich noch eine Modifikation gemacht, doch das If wird bei Kollision trotzdem nicht ausgeführt. Fahren tut er brav!
Code:
#include "asuro.h"
int i;
int main(void)
{
Init();
if (PollSwitch()==0 && PollSwitch()==0 && PollSwitch()==0 && PollSwitch()==0)
{
MotorDir(FWD,FWD);
MotorSpeed(200,200);
BackLED(ON,ON);
}
if (PollSwitch()!=0 && PollSwitch()!=0 && PollSwitch()!=0 && PollSwitch()!=0)
{
MotorDir(BREAK,BREAK);
MotorSpeed(0,0);
StatusLED(RED);
MotorDir(FWD,BREAK);
MotorSpeed(100,0);
StatusLED(GREEN);
}
while(1);
return(0);
}
-
Hallo,
du musst die If-Abfrage in die while-Schleife tun, sonst fragt er nur beim Starten die Taster ab und bleibt danach in der Endlosschleife.
Grüße,
oernie97
-
Ja das hab ich jetzt schon gemacht - jedoch auch ohne Ergebnis - er fährt einfach nicht los:
Code:
#include "asuro.h"
int i;
int main(void)
{
Init();
while(1);
if (PollSwitch()==0 && PollSwitch()==0 && PollSwitch()==0 && PollSwitch()==0)
{
MotorDir(FWD,FWD);
MotorSpeed(200,200);
BackLED(ON,ON);
StatusLED (GREEN);
}
else
{
MotorDir(BREAK,BREAK);
MotorSpeed(0,0);
BackLED(OFF,OFF);
StatusLED(RED);
MotorDir(FWD,BREAK);
MotorSpeed(100,0);
}
return(0);
}
-
Ich meine _in_ die while-Schleife (bedeutet, das Semikolon hinter while (1) wird zu einer geöffneten geschweiften Klammer und vor return(0); wird eine geschlossene geschweifte Klammer eingefügt).
-
-
Dieser Code hier funktioniert. Zuerst fährt er brav vorwärts, bei Kollision (also Drücken eines Kollisionsschalter) dreht sich auch ein Rad nach hinten. Jedoch bleibt er mir hin- und wieder in einer Schleife stecken, in der sich beide Räder nach vorne drehen oder zB auch nur eines nach hinten. Dann bleibt er mal komplett stehen und das Status-LED beginnt zu blinken. Einmal hat sich sogar das untere LED eingeschaltet, als er stehengeblieben ist.
Was passiert da?
Code:
#include "asuro.h"
int i;
int main(void)
{
Init();
while(1){
if (PollSwitch()==0 && PollSwitch()==0)
{
MotorDir(FWD,FWD);
MotorSpeed(200,200);
BackLED(ON,ON);
StatusLED (GREEN);
}
else
{
MotorDir(BREAK,BREAK);
MotorSpeed(0,0);
BackLED(OFF,OFF);
StatusLED(RED);
MotorDir(RWD,BREAK);
MotorSpeed(150,0);
}
}
return(0);
}
/*for(i=0; i<2000; i++) Sleep(72);*/
-
"Dann bleibt er mal komplett stehen und das Status-LED beginnt zu blinken."
Halt dann mal den Transceiver über den asuro und schaue ins Terminalfenster. Vermutlich erscheint dann endlos "VLVLVLVLVL..". Das würde für Unterspannung (Voltage Low) stehen und sich aus der Belastung der Akkus beim Fahren und auch beim schnellen Richtungswechsel der Antriebe erklären. Spannungseinbrüche könnten auch die anderen seltsamen Erscheinungen erklären. (Anleitung Seite 29 Kapitel 6.3.3.)
-
Ok bekomm schöne VLs ausgegeben - Was kann man dagegen tun?
Hab nachdem ich ihn fertiggebaut habe neue Batterien reingegeben - vielleicht sind die auch schon zu schwach...
-
Muss an den Batterien liegen - hab gerade ein Programm geschrieben, wo er 5 Sekunden geradeausfährt, kurz stehenbleibt und sich dreht und bei jedem Stück und jeder Drehung sehe ich wie er an den Batterien zehrt...