1234567890
1234567890
Geändert von i_make_it (04.02.2015 um 19:39 Uhr)
Danke erstmal für die hilfreichen Tipps.
Mit Funktionen habe ich mich bis jetzt gar nicht so intensiv beschäftigt, aber das wird sich in Zukunft ändern. Dadurch wird wirklich vieles übersichtlicher.
@Sisor:
Ich habe dein Programm mal auf meinen Asuro geflashed, aber er macht das gleiche wie bei meiner ursprünglichen Variante. Beim Compilen bin ich aber auf folgende Meldung gestoßen:
test.c:165: warning: the address of 'isHindernis' will always evaluate as 'true'
test.c:174: warning: the address of 'isHindernis' will always evaluate as 'true'
test.c:191: warning: the address of 'isHindernis' will always evaluate as 'true'
Das heißt doch, dass die Anweisungen, die für den Fall dass kein Hindernis da ist, ausgeführt werden sollten, nie ausgeführt werden, oder? Und genau das sieht man auch am Asuro: Er macht nur das, was er machen soll wenn er auf ein Hindernis stößt: rücksetzen und drehen, nie geradeaus fahren. Ich habe mir den Programmcode noch einmal angesehn, aber auch mit deiner übersichtlichen Variante finde ich den Fehler nicht.
@i_make_it:
diesen Fall würde ich beim Labyrinthbau einfach umgehen und nur die Umkehrung davon verwenden, d.h. er kommt in deinem Bild vom Ausgang und fährt in eine Richtung und dann kann er entweder eine Sackgasse finden oder eben den richtigen Weg. Das habe ich mit Papier und Stift auch schon ausprobiert. Wenn mein Programm so funktionieren würde wie es soll, dann müsste das funktionieren. Aber Danke trotzdem für deine Überlegungen.
Ich habe im Code hinter den Aufrufen von isHindernis die Klammern vergessen. Es muss dort isHindernis() stehen, sonst wird nicht die Funktion aufgerufen, sondern die Adresse der Funktion abgeprüft, und da diese vorher definiert wurde, ist sie immer größer 'null' und damit 'true'.
Die Funktion fragt übrigens ab, ob IRGENDEIN Taster gedrückt wird.
Das Hinzufügen der Klammern bewirkt zwar dass die Warnungen verschwinden, aber mein Asuro macht trotzdem nichts anderes als vorher.
Was genau gibt eigentlich die Funktion an das Hauptprogramm weiter? Wie gesagt im Bereich Funktionen bin ich noch nicht so bewandert.
unsigned char isHindernis() {
return PollSwitch() || PollSwitch() || PollSwitch();
}
Let me google this for you!
asurowiki: Tasten
Pollswitches_testen
Also gibt isHindernis(), je nach dem welche Taster gedrückt sind, einen Wert an das Hauptprogramm? Also z.B. 8 oder 16 oder so?
Wenn ja müsste da nicht noch verglichen werden, also wenn PollSwitch()>0 dann ist da ein Hindernis?
Oder verbirgt sich hinter isHindernis() einfach TRUE oder FALSE?
while (!isHindernis() ) { }
Dies ist gleichzusetzen mit :
while (isHindernis() == 0) { }
Also solange kein Taster gedrückt ist, Endlosschleife.
In C entspricht eine 0 'false', jeder andere Wert ist 'true'.
Z.B. bedeutet
if(a) tueEtwas();
'Wenn a nicht 0 ist tueEtwas'
Teste mal deine Taster auf Funktion mit dem Programm: Pollswitches_testen
Lesezeichen