PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Was stimmt an diesem Programm nicht ?



gandalfsz
06.01.2007, 16:39
Wenn ich das Programm auf den ASURO lade leuchtet nur die Status Led grün. Was stimmt da nicht ?? Er sollte normalerweise fahren bis er in ne wand kracht und dann umdrehen. Es gibt ausserdem ein leises Summen






#include "asuro.h"

int main(void)
{
int i;

Init();

MotorSpeed(100,100);

while(1)
{
MotorDir(FWD,FWD);

StatusLED(GREEN);

while (PollSwitch == 0);

MotorDir(RWD,RWD);

for (i = 0; i<844; i++)
{
Sleep(255);
}

MotorDir(FWD,RWD);

for (i = 0; i<1600; i++)
{
Sleep(255);
}

}

return 0;
}

mfg Daniel

linux_80
06.01.2007, 17:00
Hallo,
Warum das stimmt doch, oder was soll die LED machen ?
Wenn man angibt StatusLED(GREEN); leuchtet sie grün wenn sie richtigrum drin ist.

Oder von was redest Du ?

Und den Code Bitte in Code-Tags einschliessen, da lässt sich sonst schlecht erkennen was da zusammengehört !

PS:
da steht mfg Daniel mitten im Code, das sollte da wohl auch nicht hin ;-)

Hissi
06.01.2007, 17:08
Hallo

ich versteh nicht ganz was du willst.
willst du das der BOT soll geradeaus fährt bis ein Hinderniss kommt dann fährt er zurück dreht sich und fährt dann weiter?

gandalfsz
06.01.2007, 17:39
@ Hissi: jepp
@ all: Der Rest vom Code hinter mfg Daniel hat garnicht dazugehört den hab ich nur ausversehen gepostet aber jetzt stimmt alles (hoffe ich)
mfg Daniel

damaltor
06.01.2007, 17:41
erst speichern dann kompilieren. das ist der häufigste fehler. bist du sicher dass du das so gemacht hast?

gandalfsz
06.01.2007, 17:50
hab gespeichert und Kompieliert und übertragen in der reihenfolge geht alles
mfg Daniel

der_andi
07.01.2007, 01:13
Gibt dem Motor mal mehr Dampf, kann passieren das die bei 100 nicht anlaufen, probier einfach mal 255.

Hissi
07.01.2007, 01:26
Hallo

bei dem while (PollSwitch == 0);

fehlen die Klammern und es gehört kein Strich-Punkt dahinter müsste eigentlich nen Fehler anzeigen.

Soll der Bot in den for Schleifen die 2,5s warten oder soll er fahren (fahren geht glaub ich mit Sleep nicht Zitat Asuro Anleitung:
"9.2.5. void Sleep(unsigned char time72kHz)
Diese Funktion lässt den Prozessor für eine einstellbare Zeit warten.")

Ausserdem ist die ganze while Funktion irgendwie unsinnig While(PollSWitch()==0)
{MotorDir(RWD,RWD);}
oder versteh ich da was falsch

mfg Hissi

radbruch
07.01.2007, 01:47
Hallo

Ich würde mein Programm aufs Wesentliche reduzieren und dann prüfen, ab welchem Wert der asuro losfährt.

Übrigens zuck bei mir alles wenn ich sehe, wie ihr die Motoren und die Getriebe quält. Der Ablauf sollte ungefähr so sein:

Motorrichtungen wählen
Geschwindigkeiten wählen
Fahren
Geschwindigkeit auf 0 setzen und kurz warten
Neue Richtungen wählen
Neue Geschwindigkeiten wählen
Weiterfahren
usw.

Oder eben mit PWM und Sanftanlauf, aber als Anfang tuts ne kleine Sleep-Schleife natürlich auch.

@hissi:
fahren geht glaub ich mit Sleep nicht Wenn die Ausgänge für die Motoren gesetzt sind kann der Prozessor tun was er will..

Gruß

mic

linux_80
07.01.2007, 02:03
@Hissi,

das mit dem while ohne {} aber mit ; passt schon so, denn wenn nix in Klammern steht macht er einfach nix in der Zeit und wartet nur bis Pollswitch nicht 0 ist.

Und wie der_andi schon gemeint hat, bei 100 werden nur die Motoren etwas summen, aber nicht fahren.

Bei meinem geht nur eine Seite bei 100 er fährt etwas hinundher um die Kurve, bei 160 kann man schon von Fahren reden.

Was mir aber aufgefallen ist, beim compilieren hat der Compiler die while(Pollswitch==0) rausgeworfen, der fährt nur immer zurück und dreht sich !


Edit:
Jetzt hab ichs erst gesehen, bei Pollswitch müssen die () mit dazu, sonst denkt sich der Compiler ganz was anders dabei !

while(Pollswitch()==0)
Ist es das was Hissi gemeint hat ?

damaltor
07.01.2007, 06:17
bei meinem asuro laufen die motoren ab ca 40. es ist unglaublich, wieviel ein klitzekleiner tropfen öl auf den achsen und zähnen hilft.

gandalfsz
07.01.2007, 10:09
#include "asuro.h"
int main(void)

{

Init();

MotorSpeed(255,255);

return 0;
}

Nicht einmal bei dem code tut sich was außer einem piepsen!!
mfg Daniel

Downad
07.01.2007, 10:44
fehtl da nicht sowas wir eine

motordir?

gandalfsz
07.01.2007, 11:35
Oh ganz vergessen :Haue :oops:
es tut aber auch mit MotorDir nix und andere Programme die ich aus dem Manual kopiert habe tun auch nix es leuchtet immer nur die StatusLED grün. Und bei manchen gibts noch ein leises piepsen. Bitte entschuldigt das ich mich nicht auskenn aber das ist mein erstes Programm und das habe ich auch nur mit hilfe geschrieben
mfg Daniel

radbruch
07.01.2007, 11:59
Hallo

Ne, MotorDir fehlt nicht wirklich weil in der asuro.c am Ende des Init() folgendes steht:
MotorDir(FWD,FWD);
MotorSpeed(0,0);
sei();

Was macht eigentlich sei()?

Gruß

mic

damaltor
07.01.2007, 14:50
sei(); aktiviert alle interrupts. das ist wichtig für einige der funktionen. die gegenfunktion ist cli(); sollte aber wirklich nur mit bedacht eingesetzt werden.

bei dem programm von gandalfsz fehl die endlosschleife while(1); vor m return 0;.

[code]
#include "asuro.h"

int main(void){
MotorDir(FWD,FWD);
MotorSpeed(255,255);
while(1);
return 0; //du kannnst auch return(0); schreiben
}

Hissi
08.01.2007, 19:39
Hallo

@linux_80
nein hab ich nicht gemeint kannte nur die möglichkeit mit den ; noch nicht
wieder was neues gelernt :)

@all
bei mir laufen die motoren mit 100 sehr gut (kleiner hab ich nich nicht probiert )

mfg Hissi