- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 35

Thema: Bumper / ACS Fehlfunktion

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    11.12.2010
    Beiträge
    147
    Anzeige

    Praxistest und DIY Projekte
    Also ich teste es ohne Bildschirm^^
    Aber ich glaube mein ACS ist einfach kaputt, leider.
    Und das obwohl es gestern noch klappte ( mit ACS links, rechts ging noch nie)
    Denn selbst mit dem Selftest Programm zeigt er keine Reaktion ( manchmal "sieht" er mit links etwas).
    Mein RP6 YouTube Kanal
    Abonnieren & Kommentieren

    http://www.youtube.com/user/MyRP6

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    17.07.2010
    Beiträge
    45
    Also ich hab das ganze nochmal überprüft und festgestellt das mein linker Bumper kein Signal auslösen kann?! Woran kann das liege? Hat da jemand Erfahrungen damit?
    Die LED6 leuchtet bei Kontakt aber auf...

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    11.12.2010
    Beiträge
    147
    Wie hast du das festgestellt ? Mit Selftest oder mit einem deiner Programme?
    Mein RP6 YouTube Kanal
    Abonnieren & Kommentieren

    http://www.youtube.com/user/MyRP6

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    17.07.2010
    Beiträge
    45
    Miit meinem Programm, dachte da sei die Fehlerchance gering:
    Code:
    #include "RP6RobotBaseLib.h"
    
    void RobotBase_initialisieren (void){
      initRobotBase();
      writeString_P("RobotBase initialisiert\n");
    }
    
    void Motorkomponenten_starten (void){
      powerON();
      writeString_P("Energie fuer Motorenkomponenten freigegeben\n");
    }
    
    void LEDs_pruefen(void){
      int LEDs_angeschaltet = 0;
      while(LEDs_angeschaltet < 3)
      {
        statusLEDs.LED1 = true;
        statusLEDs.LED4 = true;
        updateStatusLEDs();
        mSleep(100);
        statusLEDs.LED2 = true;
        statusLEDs.LED5 = true;
        updateStatusLEDs();
        mSleep(100);
        statusLEDs.LED3 = true;
        statusLEDs.LED6 = true;
        updateStatusLEDs();
        mSleep(100);
      
        statusLEDs.LED1 = false;
        statusLEDs.LED4 = false;
        updateStatusLEDs();
        mSleep(100);
        statusLEDs.LED2 = false;
        statusLEDs.LED5 = false;
        updateStatusLEDs();
        mSleep(100);
        statusLEDs.LED3 = false;
        statusLEDs.LED6 = false;
        updateStatusLEDs();
        mSleep(100);
    	LEDs_angeschaltet = LEDs_angeschaltet +1;
      }
      
      int Alle_LEDs_angeschaltet = 0;
      while(Alle_LEDs_angeschaltet < 3)
      {
        statusLEDs.LED1 = true;
    	statusLEDs.LED2 = true;
    	statusLEDs.LED3 = true;
    	statusLEDs.LED4 = true;
    	statusLEDs.LED5 = true;
    	statusLEDs.LED6 = true;
    	updateStatusLEDs();
    	mSleep(100);
    	
    	statusLEDs.LED1 = false;
    	statusLEDs.LED2 = false;
    	statusLEDs.LED3 = false;
    	statusLEDs.LED4 = false;
    	statusLEDs.LED5 = false;
    	statusLEDs.LED6 = false;
    	updateStatusLEDs();
    	mSleep(100);
    	Alle_LEDs_angeschaltet = Alle_LEDs_angeschaltet +1;
      }
      writeString_P("LEDs geprueft\n");
    }
    
    void LED_Zustaende_ausgeben(void){
      if(statusLEDs.LED1)
        writeString_P(" LED 1: An, ");
      else
    	writeString_P(" LED 1: Aus, ");
    	
      if(statusLEDs.LED2)
        writeString_P("LED 2: An, ");
      else
    	writeString_P("LED 2: Aus, ");
    	
      if(statusLEDs.LED3)
        writeString_P("LED 3: An, ");
      else
    	writeString_P("LED 3: Aus, ");
    	
      if(statusLEDs.LED4)
        writeString_P("LED 4: An, ");
      else
    	writeString_P("LED 4: Aus, ");
    	
      if(statusLEDs.LED5)
        writeString_P("LED 5: An, ");
      else
    	writeString_P("LED 5: Aus, ");
    	
      if(statusLEDs.LED6)
        writeString_P("LED 6: An\n");
      else
    	writeString_P("LED 6: Aus\n");
    }
    void Bumper_Zustaende_ausgeben(void){
      task_Bumpers();
      if(bumper_left)
        writeString_P(" Linker Bumper: aktiv ,");
      else
        writeString_P(" Linker Bumper: inaktiv ,");
    	
      if(bumper_right)
        writeString_P("Rechter Bumper: aktiv\n");
      else
        writeString_P("Rechter Bumper: inaktiv\n");
    }
    void ACS_Zustaende_ausgeben(void){
      setACSPwrLow();
      task_ACS();
      if (obstacle_left == true && obstacle_right == true)
        writeString_P(" Hinderniss nahe vorne:   ja, ");
      else
        writeString_P(" Hinderniss nahe vorne:   nein, ");
    	
      if(obstacle_left == true)
        writeString_P("Hinderniss nahe links:   ja, ");
      else
        writeString_P("Hinderniss nahe links:   nein, ");
    	
      if(obstacle_right == true)
        writeString_P("Hinderniss nahe rechts:   ja\n");
      else
        writeString_P("Hinderniss nahe rechts:   nein\n");
    	
      mSleep(50);	
      setACSPwrMed();
      task_ACS();
      if (obstacle_left == true && obstacle_right == true)
        writeString_P(" Hinderniss mittel vorne: ja, ");
      else
        writeString_P(" Hinderniss mittel vorne: nein, ");
    	
      if(obstacle_left == true)
        writeString_P("Hinderniss mittel links: ja, ");
      else
        writeString_P("Hinderniss mittel links: nein, ");
    	
      if(obstacle_right == true)
        writeString_P("Hinderniss mittel rechts: ja\n");
      else
        writeString_P("Hinderniss mittel rechts: nein\n");
    	
      mSleep(50);	
      setACSPwrHigh();
      task_ACS();
      if (obstacle_left == true && obstacle_right == true)
        writeString_P(" Hinderniss weit vorne:   ja, ");
      else
        writeString_P(" Hinderniss weit vorne:   nein, ");
    	
      if(obstacle_left == true)
        writeString_P("Hinderniss weit links:   ja, ");
      else
        writeString_P("Hinderniss weit links:   nein, ");
    	
      if(obstacle_right == true)
        writeString_P("Hinderniss weit rechts:   ja\n");
      else
        writeString_P("Hinderniss weit rechts:   nein\n");
    	
      mSleep(50);	
      setACSPwrOff();
    }
    void Zustaende_ausgeben(void){
      writeString_P("Zustaende:\n");
      LED_Zustaende_ausgeben();
      Bumper_Zustaende_ausgeben();
      ACS_Zustaende_ausgeben();
    }
    
    void Fahre_Rueckwaerts(int Distanz)
    {
      
    }
    void Bumper_beruehrt(void) {
        if (bumper_left == true && bumper_right == true)
    	{
    	}
    	else if(bumper_left)
    	{
    	}
    	else
    	{
    	}
    } 
    int main (void)
    {
      RobotBase_initialisieren();
      Motorkomponenten_starten();
      LEDs_pruefen();
      Zustaende_ausgeben();
      BUMPERS_setStateChangedHandler(Bumper_beruehrt); 
      
      moveAtSpeed(70,70); 
       
      while(true)
      {
        task_RP6System();
      }
      
      return 0;
    }

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    11.12.2010
    Beiträge
    147
    Ob da ein Fehler drin ist kann ich nicht genau sagen ( bin ja auch neu auf dem Gebiet ). Versuch einfach mal das Selftest Programm drüber laufen zu lassen. Dadurch siehst du ja ob er wirklich kein Signal zurück gibt.
    Mein RP6 YouTube Kanal
    Abonnieren & Kommentieren

    http://www.youtube.com/user/MyRP6

  6. #16
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523
    Zitat Zitat von Dasive
    Miit meinem Programm, dachte da sei die Fehlerchance gering:
    Code:
    #include "RP6RobotBaseLib.h"
    
    void RobotBase_initialisieren (void){
      initRobotBase();
      writeString_P("RobotBase initialisiert\n");
    }
    
    void Motorkomponenten_starten (void){
      powerON();
      writeString_P("Energie fuer Motorenkomponenten freigegeben\n");
    }
    
    void LEDs_pruefen(void){
      int LEDs_angeschaltet = 0;
      while(LEDs_angeschaltet < 3)
      {
        statusLEDs.LED1 = true;
        statusLEDs.LED4 = true;
        updateStatusLEDs();
        mSleep(100);
        statusLEDs.LED2 = true;
        statusLEDs.LED5 = true;
        updateStatusLEDs();
        mSleep(100);
        statusLEDs.LED3 = true;
        statusLEDs.LED6 = true;
        updateStatusLEDs();
        mSleep(100);
      
        statusLEDs.LED1 = false;
        statusLEDs.LED4 = false;
        updateStatusLEDs();
        mSleep(100);
        statusLEDs.LED2 = false;
        statusLEDs.LED5 = false;
        updateStatusLEDs();
        mSleep(100);
        statusLEDs.LED3 = false;
        statusLEDs.LED6 = false;
        updateStatusLEDs();
        mSleep(100);
    	LEDs_angeschaltet = LEDs_angeschaltet +1;
      }
      
      int Alle_LEDs_angeschaltet = 0;
      while(Alle_LEDs_angeschaltet < 3)
      {
        statusLEDs.LED1 = true;
    	statusLEDs.LED2 = true;
    	statusLEDs.LED3 = true;
    	statusLEDs.LED4 = true;
    	statusLEDs.LED5 = true;
    	statusLEDs.LED6 = true;
    	updateStatusLEDs();
    	mSleep(100);
    	
    	statusLEDs.LED1 = false;
    	statusLEDs.LED2 = false;
    	statusLEDs.LED3 = false;
    	statusLEDs.LED4 = false;
    	statusLEDs.LED5 = false;
    	statusLEDs.LED6 = false;
    	updateStatusLEDs();
    	mSleep(100);
    	Alle_LEDs_angeschaltet = Alle_LEDs_angeschaltet +1;
      }
      writeString_P("LEDs geprueft\n");
    }
    
    void LED_Zustaende_ausgeben(void){
      if(statusLEDs.LED1)
        writeString_P(" LED 1: An, ");
      else
    	writeString_P(" LED 1: Aus, ");
    	
      if(statusLEDs.LED2)
        writeString_P("LED 2: An, ");
      else
    	writeString_P("LED 2: Aus, ");
    	
      if(statusLEDs.LED3)
        writeString_P("LED 3: An, ");
      else
    	writeString_P("LED 3: Aus, ");
    	
      if(statusLEDs.LED4)
        writeString_P("LED 4: An, ");
      else
    	writeString_P("LED 4: Aus, ");
    	
      if(statusLEDs.LED5)
        writeString_P("LED 5: An, ");
      else
    	writeString_P("LED 5: Aus, ");
    	
      if(statusLEDs.LED6)
        writeString_P("LED 6: An\n");
      else
    	writeString_P("LED 6: Aus\n");
    }
    void Bumper_Zustaende_ausgeben(void){
      task_Bumpers();
      if(bumper_left)
        writeString_P(" Linker Bumper: aktiv ,");
      else
        writeString_P(" Linker Bumper: inaktiv ,");
    	
      if(bumper_right)
        writeString_P("Rechter Bumper: aktiv\n");
      else
        writeString_P("Rechter Bumper: inaktiv\n");
    }
    void ACS_Zustaende_ausgeben(void){
      setACSPwrLow();
      task_ACS();
      if (obstacle_left == true && obstacle_right == true)
        writeString_P(" Hinderniss nahe vorne:   ja, ");
      else
        writeString_P(" Hinderniss nahe vorne:   nein, ");
    	
      if(obstacle_left == true)
        writeString_P("Hinderniss nahe links:   ja, ");
      else
        writeString_P("Hinderniss nahe links:   nein, ");
    	
      if(obstacle_right == true)
        writeString_P("Hinderniss nahe rechts:   ja\n");
      else
        writeString_P("Hinderniss nahe rechts:   nein\n");
    	
      mSleep(50);	
      setACSPwrMed();
      task_ACS();
      if (obstacle_left == true && obstacle_right == true)
        writeString_P(" Hinderniss mittel vorne: ja, ");
      else
        writeString_P(" Hinderniss mittel vorne: nein, ");
    	
      if(obstacle_left == true)
        writeString_P("Hinderniss mittel links: ja, ");
      else
        writeString_P("Hinderniss mittel links: nein, ");
    	
      if(obstacle_right == true)
        writeString_P("Hinderniss mittel rechts: ja\n");
      else
        writeString_P("Hinderniss mittel rechts: nein\n");
    	
      mSleep(50);	
      setACSPwrHigh();
      task_ACS();
      if (obstacle_left == true && obstacle_right == true)
        writeString_P(" Hinderniss weit vorne:   ja, ");
      else
        writeString_P(" Hinderniss weit vorne:   nein, ");
    	
      if(obstacle_left == true)
        writeString_P("Hinderniss weit links:   ja, ");
      else
        writeString_P("Hinderniss weit links:   nein, ");
    	
      if(obstacle_right == true)
        writeString_P("Hinderniss weit rechts:   ja\n");
      else
        writeString_P("Hinderniss weit rechts:   nein\n");
    	
      mSleep(50);	
      setACSPwrOff();
    }
    void Zustaende_ausgeben(void){
      writeString_P("Zustaende:\n");
      LED_Zustaende_ausgeben();
      Bumper_Zustaende_ausgeben();
      ACS_Zustaende_ausgeben();
    }
    
    void Fahre_Rueckwaerts(int Distanz)
    {
      
    }
    void Bumper_beruehrt(void) {
        if (bumper_left == true && bumper_right == true)
    	{
    	}
    	else if(bumper_left)
    	{
    	}
    	else
    	{
    	}
    } 
    int main (void)
    {
      RobotBase_initialisieren();
      Motorkomponenten_starten();
      LEDs_pruefen();
      Zustaende_ausgeben();
      BUMPERS_setStateChangedHandler(Bumper_beruehrt); 
      
      moveAtSpeed(70,70); 
       
      while(true)
      {
        task_RP6System();
      }
      
      return 0;
    }
    Folgendes:

    Die Funktionen, die aktiv dein ACS und deine Bumper überprüfen werden nur EIN EINZIGES MAL aufgerufen, nämlich direkt bei Start.

    Die einzige Funktion die öfters aufgerufen wird ist: bumper_beruehrt.
    Allerdings ist diese Funktion quasi leer und macht dementsprechend nichts.

    Alles was öfters aufgerufen werden soll, muss in die while(true)-Schleife.

    Noch was: Du überprüfst deine Variablen immer auf == true. Das würde ich nicht machen. Du kannst auch einfach so prüfen: if(obstacle_left).
    Das ganze hat einen Grund: C kennt true und false nicht, eine bool'sche Variable gibt es nicht.
    true und false sind in der Bibliothek vom RP6 definiert, und zwar so:
    Code:
    // Boolean:
    #define true 1
    #define false 0
    #define TRUE 1
    #define FALSE 0
    Da die Variablen wie obstacle oder bumper aber auch größere Zahlen als 1 annehmen können, falls z.B. der Bumper gedrückt ist, klappt die Abfrage nicht.

    Du prüfst dann quasi folgendes:
    Code:
    if(64 ==1)
    Das wird natürlich niemals klappen, obwohl der Bumper eigentlich gedrückt war.

  7. #17
    Benutzer Stammmitglied
    Registriert seit
    17.07.2010
    Beiträge
    45
    Der Selbsttest ist auch fehlgeschlagen!

  8. #18

    Pull-up Widerstand?

    Ich kenne zwar den RP6 nicht aber das riecht evtl. nach eine Konfigurationsproblem:

    Bumper-Taster funktionieren normalerweise nach folgendendem Prinzip:
    Ein digitaler Eingang wird über einen sogenannten Pull-up-Widerstand, der and der Versorgungsspannung liegt (üblicherweise +5V), auf logisch HIGH geschaltet. Der Bumper-Taster zieht dann bei Betätigung diesen Eingang auf Masse, sprich logisch LOW. Dieser Low-Pegel (oder auch die abfallende Flanke) wird dann vom Mikrocontroller registriert und kann somit per Software verwertet werden.

    Der AVR besitzt z.B. interne Pull-up's, die man aber über die Software erst entsprechend aktivieren muss. Möglicherweise ist das hier nicht geschehn?!

  9. #19
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    11.12.2010
    Beiträge
    147
    Würde mich auch mal interessieren was dann noch hilft,
    denn ich habe das selbe Problem.

    Beim Selftest gehe ich 30 mal mit der Hand nah an den RP6, und dann zeigt er mit vielleicht 2 mal eine reaktion bei links. ( Rechts geht garnicht)

    Irgendjemand eine Idee ?
    Mein RP6 YouTube Kanal
    Abonnieren & Kommentieren

    http://www.youtube.com/user/MyRP6

  10. #20
    Benutzer Stammmitglied
    Registriert seit
    17.07.2010
    Beiträge
    45
    CleanBot der linke geht ja!
    Weisst du wie ich das machen müsste?

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

12V Akku bauen