Funktion ist nicht gegeben!? Bitte um Hilfe

Liebe Forumgemeinde,

ich habe einen Arduino Uno, ein Motor Shield, ein Display und zwei Ultraschall Sensoren. Ich möchte über die Sensoren die Motoren steuern (je nach Entfernung). Wenn ich den Arduino mit USB(5V) und Netzteil (12V auf das Motorshield) betreibe funktioniert alles. Wenn ich den Arduino mit meinem Akku und einer Platine die 7,1 Volt mach betreibe (Motorshield 12V, Arduino an X1 7,1V), Sagt mir mein Serieller Monitor, dass ein Abstand von 0cm vorliegt. Kann mir jemand sagen, wo mein Fehler liegt? :D Da die FUnktion je gegeben ist, wenn ich das Notebook und das Netzteil nehme, ist ja alles richtig verdrehtet...??? Hier ist noch mein Quellcode :confused: :disappointed_relieved: Die Brücken auf dem Motorshield habe ich schon alle aufgetrennt...

Der Quellcode kommt im Kommentar ;)

#include <LiquidCrystal.h>             // Datei für das Display einbinden

LiquidCrystal lcd(9,8,7,6,5,4);        // Initialisierung der Bibliothek mit den Pin- Nummern

const int signalgeber = 2;

const int motor_eins_richtung   = 12;  // Bestimmung der Richtung von Motor eins am Pin 13
const int motor_eins_geschw     = 3;   // Bestimmung der GEschwindigkeit von Motor eins durch Pulsweitenmodulation an Pin 3

const int motor_zwei_richtung   = 13;  // Bestimmung der Richtung von Motor zwei an Pin 12
const int motor_zwei_geschw     = 11;  // Bestimmung der GEschwindigkeit von Motor zwei durch Pulsweitenmodulation an Pin 11

const int trig                  = 10;   // Sendesignal Sensor eins an Pin 1

const int echo      = 14;   // Empfangssignal Sensor eins an Pin 0
const int echo_zwei     = 15;   // Empfangssignal Sensor zwei an Pin 2

const int taster_vorwaerts      = 16;  // taster_vorwaerts --> Tastersimulation für die Richtung vorwaerts auf Analog IN A0
const int taster_rueckwaerts    = 17;  // taster_rueckwaerts --> Tastersimulation für die Richtung rueckwaerts auf Analog IN A1

unsigned int wert_taster_vorwaerts    = LOW;   // Variable für das Signal von taster_vorwaerts und auf 0 setzen
unsigned int wert_taster_rueckwaerts  = LOW;   // Variable für das Signal von taster_rueckwaerts und auf 0 setzen

unsigned int vorwaerts                = LOW;   // Variable mit Name richtung_vorwaerts und auf 0 setzen 
unsigned int rueckwaerts              = LOW;   // Variable mit Name richtung_rueckwaerts und auf 0 setzen

unsigned int laenge1                   = LOW;   // Für Umrechnung in die Laenge des Sensor Signals und auf 0 setzen
unsigned int laenge2                   = LOW;

unsigned int val_motor_eins           = LOW;   // Übergabeert für Pulsweitenmodulation an Motor eins und auf 0 setzen
unsigned int val_motor_zwei           = LOW;   // Übergabeert für Pulsweitenmodulation an Motor zwei und auf 0 setzen

void setup ()

{ Serial.begin (9600);

pinMode (motor_eins_richtung, OUTPUT);     // Motor_eins_richtung als OUTPUT deklariert
pinMode (motor_eins_geschw, OUTPUT);       // Motor_eins_geschwind als OUTPUT deklariert

pinMode (motor_zwei_richtung, OUTPUT);     // Motor_zwei_richtung als OUTPUT deklariert
pinMode (motor_zwei_geschw, OUTPUT);       // Motor_zwei_geschw als OUTPUT deklariert

pinMode (trig, OUTPUT);        // Trig_sensor_eins als OUTutput deklariert
pinMode (echo, INPUT);         // Tcho_sensor_eins als OUTPUT deklariert

pinMode (taster_vorwaerts, INPUT);
pinMode (taster_rueckwaerts, INPUT);

pinMode (signalgeber, OUTPUT);

pinMode (echo_zwei, INPUT);         // Echo_sensor_zwei als OUTPUT deklariert

lcd.begin(16,2);              // columns, rows.  use 16,2 for a 16x2 LCD, etc.
lcd.clear();                  // start with a blank screen
lcd.setCursor(0,0);           // set cursor to column 0, row 0 (the first row)
lcd.print("   Arduino Uno  ");    // change this text to whatever you like. keep it clean.
lcd.setCursor(0,1);           // set cursor to column 0, row 1
lcd.print(" Modellfahrzeug ");
}

void messung_sensor_zwei ()    // Unterprogramm für die Messung und Auswertung des Sensor eins

{
digitalWrite (trig, LOW);        // trig_sensor_zwei Pin auf LOW setzen
delayMicroseconds (2);                       // Verzögerung um zwei Millisekunden
digitalWrite(trig, HIGH);        // trig_sensor_zwei Pin auf HIGH setzen
delayMicroseconds (5);                       // Verzögerung um fünf Millisekunden
digitalWrite (trig, LOW);        // trig_sensor_zwei Pin wieder auf LOW setzen

laenge2 = pulseIn (echo, HIGH)*0.017;   // Signal aus echo_sensor_zwei einlesen ind in der Variable laenge speichern und in cm umrechnen

Serial.print(laenge2);
Serial.println(" cm Sensor 2");

delay (1000);

}

