So vielleicht?
while (PollSwitch()==0 && PollSwitch()==0) {
StatusLED ist nach Init() immer grün.
Gruß
mic
hallo
Ich habe meinen Asuro zusammengelötet und der selbsttest funktionierte.
Ich habe folgendes programm auf meinen Asuro geflasht:
#include "asuro.h"
int main(void) {
Init ();
MotorDir(FWD,FWD); // Beide Motoren auf vorwärts
MotorSpeed(100,100); // Beide Motoren etwa halbe Kraft voraus
StatusLED(GREEN); // Status-Leuchtdiode auf grün schalten
while (PollSwitch()==0) { // Solange keine Kollision erfolgte...
SerWrite("Alles OK!\n",10); // ... Euphorie verbreiten
}
MotorSpeed(0,0); // Kollision! Sofort anhalten!
StatusLED(RED); // Statusleuchtdiode rot schalten
while (1) {
SerWrite("Aua!\n",5); // und weinen!
}
}
Jedoch glaubt mein Asuro, dass nach dem einschalten sofort eine Kollision hat, bleibt stehen und die lampe leuchtet rot.
Könnt ihr mir helfen?
mfg.
So vielleicht?
while (PollSwitch()==0 && PollSwitch()==0) {
StatusLED ist nach Init() immer grün.
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hi und willkommen im Forum!
So ein "ähnliches" Problem hatte ich vor kurzem auch (Link), dort wurde mir empfohlen die PollSwitch immer mehrfach zu überprüfen da sie öfters Fehler liefert.
Und sowieso ist es gut die Taster erstmal zu kalibrieren, ich habe dazu den Code von Sternthaler von hier verwendet (18. Post). Damit sehe ich am Hyperterminal sofort welchen Wert welcher Taster liefert.
PS: Verwende um einen Code anzuzeigen bitte die Code-Tags. [.Code] am Anfang und [./Code] am Ende. Allerdings ohne den Punkten.
danke für die schnelle antwort!
wenn ich diesen code verwende:
while (PollSwitch()==0 && PollSwitch()==0) {
fährt er zwar, aber wenn ich einen Taster drücke tut sich nichts.
ich bae vorher mit einem anderen programm meine taster ausgewertet
und es ergab folgende werte:
Taster1: 1
Taster2: 2
Taster3: 4
Taster4: 8
Taster5: 16
Taster6: 32
müsste passen, oder?
ich habe auch ein weiteres problem
wenn ich im programm vereinbart habe, die status led soll rot leuchten, leuchtet sie grün und umgekehrt.
Hallo
Bei meinem asuro funktioniert das sogar mit dreifacher PollSwitch()-Abfrage. Aber bei dem laufen keine Motoren mit die stören könnten. Schau mal deine Tastenwerte bei laufenden Motoren an, vielleicht ändert sich da was. K1 ist 32! StatusLED ist falschrum eingelötet.
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
ok
die status les werde ich morgen gleich umlöten.
hab den asuro von vorne angesehen und dann von links nach rechts die taster getstet.
und die tastenwerte werde ich auch nochmal überprüfen.
DANKE
Nach dem Platinenaufdruck (Manual S.16) ist K6 beim Ein-/Ausschalter. Der wird mit PollSwitch() als Wert 1 erkannt:
Code:#include "asuro.h" int main(void) { Init (); while(1) { PrintInt(PollSwitch()); SerWrite("\n\r", 2); Msleep(200); } }
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
ich weiß nicht ob das relevant ist, aber wenn ich
(PollSwitch()==1) schreibe, dann fährt er, aber die taster reagieren nicht.
hab jetzt noch mal die taster getestet:
er sendet nu "84" und beim drücken der taster ändert sich nichtsCode:#include "asuro.h" int main (void) { unsigned char x; //definition der pollswitch-variable unsigned char string [5]; //definition eines string mit max. 5 zeichen Init (); while (1) { x = PollSwitch (); //taster werden abgefragt itoa (x, string, 10); //wert wird umgewandelt und in string gespeichert SerWrite (string, strlen (string)); //string wird an terminal geschrieben SerWrite ("\n\r", 2); //umbruch an terminal schreiben //("\n" und "\r" sind je ein byte!) } }
Hallo
Deine Kommentare gefallen mir. Vorbildlich :)
Um das Problem mit strlen() zu umgehen kann man den String mit 0-Werten vorbelegen. SerWrite() erkennt das als Stringende und bricht die Übertragen beim ersten Zeichen=0 ab obwohl beim Aufruf 5 Zeichen angegeben wurden. (Das ist allgemein die Endekennung eines Strings in C).
Wir wollten doch mit laufenden Motoren testen:
Bei mir sind auch hier noch die Tastenwerte richtig, vermutlich weil ich keine Motoren an meinem asuro habe :)Code:#include "asuro.h" int main (void) { unsigned char x; //definition der pollswitch-variable unsigned char string [5]; //definition eines string mit max. 5 zeichen Init (); /******************************************** /* Achtung! Der asuro kann jetzt losfahren! * /********************************************/ MotorSpeed(150,150); // elektrischen Krach machen while (1) { StatusLED(RED); // wir senden for(x=0; x<5; x++) string[x]= 0; // String mit Endekennungen vorbelegen x = PollSwitch (); //taster werden abgefragt itoa (x, string, 10); //wert wird umgewandelt und in string gespeichert SerWrite (string, 5); //string wird an terminal geschrieben SerWrite ("\n\r", 2); //umbruch an terminal schreiben //("\n" und "\r" sind je ein byte!) StatusLED(YELLOW); // wir warten 1/4 Sekunde for(x=250; x; x--) Sleep(72); // 250 mal eine ms } }
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
also
ich habe das programm getestet.
folgendes lese ich aus, wenn ich den asuro einschalte und nichts drücke:
wenn ich dann die Taster dazu noch drücke kommt:Code:0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 33 0 16 0 0 8 0 0 0 0 5 0 2 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 00 0 2 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 2 0 0 0 0 4 0 0 2 0 0 0 0 8 0 0 0 0 0 1 16 0 0 0 33 0 0 0 33 0 33 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 2 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 2 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 2 0 0 0 0 0 4 2 0 2 0 0 0 8 0 0 16 0 0 32 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 2 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0
mit k6 angefangen:
Code:16 0 0 2 0 0 0 0 2 0 4 0 8 7 16 16 2 32 1 0 0 0ø
wenn ich einen taster hintereinander drücke kommt
Code:1 1 2 1 2 2 2 4 4 4 8 9 8 7 8 8 16 16 6 16 33 34 32 32 23
Lesezeichen