Hallo Leute ,
Ich habe seit Tagen ein Problem mit dem Linienfolger-Projekt. Ich hoffe jemand mit Erfahrung diesbezüglich nimmt sich etwas Zeit und hilft mir bei dieser Problematik.
Ich habe den Schaltplan erstellt ,den kleinen Roboter dementsprechend gebaut und anschließend den Programmierungscode geschrieben , allerdings lässt sich Nichts bewegen .
Den Schaltplan findet ihr im hochgeladenen Bild
und so sieht der Code aus :
#define SensLinks_Digital 10
#define SensLinks_PowerVcc 12
#define SensLinks_PowerGnd 11
#define SensRechts_Digital 1
#define SensRechts_PowerVcc 3
#define SensRechts_PowerGnd 2
#define Motor_links1 6
#define Motor_links2 5
#define Motor_rechts1 7
#define Motor_rechts2 8
void setup() {
Serial.begin (9600);
pinMode ( SensLinks_Digital , INPUT );
pinMode ( SensRechts_Digital , INPUT );
pinMode ( SensLinks_PowerVcc , OUTPUT );
pinMode ( SensLinks_PowerGnd , OUTPUT);
pinMode (SensRechts_PowerVcc , OUTPUT );
pinMode ( SensRechts_PowerGnd, OUTPUT);
pinMode ( Motor_links1 , OUTPUT );
pinMode ( Motor_links2 , OUTPUT );
pinMode ( Motor_rechts1 , OUTPUT );
pinMode ( Motor_rechts2 , OUTPUT );
digitalWrite ( SensLinks_PowerVcc , HIGH );
digitalWrite ( SensLinks_PowerGnd , LOW );
digitalWrite ( SensRechts_PowerVcc , HIGH );
digitalWrite ( SensRechts_PowerGnd , LOW );
}
void loop()
{
if( ! digitalRead (SensLinks_Digital ) && ! digitalRead (SensRechts_Digital))
{
digitalWrite ( Motor_links1 , HIGH );
digitalWrite ( Motor_links2 , LOW );
digitalWrite ( Motor_rechts1 , HIGH );
digitalWrite ( Motor_rechts2 , LOW );
}
if( digitalRead (SensLinks_Digital ) && ! digitalRead (SensRechts_Digital))
{
digitalWrite ( Motor_links1 ,LOW );
digitalWrite ( Motor_links2 , LOW );
digitalWrite ( Motor_rechts1 , HIGH );
digitalWrite ( Motor_rechts2 , LOW );
}
if( ! digitalRead (SensLinks_Digital ) && digitalRead (SensRechts_Digital) )
{
digitalWrite ( Motor_links1 ,HIGH );
digitalWrite ( Motor_links2 , LOW );
digitalWrite ( Motor_rechts1 , LOW );
digitalWrite ( Motor_rechts2 , LOW ) ;
}
}
Ich habe mehrmals den Code umgeschrieben um festzustellen , woran es genau liegt. Was ich allerdings festgestellt habe ist wahnsinnig und verwirrend. Es funktioniert erstaunlicheweise nur in zwei Fällen , und die erwähne ich auch :
Fall 1 :
In der if-Abfrage steht nur ein Infrarrotsensor ( also nur der eine Sensor liefert die Signale während der andere abgeschaltet ist ). Folgender Code erklärt das :
Kopf wie im obigen Code. Und jetzt direkt zum LoopTeil :
void loop()
{
if( ! digitalRead (SensLinks_Digital ))
{
digitalWrite ( Motor_links1 , HIGH );
digitalWrite ( Motor_links2 , LOW );
digitalWrite ( Motor_rechts1 , HIGH );
digitalWrite ( Motor_rechts2 , LOW );
}
if( digitalRead (SensLinks_Digital )))
{
digitalWrite ( Motor_links1 ,LOW ); // hier überall " LOW " nur um zu testen ob sich überhaupt was antut.
digitalWrite ( Motor_links2 , LOW ); // Test-Anweisung
digitalWrite ( Motor_rechts1 , LOW );
digitalWrite ( Motor_rechts2 , LOW );
Fall 2 :
in der if-Abfrage stehen beide Sensoren ( also beide Sensore liefern die Signale ) aber die zweite Bedingung ( was oben im ersten Code auch in eine andere if-Abfrage ausgeführt wurde ) steht diesesmal in eine " else " Verknüpfung. folgender Code erklärt das :
if( ! digitalRead (SensLinks_Digital ) && ! digitalRead (SensRechts_Digital))
{
digitalWrite ( Motor_links1 ,HIGH);
digitalWrite ( Motor_links2 , LOW );
digitalWrite ( Motor_rechts1 , HIGH );
digitalWrite ( Motor_rechts2 , LOW );
}
else
{
digitalWrite ( Motor_links1 ,LOW ); // Hier genauso überall " LOW " nur als Test -Anweisung .
digitalWrite ( Motor_links2 ,LOW );
digitalWrite ( Motor_rechts1 , LOW );
digitalWrite ( Motor_rechts2 , LOW ) ;
}
}
Nur unter die obigen Fälle läuft der Roboter schon gut . Jetzt und nach intensiver Überlegung kann ich in diesem Rätsel gar nicht den Fehler erkennen.
Villeicht hilft mir jemand hier . Darauf würde ich mich total freuen.
Vielen Dank