void messung_sensor()

{

digitalWrite (trig, LOW);        // trig_sensor_eins Pin auf LOW setzen
delayMicroseconds (2);                       // Verzögerung um zwei Millisekunden
digitalWrite(trig, HIGH);        // trig_sensor_eins Pin auf HIGH setzen
delayMicroseconds (5);                       // Verzögerung um fünf Millisekunden
digitalWrite (trig, LOW);        // trig_sensor_eins Pin wieder auf LOW setzen

laenge1 = pulseIn (echo_zwei, HIGH)*0.017;   // Signal aus echo_sensor_eins einlesen ind in der Variable laenge speichern und in cm umrechnen

Serial.print(laenge1);
Serial.println(" cm Sensor 1");

delay (1000);
}


void ausweichen ()
{
Serial.println("ausweichen");

val_motor_eins = 0;// Wert für PWM Motor eins --> 0 heißt STOPP!!
analogWrite (motor_eins_geschw, val_motor_eins);
              
val_motor_zwei = 0;// Wert für PWM Motor zwei --> 0 heißt STOPP!!
analogWrite (motor_zwei_geschw, val_motor_zwei);
              
digitalWrite (motor_eins_richtung, HIGH);
val_motor_eins = 200;// Wert für PWM Motor eins 
analogWrite (motor_eins_geschw, val_motor_eins);
              
digitalWrite (motor_zwei_richtung, LOW);
val_motor_zwei = 200;// Wert für PWM Motor zwei 
analogWrite (motor_zwei_geschw, val_motor_zwei);

digitalWrite (signalgeber, HIGH);
delay (500);
digitalWrite (signalgeber, LOW);
delay (500);
digitalWrite (signalgeber, HIGH);
delay (500);
digitalWrite (signalgeber, LOW);
delay (500);
digitalWrite (signalgeber, HIGH);
delay (500);
digitalWrite (signalgeber, LOW);
                         
val_motor_eins = 0;// Wert für PWM Motor eins --> 0 heißt STOPP!!
analogWrite (motor_eins_geschw, val_motor_eins);
              
val_motor_zwei = 0;// Wert für PWM Motor zwei --> 0 heißt STOPP!!
analogWrite (motor_zwei_geschw, val_motor_zwei);
}

void loop ()

{ wert_taster_vorwaerts   = digitalRead (taster_vorwaerts); 
wert_taster_rueckwaerts = digitalRead (taster_rueckwaerts);

if (wert_taster_vorwaerts == HIGH || wert_taster_rueckwaerts == HIGH)    
    {
       if (wert_taster_vorwaerts == HIGH)
      {
        vorwaerts = HIGH;
        rueckwaerts = LOW;
        
        Serial.println("vorwaerts");
      }
      if (wert_taster_rueckwaerts == HIGH)
      {
        rueckwaerts = HIGH;
        vorwaerts = LOW;
        
        Serial.println("rueckwaerts");
      }
 

 while (1)  
    {
       if (vorwaerts == HIGH) // D.h. wenn der Taster für Richtung vorwaerts gedrückt wurde
         {
           messung_sensor ();    // Wert aus Sensor eins ermitteln
           
           if(laenge1 >= 20)
             {
              val_motor_eins = 200; // Wert für PWM Motor eins übergeben
              analogWrite (motor_eins_geschw, val_motor_eins); // PWM- Signal an Motor eins übergeben
              digitalWrite (motor_eins_richtung, HIGH);  // Motor eins in HIGH Richtung drehen d.h. vorwaerts
              
              val_motor_zwei = 200; // Wert für PWM Motor zwei übergeben
              analogWrite (motor_zwei_geschw, val_motor_zwei); // PWM- Signal an Motor zwei übergeben
              digitalWrite (motor_zwei_richtung, HIGH);  // Motor zwei in High Richtung drehen d.h. vorwaerts
              
              delay (2000);  // Verzögerung von 2 Sekunden
             }
             
            else
            {
              ausweichen ();
            }
         }
       
       
        if (rueckwaerts == HIGH)                         // Wenn nicht dann
         {
          messung_sensor_zwei ();     // Wert aus Sensor zwei ermitteln
          
          if (laenge2 >= 20)
            {
              val_motor_eins = 200; // Wert für PWM Motor eins übergeben
              analogWrite (motor_eins_geschw, val_motor_eins);  // PWM- Signal an Motor eins übergeben
              digitalWrite (motor_eins_richtung, LOW); // Motor eins in LOW Richtung drehen d.h. rueckwaerts
              
              val_motor_zwei = 200;// Wert für PWM Motor zwei übergeben
              analogWrite (motor_zwei_geschw, val_motor_zwei); // PWM- Signal an Motor zwei übergeben
              digitalWrite (motor_zwei_richtung, LOW); // Motor zwei in LOW Richtung drehen d.h. rueckwaerts
              
              delay (2000);  // Verzögerung von 2 Sekunden
            }
           else
           {
             ausweichen ();
           }
              
         }
     }
            
 }  }

(tags added by Moderator)

Verwende bitte die Code BBCode Tags für dein Programm.

Ich halte die ganzen delay() für verdächtig. while(1) im loop()?

Ich kann mir nicht vorstellen, dass man da überhaupt einen Robby mit laufen lassen kann.

Tipp: Beschäftige dich mal mit: http://arduino.cc/en/Tutorial/BlinkWithoutDelay Und mit endlichen Automaten.