-         

Ergebnis 1 bis 10 von 10

Thema: Programmfehler?

  1. #1

    Programmfehler?

    Anzeige

    Ich hab hier ein einfaches Programm geschrieben:
    Der Asuro soll solange vorwärts fahren, bis ein Taster gedrückt wird, danach ~1s rückwärts und danach wieder vorwärts.^^ Ja, ist ein bisschen sinnlos, weil er immer wieder gegen die Wand knallt, aber ich wollte nur mal ein bisschen rumprobieren, wie das mit dem Programmieren beim Asuro so funktioniert.

    Code:
    #include "asuro.h"
    
    int main(void)
    {
      while(1)
      {
         int Zaehler;
         Init();
         StatusLED(GREEN);
         MotorDir(FWD,FWD);
         MotorSpeed(120,120);
         if (PollSwitch() > 0)
         {
             MotorDir(RWD,RWD);
             for (Zaehler = 0; Zaehler < 334; Zaehler++)
             {
    	           Sleep(216);
              }
          }
         MotorDir(FWD,FWD);
       }		
      return 0;
    }
    (Das MotorDir(FWD,FWD) ist vll nichtmal notwendig, aber

    Wenn ich den Asuro einschalte, fährt er die ganze Zeit nur rückwarts.

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    31.08.2005
    Beiträge
    41
    hi, ich hab dein programm mal getestet und mein asuro fährt auch rückwärts.
    Auf den ersten blick hab ich keinen fehler gefunden und deswegen mal selbst versucht so ein programm zu schreiben, aber es tritt immer das selbe phänomen auf. Wenn man allerdings die for-schleife und die sleepfunktion weglässt, fährt er nur dann rückwärts, wenn tatsächlich ein Taster gedrückt ist. Also vermute ich dass es de for-schleife bzw. die sleepfunktion die pollswitch werte irgendwie beeinflusst. Warum weiß ich allerdings auch nicht.

    mfg LuZ

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.12.2007
    Beiträge
    131
    hallo,
    das liegt daran, dass du die poll-switch funktion wahrwscheinlich falsch programmiert hast,
    du müsstest eine eigene variable deklarieren, z.B.
    [unsigned char taste=0;]
    und dann die funktion PollSwitch aufrufen:
    [Init();
    PollSwitch();
    Sleep(255);
    PollSwitch();
    Sleep(255);]
    dann die variable mit pollswitch verknüpfen:
    [PollSwitch()=taste]
    und dann schreibst du einfach:
    [if (taste == 0) {
    MotorDir(FWD,FWD);
    MotorSpeed(250,250);}
    else {MotorDir(RWD,RWD);
    MotorSpeed(250,250);]

    das ist ejtzt ein ganz einfaches programm, natürlicvh kannst du das noch verbessern uind dso, aber damit müsste das funktionieren
    schau hier mal nach, da hab ich es glaube ic hschon einmal so in etwa erklärt:
    http://www.roboternetz.de/phpBB2/vie...=347359#347359
    naja ich hoffe ich konnte dir helfen
    mfg hans[/code]

  4. #4
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.912
    nimm mal init(); und int Zaehler(); aus der while(1) schleife raus und schreib sie davor. hilft das?

    hansi41: Bitte benutze den code-button!
    kleinschreibung ist cool!

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.12.2007
    Beiträge
    131
    das habe ich jetzt wirklich versucht!
    ich habe zum Beispiel geschrieben:
    [Init();]
    aber es hat nicht funktioniert, was soll ich denn machen, ich bekommd as einfach nicht hin^^

  6. #6
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.912
    das ist ja auch nciht das ziel.... o0
    schreibe VOR den GANZEN code-block:

    [ code] (ohne das leerzeichen)
    und hinter den ganzen code-block schreibst du

    [ /code] (ebenfalls ohne das leerzeichen.
    kleinschreibung ist cool!

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.12.2007
    Beiträge
    131
    ah ok jetzt ists klar, ich versreche ich werde mich jetzt dran halten

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    31.08.2005
    Beiträge
    41
    danke und wieder was dazugelernt

  9. #9
    Sorry, aber ich konnte eure Ratschläge noch nicht ausprobieren, da mein Asuro im Moment irgendwie nicht richtig funktioniert und ich in den letzten 1,5 Tagen auch keine Zeit dafür hatte.^^
    Die nächsten paar Tage wird das auch noch so sein. Ich wollte euch das nur mitteilen, damit ihr euch nicht wundert, warum ich nicht antworte.^^
    Ich werde also wahrscheinlich erst Ende der Woche an dem Programm weiterbasteln können.

  10. #10
    Ok, das Problem ist gelöst.
    Ich habe die PollSwitch()-Funktion mehrmals aufgerufen (wie hier beschrieben).

    Das sieht dann so aus (und es funktioniert perfekt^^):

    Code:
    #include "asuro.h" 
    
    int main(void) 
    { 
      Init();
      while(1) 
      { 
        int zaehler;
    	unsigned char taster;
        unsigned char vergleich;
        taster = PollSwitch();
        vergleich = PollSwitch();
        MotorDir(FWD,FWD);
        MotorSpeed(120,120);
    	if ((taster == vergleich)&&(vergleich > 0))
    	{
    	   MotorDir(RWD,RWD);
    	   for (zaehler = 0; zaehler < 334; zaehler++) 
             { 
                  Sleep(216); 
              } 
     
    	}   	
      }       
      return 0; 
    }
    Danke für die Tipps.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •