thx für deinen beitrag nur lässt sich der roboter immer noch von jedem taster stoppen
und laut deinem programm darf nur k6 den robbi ausschalten oder?
so jetzt bin ich mehr als ratlos....
Hallo xyphrox,
gleich mehrere Fehler.
- Funktionsaufrufe in C immer mit () Klammern, auch wenn keine Parameter übergeben werden.
- Goto und Labels in C sollte man besser vermeiden.
- else Zweig innerhalb des if Blocks wird nie ausgeführt.
- while Schleife am Ende des Programms bedeutet oberer Programmteil wird nur einmal durchlaufen.
Probiers mal so:
Gruß PeterCode:#include "asuro.h" #define PollSwitch sw int main(void) { Init (); MotorDir(FWD,FWD); MotorSpeed(250,233); StatusLED(GREEN); FrontLED(ON); while(1) { // if (sw()) /* irgendeine Taste gedrückt */ if (sw() & 0x01) /* Taste K6 gedrückt */ { MotorSpeed(0,0); StatusLED(RED); } else { MotorSpeed(250,233); StatusLED(GREEN); } return 0; }
thx für deinen beitrag nur lässt sich der roboter immer noch von jedem taster stoppen
und laut deinem programm darf nur k6 den robbi ausschalten oder?
so jetzt bin ich mehr als ratlos....
Hallo xyphrox,
ja, das Programm wäre so richtig. Aber halb so schlimm, das kriegen wir schon hin.
Die Probleme mit den Tastsensoren wurden hier im Forum ja des öfteren schon besprochen.
Auf meiner Homepage habe ich dazu auch einiges gesammelt.
http://asuro.pytalhost.de
Unter Programmierung | Beispielprogramme in C zu finden.
Probier mal:
- Mehrmaliges aufrufen der PollSwitch() Funktion
- oder Vergleich der zurückgegeben Werte...
PollSwitch();
PollSwitch();
PollSwitch();
PollSwitch();
PollSwitch();
PollSwitch();
PollSwitch();
if (PollSwitch())
...
- oder Ausgabe der Werte im TerminalProgrammunsigned char t1, t2;
...
t1=PollSwitch();
t2=PollSwitch();
if (t1 && t2 && t1 == t2)
...
Gruß Peterunsigned char t;
...
t=PollSwitch();
if (t)
{
PrintInt(t)
SerWrite("\r\n");
}
moin marvin
so hab sozusagen nochmal ne nacht drüber geschlafen
also ich hab jetzt was einigermaßen geht
Code:#include "asuro.h" int main(void) { Init (); PollSwitch(); PollSwitch(); PollSwitch(); PollSwitch(); PollSwitch(); PollSwitch(); PollSwitch(); if (PollSwitch()) MotorDir(FWD,FWD); MotorSpeed(250,233); StatusLED(GREEN); FrontLED(ON); while(1) if (PollSwitch() & 0x32) {MotorDir(RWD,RWD); MotorSpeed(250,233);} else {MotorSpeed(250,233);} return 0; }
so das geht
0x32 <--- das is ja theoretisch der befehl das nur mein K1 schalten soll und das eht auch nur K1 schaltet sonst keiner.
nur wenn ich das jetzt umschreibe auf 0x01 das nur mein K6 schaltet schalten außer K6 auch noch K1 und K2 ......
hmpf woran liegt es ?
Hallo xyphrox,
- 0x20 = 32, nicht 0x32 in Hexadezimal Schreibweise (2*16).
- Das wiederholte Aufrufen der PollSwitch() Funktion innerhalb der while Schleife, nicht nur einmal am Programmbeginn.
- Motorrichtung wieder zurück auf vorwärts schalten.
so sollte es eigentlich funktionieren:
Schön wäre es, wenn der Asuro ein Stück zurückfährt (zeitgesteuert) und dann wieder vorwärts.Code:#include "asuro.h" int main(void) { Init (); MotorDir(FWD,FWD); MotorSpeed(250,233); StatusLED(GREEN); FrontLED(ON); while(1) { PollSwitch(); PollSwitch(); PollSwitch(); PollSwitch(); PollSwitch(); PollSwitch(); PollSwitch(); if (PollSwitch() & 0x20) // K1 gedrueckt { MotorDir(RWD,RWD); MotorSpeed(250,233); } else { MotorDir(FWD,FWD); MotorSpeed(250,233); } } return 0; }
Noch besser wenn er entsprechend der gedrückten Taster eine Kurve rückwärts fährt, um dem Hindernis auszuweichen.
Da solltest du aber selbst versuchen.
Ich empfehle dringend mal ein C-Tutorial durchzuarbeiten.
Gruß Peter
also die 0x32 hab ich mich vertippt
hab die 0x20 drin
das mit K1 geht ja auch.
nur wenn ich dann 0x01 schreibe spinnt er rum....
ein c tutorial?
wie mach ich das bzw wie gehe ich da am besten vor ?
und wegen deinem programmvorschlag das er dann rückwärts fährt und hindernis ausweicht usw...
...genau das hab ich vor das muss bis um 12uhr größtenteils alles funktionieren
danke für deine antwort....
Hallo xyphrox,
wenn es mit K6 immer noch nicht klappt, hilft nur noch sich die Werte ausgeben lassen.
Bau mal folgendes ein:
Du brauchst zum Anzeigen ein Terminalprogramm. Da du den USB Transceiver verwendest, funktioniert Hyperterminal nicht. Hier gibt es ein Terminalprogramm für den USB Transceiver.unsigned char taste;
...
if (taste = PollSwitch())
{
PrintInt(Taste);
...
http:///http://asuro.pytalhost.de/pm...in/d2xxapp.zip
Gruß Peter
hat es ebínen tieferen sinn das du eben als antwort nochmal das selbe geschrieben hast wie vorhin?
Sorry wg. Doppelpost
mit einem schalter z.b. K1 oder K2 funkktioniert es auch mit zeit rücklauf
zähler usw is drin.
nur wie geht das das ich sage K2 ODER K5 sollen ein signal bringen und dann fährt er rückwärts....?
und wenn 2 zusammen ein signal bringen müssen also im prinzip ne und-verknüpfung ?!
wäre das :
if (PollSwitch() & 0x10 & 0x02) <-- für UND
if (PollSwitch() & 0x10 or 0x02) <--- für oder
????
Lesezeichen