Archiv verlassen und diese Seite im Standarddesign anzeigen : Programmierprobleme mit den Kollisionsschaltern
Christian 25
28.05.2005, 11:32
Hallo,
ich habe meinen Asuro fertiggestellt und er hat den Selbsttest nun auch fehlerfrei bestanden :)
Nun möchte ich ihn programmieren. Auch dies funktioniert soweit. Allerdings hat er scheinbar Probleme mit den Schaltern.
Folgendes Programm geht:
#include "asuro.h"
int main(void)
{
Init();
MotorDir(FWD,FWD);
while(1){
MotorSpeed (150,150);
}
while(1);
return 0;
}
Nachfolgendes allerdings nicht:
#include "asuro.h"
int main(void)
{
Init();
MotorDir(FWD,FWD);
while(PollSwitch==0){
MotorSpeed (150,150);
}
MotorSpeed (0,0);
while(1);
return 0;
}
Hier fährt er garnicht erst los so als würde er die Schleife überspringen da PollSwitch != 0 was allerdings nicht der Fall ist.
Auch bei einem Programm, welches ich hier aus dem Forum geladen habe wo er immer Forwärtsfahren sollte bis er wo gegenstößt, dann kurz Rückwärts und dann wieder Forwärts bis zum gegenstoß usw. ist er immer nur Rückwärtsgefahren als würden die Schalter dauerhaft gedrückt sein......
Was kann ich nur machen damit es geht??
Wäre nett wenn ihr mir helfen könntet.
MFG
Christian
Christian 25
28.05.2005, 14:49
Hallo,
hier noch weitere Ergänzungen da mir ja bisher leider noch niemand helfen konnte :( :
Also bei folgendem Programm leuchtet die StatusLED dauerhaft rot egal welche Taster ich drücke:
#include "asuro.h"
int main(void)
{
Init();
unsigned char taste;
taste = PollSwitch();
if (taste=32)
StatusLED (RED);
else if (taste=16)
BackLED (ON,ON);
else
FrontLED (ON);
while(1);
return 0;
}
Der Selftest hingegen läuft einwandfrei. Jeder Taster macht genau das, was er soll und auch nix von alleine, wohingegen bei meinen selbstgeschriebenen Programmen es ja den Anschein hat als würde Asuro denken ein Taster würde gedrückt werden.
Sind denn die Selbstgeschriebenen Programme richtig???
Bitte helft mir!!!
MFG
Christian
Dashfinder
28.05.2005, 22:05
Tach schön,
ich habe mir den quellcode des selbsttestes angeschaut und mir dieses programmchen gebastelt um die taster mal abzufragen:
#include "asuro.h"
int main(Void)
{
Init();
unsigned char sw;
BackLED (OFF,OFF);
StatusLED (GREEN);
MotorSpeed (0,0);
for ( ; ; )
{
sw = PollSwitch();
if (sw == 0x01) {MotorDir (FWD,FWD); MotorSpeed (170,200);BackLED (OFF,ON);}
if (sw == 0x02) {MotorDir (RWD,RWD);MotorSpeed (180,150);StatusLED (RED);}
if (sw == 0x04) {MotorDir (FWD,FWD);MotorSpeed (160,220);BackLED (ON,ON);}
if (sw == 0x08) {MotorDir (FWD,FWD);MotorSpeed (220,160);BackLED (ON,ON);}
if (sw == 0x10) {MotorDir (RWD,RWD);MotorSpeed (150,180);StatusLED(RED);}
if (sw == 0x20) {MotorDir (FWD,FWD); MotorSpeed (200,170);BackLED(ON,OFF);}
}
}
Da ich auch erst seit kurzem daran bastle, verstehe diesen beitrag bitte nur als stütze und nicht als die lösung deines problems 8-[
@der Dashfinder
Christian 25
29.05.2005, 07:48
Also da die Tests alle korekt funktionieren gehe ich davon aus, daß ich einen Programmierfehler habe doch welchen?????
Was mich auch wundert ist daß es bei mir manchmal zu Fehlermeldungen kommt obwohl ich Dinge 1:1 aus der Anleitung kopiert habe. In der Anleitung ist z.B.: nach dem Init() am Anfang nie ein ; bei mir muß aber eins stehen.
Was mache ich also beim Programmieren falsch (Beispiele siehe oben)??
MFG
Christian
Dashfinder
29.05.2005, 11:12
hmm...der Wert den du als taste abfragst ist in deinem fall 32 bzw. 16. ich habe das anfangs auch so probiert -allerdings ohne erfolg. daher habe ich aus dem selbsttest-code die werte für jeden einzelnen taster rauskopiert (von li nach re 0x01, 0x02, 0x04, usw.). das sind die hex-werte der einzelnen taster. und immer wenn ein taster auslöst folgt eine reaktion des asuro. allerdings endet dieser vorgang erst wenn ein anderer taster betätigt wird :-k
Christian 25
29.05.2005, 16:37
Aber auch jener Befehl geht nicht, obwohl er so (ähnlich) in der Anleitung steht:
#include "asuro.h"
int main(void)
{
Init();
MotorDir(FWD,FWD);
while(PollSwitch==0){
MotorSpeed (150,150);
}
MotorSpeed (0,0);
while(1);
return 0;
}
Kann mir bitte jemand sagen wie dieser Befehl richtig lauten muß und was sonst noch so falsch ist.
MFG
Christian
Also was mir auf die Schnelle aufgefallen ist ein typsicher "Schusselfehler" :-)
{
if (taste=32)
StatusLED (RED);
else if (taste=16)
}
Du musst == statt = benutzen, denn sonst weist du der Variablen taste in der if-Abfrage den Wert 32 zu :-)
If (a=32) bewirkte das a den Wert 32 bekommt und da das klappt, ist die if-abfrage auch gleich "true"
while(PollSwitch==0){
Hier muss PollSwitch() stehen (mit Klammern!!)
Dashfinder
30.05.2005, 19:19
Tach schön,
ich habe mir das Programm
#include "asuro.h"
int main(void)
{
Init();
MotorDir(FWD,FWD);
while(PollSwitch==0){
MotorSpeed (150,150);
}
MotorSpeed (0,0);
while(1);
return 0;
}
mal ausprobiert und es funzt bei mir auch nicht.
Allerding sind da auch Fehler drin. Wie Jango schon geschrieben hat fehlen bei PollSwitch die Klammern. Auch der Wert 0 für die Schalter führt zu Problemen (zumindest bei mir). Ich hab das Prog etwas umgeschrieben und dabei kam dieses funzende Stück heraus.
int main(void)
{
Init();
while(PollSwitch()<=0X02)
{
StatusLED(GREEN);
MotorDir(FWD,FWD);
MotorSpeed(200,200);
}
StatusLED (RED);
MotorSpeed (0,0);
while(1);
return 0;
Keine Ahnung warum die ==0 bei PollSwitch nich funktioniert. Aber so geht es auch.
TomHumpen
02.06.2005, 10:01
hängt vielleicht mit dem rückgabewert der Funktion Pollswitch zusammen. Pollswitch liefert dir einen Wert zurück, welcher dann wahrscheinlich nur Hexadez. interpretiert werden kann oder gar andere Werte als 0. Man müßte in dem Azuro Header nachschauen was zurückgegeben wird.
so long...
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.