Archiv verlassen und diese Seite im Standarddesign anzeigen : Programmfehler?
Ich hab hier ein einfaches Programm geschrieben:
Der Asuro soll solange vorwärts fahren, bis ein Taster gedrückt wird, danach ~1s rückwärts und danach wieder vorwärts.^^ Ja, ist ein bisschen sinnlos, weil er immer wieder gegen die Wand knallt, aber ich wollte nur mal ein bisschen rumprobieren, wie das mit dem Programmieren beim Asuro so funktioniert.
#include "asuro.h"
int main(void)
{
while(1)
{
int Zaehler;
Init();
StatusLED(GREEN);
MotorDir(FWD,FWD);
MotorSpeed(120,120);
if (PollSwitch() > 0)
{
MotorDir(RWD,RWD);
for (Zaehler = 0; Zaehler < 334; Zaehler++)
{
Sleep(216);
}
}
MotorDir(FWD,FWD);
}
return 0;
}
(Das MotorDir(FWD,FWD) ist vll nichtmal notwendig, aber:)
Wenn ich den Asuro einschalte, fährt er die ganze Zeit nur rückwarts.
hi, ich hab dein programm mal getestet und mein asuro fährt auch rückwärts.
Auf den ersten blick hab ich keinen fehler gefunden und deswegen mal selbst versucht so ein programm zu schreiben, aber es tritt immer das selbe phänomen auf. Wenn man allerdings die for-schleife und die sleepfunktion weglässt, fährt er nur dann rückwärts, wenn tatsächlich ein Taster gedrückt ist. Also vermute ich dass es de for-schleife bzw. die sleepfunktion die pollswitch werte irgendwie beeinflusst. Warum weiß ich allerdings auch nicht. :(
mfg LuZ
hallo,
das liegt daran, dass du die poll-switch funktion wahrwscheinlich falsch programmiert hast,
du müsstest eine eigene variable deklarieren, z.B.
[unsigned char taste=0;]
und dann die funktion PollSwitch aufrufen:
[Init();
PollSwitch();
Sleep(255);
PollSwitch();
Sleep(255);]
dann die variable mit pollswitch verknüpfen:
[PollSwitch()=taste]
und dann schreibst du einfach:
[if (taste == 0) {
MotorDir(FWD,FWD);
MotorSpeed(250,250);}
else {MotorDir(RWD,RWD);
MotorSpeed(250,250);]
das ist ejtzt ein ganz einfaches programm, natürlicvh kannst du das noch verbessern uind dso, aber damit müsste das funktionieren
schau hier mal nach, da hab ich es glaube ic hschon einmal so in etwa erklärt:
https://www.roboternetz.de/phpBB2/viewtopic.php?p=347359#347359
naja ich hoffe ich konnte dir helfen
mfg hans[/code]
damaltor
27.01.2008, 15:32
nimm mal init(); und int Zaehler(); aus der while(1) schleife raus und schreib sie davor. hilft das?
hansi41: Bitte benutze den code-button!
das habe ich jetzt wirklich versucht!
ich habe zum Beispiel geschrieben:
[Init();]
aber es hat nicht funktioniert, was soll ich denn machen, ich bekommd as einfach nicht hin^^
damaltor
27.01.2008, 20:15
das ist ja auch nciht das ziel.... o0
schreibe VOR den GANZEN code-block:
[ code] (ohne das leerzeichen)
und hinter den ganzen code-block schreibst du
[ /code] (ebenfalls ohne das leerzeichen.
ah ok jetzt ists klar, ich versreche ich werde mich jetzt dran halten
danke und wieder was dazugelernt :-)
Sorry, aber ich konnte eure Ratschläge noch nicht ausprobieren, da mein Asuro im Moment irgendwie nicht richtig funktioniert und ich in den letzten 1,5 Tagen auch keine Zeit dafür hatte.^^
Die nächsten paar Tage wird das auch noch so sein. Ich wollte euch das nur mitteilen, damit ihr euch nicht wundert, warum ich nicht antworte.^^
Ich werde also wahrscheinlich erst Ende der Woche an dem Programm weiterbasteln können.
Ok, das Problem ist gelöst.
Ich habe die PollSwitch()-Funktion mehrmals aufgerufen (wie hier (https://www.roboternetz.de/phpBB2/viewtopic.php?p=347359#347359) beschrieben).
Das sieht dann so aus (und es funktioniert perfekt^^):
#include "asuro.h"
int main(void)
{
Init();
while(1)
{
int zaehler;
unsigned char taster;
unsigned char vergleich;
taster = PollSwitch();
vergleich = PollSwitch();
MotorDir(FWD,FWD);
MotorSpeed(120,120);
if ((taster == vergleich)&&(vergleich > 0))
{
MotorDir(RWD,RWD);
for (zaehler = 0; zaehler < 334; zaehler++)
{
Sleep(216);
}
}
}
return 0;
}
Danke für die Tipps.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.