Archiv verlassen und diese Seite im Standarddesign anzeigen : Könnt ihr vllt mal kurz drüber schaun was falsch ist?
Manulito
13.02.2007, 21:45
Hallo ich bin gerade dabei mein erstes Programm für den Asuro zu schreiben. Ich habe das Beispielprogramm aus der Anleitung ein wenig abgewandelt doch es funktioniert leider nicht Könntet ihr vielleicht mal kurz drüber schauen was falsch ist. (Bei mir sind die Motorenrichtungen vertauscht muss ich noch umlöten)
#include "asuro.h"
int main(void)
{
Init();
MotorDir(RWD,RWD);
MotorSpeed(150,155);
StatusLED(YELLOW);
while (PollSwitch()==0){
StatusLED(GREEN);
}
MotorDir(FWD,FWD);
MotorSpeed(150,150);
BackLED(ON,ON);
FrontLED(ON);
}
Das Problem ist das der Asuro gar nicht erst Vorwärts fährt sondern sofort Rückwärts. [/code]
Arexx-Henk
13.02.2007, 22:25
Hallo,
Du solltest zuerst die umloting machen...;-)
vermutlich gibt die PollSwitch() Funktion irgendwo kein 0 zuruck sondern ein anderen Wert? (Dadurch dass sie motoren gerade vorher eingeschaltet werden konnte da ein dip im versorgungsspannung geben.
Vielleicht mal die ersten
> MotorDir(RWD,RWD);
> MotorSpeed(150,155);
weglassen oder ein warteschleiffe benutzen befor die Tasten abgefragt werden damit die betriebsspannung sich stabilisieren lasst.
Gruss
Henk
ich glaube, ein fehler ist schon mal, dass du schreibst,{
StatusLED(GREEN);
}
und dannach schreibst du dann noch weiter an dieser funktion
MotorDir(FWD,FWD);
MotorSpeed(150,150);
BackLED(ON,ON);
FrontLED(ON);
obwohl du mit der geschweiften klammer nach dem StatusLED-Befehl die aktion schon beendet hast.
ausserdem steht in der anleitung, dass man für diesen befehl
taste=PollSwitch();
if(taste=0){...;} :mrgreen:
könnte es vllt sein, dass du befehle aus ner neueren lib verwendest und die dateiewn asuro.c und asuro.h aus der neuen lib nicght in den ordner getaen hast, indem das makefile und test,c gespeichert sind?
ich glaube, ein fehler ist schon mal, dass du schreibst,{
StatusLED(GREEN);
}
und dannach schreibst du dann noch weiter an dieser funktion
MotorDir(FWD,FWD);
MotorSpeed(150,150);
BackLED(ON,ON);
FrontLED(ON);
obwohl du mit der geschweiften klammer nach dem StatusLED-Befehl die aktion schon beendet hast.
Nein, das passt schon so. Vom Sinn her ist das Programm richtig, aber in der Praktik leider oft unbrauchbar, da PollSwitch() oft (überhaupt am Start vom Asuro und dann später acuh) falsche Werte zurückgibt.
edit: Deine anderen 2 Vorschläge halt ich auch für unwahrscheinlich.
Versuch es mal ungefähr so:
int a,b;
a=PollSwitch();
b=PollSwitch();
if (a!=b) {a=0;b=0;} //falls die ungleich sind, dann ihnen 0 zuweisen
//jetzt mit einer der variablen vergleichen
Das Ganze musst du nur noch richtig in deinen Code einsetzen.
Suche mal im Forum danach, diese Probleme haben schon viele vor dir gehabt. :)
jeffreydj
14.02.2007, 22:19
Wenn man statt "StatusLED(GREEN)" z.B. "SerWrite()" nimmt, klappt das interessanterweise.
Alles korrekt programmiert, aber in der Praxis...
damaltor
14.02.2007, 23:07
liegt vielleicht daran, dass SerWrite künstlich verzögert, um auf 9600 baud zu kommen... keine ahnung
radbruch
14.02.2007, 23:13
Und diese Verzögerung beeinflußt wohl PollSwitch(). Versuche es mal mit einem Sleep(200); Oder eben mit einer zuverlässigeren Tastenabfrage.
Manulito
15.02.2007, 17:49
Erstmal danke für die vielen Antworten.
Ich hab im Forum gelesen, dass es anscheinend an den Spannungsschwankungen beim Anschalten des Asuros liegt und dass deshalb die Taster auch einen ungenauen Wert zurückgeben. Ich hab nun mal vor dem ganzen Programm eine Sleepfunktion eingebaut für ca. 5 sek und siehe da es funktioniert. Ich werd morgen mal die Methode von ace ausprobieren.
Lg
Manu
damaltor
15.02.2007, 18:09
ja, mach das... PollSwitch ist halt recht schwierig. bei mir hat es sehr geholfen den kondensator der parallel zu den tastern sitzt, zu entfernen (ich glaub das ist c7, aber unbedingt nochmal nachsehen). auch die asuro.c kann angeglichen werden.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.