PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit AsuroManuel Code 9.1.5 (Schleifen)



listner
22.03.2008, 11:48
Hi Leuz,
da ich noch etwas probleme mit C habe, habe ich mich dazu entschlossen das Handbuch (der teil des progammierens) durchzuarbeiten!

jetzt habe ich den Code von teil 9.1.5 RAUSKOPIERT und er tut nicht xD

Code:


#include "asuro.h"
int main(void)
{
Init()
MotorDir(RWD,RWD); // Beide Motoren auf vorwärts
MotorSpeed(120,120); // 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!
}
return 0;
}


der Compiler sagt volgendes:



test.c:5: error: parse error before "MotorDir"
test.c:11: error: stray '\223' in program
test.c:11: error: `Alles' undeclared (first use in this function)
test.c:11: error: (Each undeclared identifier is reported only once
test.c:11: error: for each function it appears in.)
test.c:11: error: parse error before "OK"
test.c:11: error: stray '\' in program
test.c:11: error: stray '\224' in program
test.c:18: error: stray '\223' in program
test.c:18: error: `Aua' undeclared (first use in this function)
test.c:18: error: parse error before '!' token
test.c:18: error: stray '\' in program
test.c:18: error: stray '\224' in program
test.c:21:2: warning: no newline at end of file
make: *** [test.o] Error 1


kann das mir jemand bitte erklären.. und sagen was im Compiler "vorgeht" ??

greezZ und thx im vorraus. Listner

hai1991
22.03.2008, 11:59
hallo listner

der erste Fehler ist in Zeile 5 (test.c:5: error:)
parse error before "MotorDir" bedeutet, dass vor "MotorDir" etwas nicht stimmt... ich würde vermuten, dass nach Init() ein ';' gesetzt werden muss

der nächste Fehler ist in Zeile 11 (test.c:11: error:)
ich glaube dass er die " nicht als solche erkennt, versuch es einmal so: SerWrite("Alles OK!\n",10);

in Zeile 18 ist wieder das selbe wie in Zeile 11
versuch es mit SerWrite("Aua!\n",5);


ich hoffe es funktioniert jetzt (habe es noch nicht ausprobiert)

mfg hai1991

listner
22.03.2008, 12:11
ok, vielen dank, das tut jetzt!!

noch ne frage, man sollte die PollSwitch() funktin ja immer mehrmals aufrufen,

warum funktioniert das in diesem fall dan auch so??

liegt es daran, das durch die while schleife sie ja praktisch mehrmals aufgerufen wird??

greezZ

liggi
22.03.2008, 12:23
nein, besser wäre es, wenn man es soch machen würde:


#include "asuro.h"
int main(void)
{
Init();
MotorDir(RWD,RWD); // Beide Motoren auf vorwärts
MotorSpeed(120,120); // Beide Motoren etwa halbe Kraft voraus
StatusLED(GREEN); // Status-Leuchtdiode auf grün schalten

while (PollSwitch()==0 && 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!
}
return 0;
}

mfg liggi

listner
22.03.2008, 12:33
ja, so hab ich es gemeint,

also ist es bei dem vorgegebenen code aus dem manual nur "zufall" dass es funktioniert?

greezZ

hai1991
22.03.2008, 12:34
es heißt ja nicht, dass es bei einmaligem Aufruf von PollSwitch() nicht funktioniert, aber es kann vorkommen, dass er bei laufenden Motoren kurzzeitig eine falsche Spannung übermittelt bekommt ==> er sagt zB "Aua", obwohl er nirgends ankommt
dies kann man vermeiden, indem man sie öfter aufruft

mfg hai1991

listner
22.03.2008, 13:52
ok, danke!!!

Ne frage noch, gibt es ne möglichkeit die werte von variablen auslesen, ohne die neue lib zu benutzen? also mit der standartversion 2.1???

wäre mir sehr wichtig, denn cih versuche erst mal mit der 2.1 klaarzukommen, (programmiertechnisch) bevor ich mir "erweiterungen" antuen will ;)

greezZ

hai1991
22.03.2008, 14:07
schau einmal hier nach https://www.roboternetz.de/phpBB2/viewtopic.php?t=39126&start=22
radbruch hat eine sehr gute Variante aufgeführt (die Funktion PrintChar())