- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: Programm funktioniert nicht

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    16.01.2009
    Ort
    Rosenfeld
    Beiträge
    57
    Anzeige

    Praxistest und DIY Projekte
    versuchs mal so:

    Code:
    #include "RP6RobotBaseLib.h" 
    
    
    
     void Bumper() 
     { 
         if(getBumperLeft()) 
         {  
            writeString("Linker Bumper gedrueckt!! \n"); 
         }  
         else if(getBumperRight()) 
         {
            writeString("Rechter Bumper gedrueckt!! \n"); 
         }  
         else if(getBumperLeft() && getBumperRight()) 
         {
            writeString("Beide Bumper gedrueckt!! \n"); 
         }  
      } 
    
    
    int main(void) 
    
    { initRobotBase(); 
      powerON(); 
    
      writeString("Hallo! \n"); 
    
       while(1) 
       { 
          Bumper(); 
       }
    
     return 0; 
    }
    Bei mir funktioniert es so jedenfalls...

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    16.01.2009
    Ort
    Rosenfeld
    Beiträge
    57
    Hab eben noch einen Fehler bemerkt:

    Die Abfrage, ob beide Bumper gedrückt sind, muss als erste kommen,
    sonst ist zuerst die Bedingung "Linker Bumper ist gedrückt" erfüllt und der else-Zweig für die Abfrage beider Bumper wird nie erreicht.

    Also so:

    Code:
    void Bumper() 
    {
         if(getBumperLeft() && getBumperRight()) 
         { 
            writeString("Beide Bumper gedrueckt!! \n"); 
         }   
         else if(getBumperLeft()) 
         {  
            writeString("Linker Bumper gedrueckt!! \n"); 
         }  
         else if(getBumperRight()) 
         { 
            writeString("Rechter Bumper gedrueckt!! \n"); 
         }  
    }

  3. #13
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523
    So, wie orusa es geschrieben hat, geht es auch. Will man allerdings statt den Funktionen die Variablen nutzen, muss man eben in der Hauptschleife task_bumpers(); aufrufen.

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    16.01.2009
    Ort
    Rosenfeld
    Beiträge
    57
    Richtig! Das wäre dann die alternative Lösung:
    Code:
    #include "RP6RobotBaseLib.h" 
    
    
    
     void Bumper() 
     { 
         if(bumper_left && bumper_right) 
         {
            writeString("Beide Bumper gedrueckt!! \n");
         }
         else if(bumper_left) 
         {  
           writeString("Linker Bumper gedrueckt!! \n"); 
         }  
         else if(bumper_right) 
         {
           writeString("Rechter Bumper gedrueckt!! \n"); 
         }  
     } 
    
    
    int main(void) 
    { initRobotBase(); 
      powerON(); 
    
      writeString("Hallo! \n"); 
    
      while(1) 
      { 
        task_Bumpers();
        Bumper();
      }
    
      return 0; 
    }
    Noch etwas eleganter geht es über den Eventhandler:

    Code:
    #include "RP6RobotBaseLib.h"
    
    void Bumper() 
    {
      // wie oben
    }
    
    int main(void) 
    { initRobotBase(); 
      powerON(); 
    
      writeString("Hallo! \n"); 
    
      BUMPERS_setStateChangedHandler(Bumper); // hier wird Bumper() an den Event gekoppelt
    
      while(1) 
      { 
          task_Bumpers();
      }
    
      return 0; 
    }
    In diesem Fall wird die Funktion Bumper() nur noch dann aufgerufen, wenn das Ereignis auftritt, dass sich der Zustand der Bumpers geändert hat.

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.04.2009
    Ort
    Wörgl
    Alter
    29
    Beiträge
    175
    Danke, Leute, jetzt funkionierts, wie ich es mir vorgestellt habe. Ich werde nun versuchen, die LEDs mit einzubinden.

    MfG
    Michi

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

12V Akku bauen