PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Was ist an diesem Programm falsch?



Momchilo
21.01.2007, 01:08
Hi Leute,


Ich hoffe ihr könnt mir helfen, denn ich weiss nicht was ich an diesem Programm ändern soll.

#include "asuro.h"


unsigned char M;


int main(void)
{
Init();
M=255;
MotorDir(FWD,FWD);
MotorSpeed(M,M);
while(1);
{
if (Pollswitch()>0)
{
M=100;
StatusLED(RED);
BackLED(ON,ON);
MotorDir(RWD,RWD);
MotorSpeed(M,M);
Msleep(3000);
}
else
{
M=250;
StatusLed(GREEN);
MotorDir(FWD,FWD);
MotorSpeed(M,M);
BackLED(OFF,OFF);
}
}
return 0;
}


Ich progge mit Programmers Notepad 2 und es kommt keine Fehlermeldung, aber 3 Warnungen:

test.c:15: warning: implicit declaration of function `Pollswitch'
test.c:22: warning: implicit declaration of function `Msleep'
test.c:27: warning: implicit declaration of function `StatusLed'

Nachdem ich das Programm geflasht habe, fährt er immer vorwärts und das wars.
Normal sollte er vorwärts fahren und sobald er auf ein Hindernis trifft 3 Sek. rückwärts fahren.

Ich brauche eure Hilfe ;)

MfG
Momchilo

Hissi
21.01.2007, 01:29
Hallo

entferne den ; nach while(1)

dann müsste es gehen


mfg Hissi

normido
21.01.2007, 01:35
Moin,


test.c:15: warning: implicit declaration of function `Pollswitch'
test.c:22: warning: implicit declaration of function `Msleep'
test.c:27: warning: implicit declaration of function `StatusLed'

Du musst die Meldungen lesen :-) und richtig interpretieren lernen.
"implicit declaration" heisst soviel wie, "mhh.. die Funktion kenne ich noch nicht"

C ist case-sensitiv, d.h du musst Gross-, Kleinschreibung beachten.

Pollswitch = PollSwitch, Msleep = MSleep, StatusLed = StatusLED.

Weiter oben im Programm hattest du StatusLED ja schonmal korrekt verwendet.

Gruss
normido

radbruch
21.01.2007, 01:40
15: PollSwitch()
27: StatusLED(GREEN)
zu 22: Msleep fällt mir grad nur ein, dass es diese Funktion erst ab Version 2 der asuro.c gegeben hat. Davor hies das einfach Sleep() und die Zeit wurde in 36igstel-irgendwas angegeben.

Gruss

mic

Momchilo
21.01.2007, 01:57
Hi,
Vielen Dank für diese schnellen Antworten, um diese Uhrzeit. :)
Allerdings ahbe ich jetz das Problem, dass er nur noch bedingt das macht, was ich ihm sage.

#include "asuro.h"


unsigned char M;


int main(void)
{
Init();
M=255;
MotorDir(FWD,FWD);
MotorSpeed(M,M);
while(1)
{
if (PollSwitch()>0)
{
M=100;
StatusLED(RED);
BackLED(ON,ON);
MotorDir(RWD,RWD);
MotorSpeed(M,M);

}
else
{
M=250;
StatusLED(GREEN);
MotorDir(FWD,FWD);
MotorSpeed(M,M);
BackLED(OFF,OFF);
}
}
return 0;
}


Wenn ich dieses Programm ausführe, fährt er vorwärts und die Backleds blinken. Wenn ich dann auf einen Taster drück fährt er rückwärts uund die Backleds sind solange immer an (das sollen sie ja auch ;) ). Wenn ich öfter auf ein Taster drücke blinkt irgendwann die Statusled gelb und er fährt nicht mehr rückwärts.
Die Akkus sind neu und aufgeladen.

Weiss jemand warum die Backleds die ganze Zeit blinken und nach mehrmaligen drücken der Taster die Statusled gelb wird?

MfG
Momchilo

radbruch
21.01.2007, 11:19
Hallo

Vermutlich funktioniert die Tastenabfrage nicht richtig. Grundsätzlich bereitet die einmalige Abfrage auf "Wert > 0" Probleme. (hier gibts schon diverse Threads dazu).

Wenn wegen gestörten Tastenabfrage laufend zwischen Vor und Zurück umgeschaltet wird, blinken deine BackLEDs und die StatusLED wird Gelb (Grün und Rot in schneller Folge)

Zum Testen kannst du dich mal auf eine oder zwei Tasten beschränken und diese mit "PollSwitch() == tastenwert" (Tastenwerte:1,2,4,8,16 oder 32) abfragen.

Gruß

mic