[Asuro] Programmeren in C - wie ziet de fout?

Status
Niet open voor verdere reacties.

UneXisted

Gebruiker
Lid geworden
16 sep 2008
Berichten
20
Code:
#include "asuro.h"

int main(void)
{
unsigned char tswitch;
Init();
while(1){
FrontLED(ON);
StatusLED(GREEN);
MotorDir(FWD,FWD);
MotorSpeed(80,87);
tswitch = 0;
tswitch = PollSwitch();
if( tswitch > 0 ) {
MotorSpeed(0,0);
StatusLED(RED);
}
}
return 0;
}

Dit is de code. Hij rijdt gewoon vooruit totdat een van de schakelaars ingedrukt wordt. Dan verandert de waarde tswitch naar iets groters dan 0. Vervolgens stopt hij en verandert de statusLED naar rood.

Hij doet het echter niet, iemand een idee wat er mis mee kan zijn?
 
Ik denk dat je code mist om uit je lus te springen op het moment dat je led rood is geworden. Nu flitst je led van rood naar groen om vervolgens weer te wachten op input?

HTH:D
 
Ik denk dat je code mist om uit je lus te springen op het moment dat je led rood is geworden. Nu flitst je led van rood naar groen om vervolgens weer te wachten op input?

HTH:D

De oneindige lus is de bedoeling, aangezien ik de robot aanzet en uitzet. Als het goed is zal de robot blijven rijden totdat de "botssensor" wordt ingedrukt. Dan geeft hij een waarde > 0 af, waardoor de motor wordt stopgezet en de LED rood wordt.

Stom ding, ga er vanavond weer aan werken, hopelijk wrekt hij dan wel.

Waarschijnlijk is er aan de code niks verkeerds, kan iemand dat even bevestigen. Als dat zo is zit de fout hem waarschijnlijk in de volgorde of een intepretatiefout.
 
Je reset tswitch binnen de lus en daarmee de initiele situatie.
Code:
tswitch = 0;
Ik weet ook niet wat voor waarde je PollSwitch() by default teruggeeft? Als dat ook 0 is dan is wederom de initiele situatie gereset. Dus misschien moet die code buiten de lus worden geplaatst.

Ik denk dat je een variabele moet gebruiken om de returnvalue van PollSwitch() op te vangen en die te vergelijken met tswitch. Om vervolgens als er op de knop gedrukt is tswitch de waarde van die tussen variabele te laten worden en niet zonder meer.

HTH:D
 
Je reset tswitch binnen de lus en daarmee de initiele situatie.
Code:
tswitch = 0;
Ik weet ook niet wat voor waarde je PollSwitch() by default teruggeeft? Als dat ook 0 is dan is wederom de initiele situatie gereset. Dus misschien moet die code buiten de lus worden geplaatst.

Ik denk dat je een variabele moet gebruiken om de returnvalue van PollSwitch() op te vangen en die te vergelijken met tswitch. Om vervolgens als er op de knop gedrukt is tswitch de waarde van die tussen variabele te laten worden en niet zonder meer.

HTH:D
De PollSwitch geeft bij default 0 af. Als de robot tegen iets aanrijdt dan geeft hij een waarde > 0.

Ik heb nog 1 algemene vraag dan over C. Alles wat tussen de accolade staat, wordt dat elke seconde weer opnieuw uitgevoerd of hoe zit dat precies? Betekent het dan dat als de PollSwitch() 1 geeft dat hij dan gelijk weer 0 afgeeft? Ben net begonnen met C. Bedankt!

Als je hem buiten de lus plaatst, wordt dat dan ook gelijk uitgevoerd als hij groter is dan 0? Ik ben Java gewend namelijk, dat werkt anders. :D
 
Ik ken de functie PollSwitch niet maar ik kan me voorstellen dat het zoiets is als een deurbel en niet als een lichtschakelaar gezien de naam Pollswitch.
Zolang je robot tegen de muur staat geeft de PollSwitch dus 1 af. en in rust toestand een 0.
Ik ken de commando's niet maar als je dus MotorDir(REV,REV); op zou geven op het moment dat tswitch > 0 dan zou de robot op het moment dat hij tegen de duer rijdt direct achteruit rijden?

Waarom is tswitch gedeclareerd als een unsigned char en niet een unsigned integer?

Code:
#include "asuro.h"

int main(void)
{
   unsigned char tswitch;
   Init();
   while(1){
      FrontLED(ON);
      StatusLED(GREEN);
      MotorDir(FWD,FWD);
      MotorSpeed(80,87);
      tswitch = 0;
      tswitch = PollSwitch();
      if( tswitch > 0 ) {
/*           MotorSpeed(0,0); */
          MotorDir(REV,REV);
          StatusLED(RED);
      }
    }
    return 0;
}
BTW, de lust wordt duizend keer uitgevoerd binnen een seconde. Afhankelijk van de snelheid van je PC.
 
Ik ken de functie PollSwitch niet maar ik kan me voorstellen dat het zoiets is als een deurbel en niet als een lichtschakelaar gezien de naam Pollswitch.
Zolang je robot tegen de muur staat geeft de PollSwitch dus 1 af. en in rust toestand een 0.
Ik ken de commando's niet maar als je dus MotorDir(REV,REV); op zou geven op het moment dat tswitch > 0 dan zou de robot op het moment dat hij tegen de duer rijdt direct achteruit rijden?

Waarom is tswitch gedeclareerd als een unsigned char en niet een unsigned integer?

Code:
#include "asuro.h"

int main(void)
{
   unsigned char tswitch;
   Init();
   while(1){
      FrontLED(ON);
      StatusLED(GREEN);
      MotorDir(FWD,FWD);
      MotorSpeed(80,87);
      tswitch = 0;
      tswitch = PollSwitch();
      if( tswitch > 0 ) {
/*           MotorSpeed(0,0); */
          MotorDir(REV,REV);
          StatusLED(RED);
      }
    }
    return 0;
}
BTW, de lust wordt duizend keer uitgevoerd binnen een seconde. Afhankelijk van de snelheid van je PC.
Het is al gelukt! Ik zal vanavond nog even de code posten.

Feitelijk wordt dus eigenlijk altijd gechecked. Zou je iets buiten de "while lus" kunnen plaatsen en hoe maak je die while eigenlijk 0? Bedankt1
 
Zou je iets buiten de "while lus" kunnen plaatsen
Vanzelfsprekend
en hoe maak je die while eigenlijk 0? Bedankt1

een paar voorbeelden in loops:
Code:
int flag = 0;
while (flag == 0)  //zolang 'flag' gelijkis aan 0 
{
    //doe dingen
    if ( PollSwitch() ) //schakelaar is ingedrukt
    {
         flag = 1;
    }
}
// hier kom je alleen als de schakelaar in isgedrukt

Dit zou je zelfs nog simpeler kunnen doen:

Code:
while (1) //oneindige loop
{
    //doe dingen
    if ( PollSwitch() ) //schakelaar is ingedrukt
    {
         break;
    }
}
// hier kom je alleen als de schakelaar in isgedrukt

misschien tijd voor een tutorialtje over loops? ;)
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan