Zwei Programme zusammenführen

Wir müssen in der Schule ein Programm am Arduino schreiben bei dem man das Licht eines Kfz bedienen können muss. Das haben wir auch geschafft, jetzt wollen wir aber noch ein display dazufügen, für das wir auch ein passendes Programm haben. Allerding bekommen wir die Programme einfach nicht zusammen.

Das Lichtprogramm:

#define Blink_R 6        //Blinkerlampe rechts am Port 6

#define S_Blink_R 8      //Schalter vom Blinker rechts am Port 8

#define Blink_L 7        //Blinkerlampe Links am Port 7

#define S_Blink_L 9      //Schlter vom Blinker Links am Port 9

#define Ruecklicht_R 4   //Rücklicht Rechts am Port 4 

#define Ruecklicht_L 5   //Rücklicht Links am Port 5

#define S_Fahrlicht 10   //Schalter vom Fahrlicht am Port 10

#define Bremslicht_L 2   //Bremslicht Links am Port 2

#define Bremslicht_R 11  //Bremslicht Rechts am Port 11

#define S_Bremslicht 3   //Schalter vom Bremslicht am Port 3


int blinkStatus = LOW;       //Blink-Status auf "aus"

int BlinkerRStatus = LOW;    //Blinker-Status- Speicher 1 auf "aus"

int BlinkerLStatus = LOW;    //Blinker-Status-Speicher 1 auf "aus"


int FahrlichtStatus = LOW; //Standlicht-Status auf "aus"

int BremslichtStatus = LOW; // Fahrtlicht-Status auf "aus" 


unsigned long zurueckZeit = 0;   //32 Bit-Speicherplatz für die zurückliegende Zeit

unsigned long aktuelleZeit = 0;  //32 Bit-Speicherplatz für die Zeit nach dem Einschalten

const long blinkintervall = 555; //32 Bit-Speicherplatz für den Blink-Intervall-Konstante



void setup()

{

pinMode(Blink_R, OUTPUT);        //Blinkerlampenport recht auf Ausgabe schalten

pinMode(Blink_L, OUTPUT);        //Blinkerlampenport links auf Ausgabe schalten 

pinMode(Ruecklicht_R, OUTPUT);   //Rücklicht links-Port auf Ausgabe schalten

pinMode(Ruecklicht_L, OUTPUT);   //Rücklicht links-Port auf Ausgabe schalten

pinMode(Bremslicht_L, OUTPUT);   //Bremslicht-links-Port auf Ausgabe schalten

pinMode(Bremslicht_R, OUTPUT);   //Bremslicht-links-Port auf Ausgabe schalten


pinMode(S_Fahrlicht, INPUT_PULLUP);  //Port für den Fahrtrichtungsschalter auf Eingabe mit Pullup-Wiederstand Schalten

pinMode(S_Blink_R, INPUT_PULLUP);    //Port für den Blinkschalter-rechts auf Eingabe mit Pullup-Wiederstand schalten

pinMode(S_Blink_L, INPUT_PULLUP);    //Port für den Blinkerschalter-links auf Eingabe mit Pullup-Wiederstand schalter  

pinMode(S_Bremslicht, INPUT_PULLUP); //Port für den Bremslichtschalter auf Eingabe mit Pullup-Wiederstand schalten


}

void loop()

{

aktuelleZeit = millis();

if(aktuelleZeit - zurueckZeit >= blinkintervall)

{

  zurueckZeit = aktuelleZeit;

  if(blinkStatus == LOW)

  {

    blinkStatus =HIGH;

  }

  else

  {

    blinkStatus = LOW;

  }

}

BlinkerRStatus = digitalRead(S_Blink_R);

if (BlinkerRStatus == LOW)

{

  digitalWrite(Blink_R, blinkStatus);

}

else

{

digitalWrite(Blink_R, LOW);

}

BlinkerLStatus = digitalRead(S_Blink_L);

if (BlinkerLStatus == LOW)

{

digitalWrite(Blink_L, blinkStatus);

}

else

{

digitalWrite(Blink_L, LOW);

}

FahrlichtStatus = digitalRead(S_Fahrlicht);

if(FahrlichtStatus == LOW)

{

digitalWrite(Ruecklicht_L, HIGH);

digitalWrite(Ruecklicht_R, HIGH);

}

else 

{

digitalWrite(Ruecklicht_L, LOW);

digitalWrite(Ruecklicht_R, LOW);

} 

BremslichtStatus = digitalRead(S_Bremslicht);

if(BremslichtStatus == LOW)

{

digitalWrite(Bremslicht_L, HIGH);

digitalWrite(Bremslicht_R, HIGH);

}

else

{

digitalWrite(Bremslicht_L, LOW);

digitalWrite(Bremslicht_R, LOW);

}   

}

Das Displayporgramm:

#include <LiquidCrystal> //LCD-Bibliothek laden


LiquidCrystal lcd(34, 32, 30, 28, 26, 24); //In dieser Zeile wird festgelegt, welche Pins des Mikrocontrollerboards für das LCD verwendet wird (Am besten erstmal nicht verändern).


void setup() 

{

lcd.begin(16, 2); //Im Setup wird angegeben, wie viele Zeichen und Zeilen verwendet werden. Hier: 16 Zeichen in 2 Zeilen.

}


void loop() 

{

lcd.setCursor(0, 0); //Startposition der Darstellung auf dem LCD festlegen. lcd.setCursor(0,0) bedeutet: Erstes Zeichen in der ersten Zeile.

lcd.print("Turbo"); //Dort soll der Text „www.funduino.de“ erscheinen. Der Befehl lcd.setCursor ist dem Mikrocontrollerboard durch das Aufrufen der Bibliothek bekannt.

lcd.setCursor(0, 1); // lcd.setCursor(0,1) bedeutet: Erstes Zeichen in der zweiten Zeile.

lcd.print("[Ein] [Aus]"); //Dort soll dann der Text „Viel Erfolg!!!“ auftauchen.

}

Könnt ihr uns bitte helfen ?:slight_smile:

Setze Deinen Sketch bitte in Codetags (</>-Button oben links im Forumseditor), entferne die unnötigen Leerzeilen und formatiere ihn ordentlich (+T in der IDE).

Dann ist er für alle beteiligten besser lesbar.

Gruß Tommy

Allerding bekommen wir die Programme einfach nicht zusammen

Da musst du schon (mindestens) erzählen, warum das nicht geht, und zeigen, was du versucht hast.

Kaumeiner baut hier dein Programm nach, repariert es und schickt euch die richtige Version.
Also müsstest du auch Fehlermeldungen, die du nicht verstehst oder beheben kannst, hierher kopieren.

"Es geht nicht" ist keine Fehlerbeschreibung.

#1: (aber nur aufgehübscht, #define durch const byte ersetzt, int zu boolean gemacht u.Ä.)

const byte Blink_R = 6;      //Blinkerlampe rechts am Port 6
const byte S_Blink_R = 8;    //Schalter vom Blinker rechts am Port 8
const byte Blink_L = 7;      //Blinkerlampe Links am Port 7
const byte S_Blink_L = 9;    //Schlter vom Blinker Links am Port 9
const byte Ruecklicht_R = 4; //Rücklicht Rechts am Port 4
const byte Ruecklicht_L = 5; //Rücklicht Links am Port 5
const byte S_Fahrlicht = 10; //Schalter vom Fahrlicht am Port 10
const byte Bremslicht_L = 2; //Bremslicht Links am Port 2
const byte Bremslicht_R = 11; //Bremslicht Rechts am Port 11
const byte S_Bremslicht = 3; //Schalter vom Bremslicht am Port 3

boolean blinkStatus = LOW;       //Blink-Status auf "aus"
boolean BlinkerRStatus = LOW;    //Blinker-Status- Speicher 1 auf "aus"
boolean BlinkerLStatus = LOW;    //Blinker-Status-Speicher 1 auf "aus"
boolean FahrlichtStatus = LOW; //Standlicht-Status auf "aus"
boolean BremslichtStatus = LOW; // Fahrtlicht-Status auf "aus"

unsigned long zurueckZeit = 0;   //32 Bit-Speicherplatz für die zurückliegende Zeit
unsigned long aktuelleZeit = 0;  //32 Bit-Speicherplatz für die Zeit nach dem Einschalten
const long blinkintervall = 555; //32 Bit-Speicherplatz für den Blink-Intervall-Konstante

void setup()
{
  pinMode(Blink_R, OUTPUT);        //Blinkerlampenport recht auf Ausgabe schalten
  pinMode(Blink_L, OUTPUT);        //Blinkerlampenport links auf Ausgabe schalten
  pinMode(Ruecklicht_R, OUTPUT);   //Rücklicht links-Port auf Ausgabe schalten
  pinMode(Ruecklicht_L, OUTPUT);   //Rücklicht links-Port auf Ausgabe schalten
  pinMode(Bremslicht_L, OUTPUT);   //Bremslicht-links-Port auf Ausgabe schalten
  pinMode(Bremslicht_R, OUTPUT);   //Bremslicht-links-Port auf Ausgabe schalten
  pinMode(S_Fahrlicht, INPUT_PULLUP);  //Port für den Fahrtrichtungsschalter auf Eingabe mit Pullup-Wiederstand Schalten
  pinMode(S_Blink_R, INPUT_PULLUP);    //Port für den Blinkschalter-rechts auf Eingabe mit Pullup-Wiederstand schalten
  pinMode(S_Blink_L, INPUT_PULLUP);    //Port für den Blinkerschalter-links auf Eingabe mit Pullup-Wiederstand schalter
  pinMode(S_Bremslicht, INPUT_PULLUP); //Port für den Bremslichtschalter auf Eingabe mit Pullup-Wiederstand schalten
}

void loop()
{
  aktuelleZeit = millis();
  if (aktuelleZeit - zurueckZeit >= blinkintervall)
  {
    zurueckZeit = aktuelleZeit;
    if (blinkStatus == LOW)
    {
      blinkStatus = HIGH;
    } else {
      blinkStatus = LOW;
    }
  }
  BlinkerRStatus = digitalRead(S_Blink_R);
  if (BlinkerRStatus == LOW)
  {
    digitalWrite(Blink_R, blinkStatus);
  } else {
    digitalWrite(Blink_R, LOW);
  }
  BlinkerLStatus = digitalRead(S_Blink_L);
  if (BlinkerLStatus == LOW)
  {
    digitalWrite(Blink_L, blinkStatus);
  } else {
    digitalWrite(Blink_L, LOW);
  }
  FahrlichtStatus = digitalRead(S_Fahrlicht);
  if (FahrlichtStatus == LOW)
  {
    digitalWrite(Ruecklicht_L, HIGH);
    digitalWrite(Ruecklicht_R, HIGH);
  } else {
    digitalWrite(Ruecklicht_L, LOW);
    digitalWrite(Ruecklicht_R, LOW);
  }
  BremslichtStatus = digitalRead(S_Bremslicht);
  if (BremslichtStatus == LOW)
  {
    digitalWrite(Bremslicht_L, HIGH);
    digitalWrite(Bremslicht_R, HIGH);
  } else {
    digitalWrite(Bremslicht_L, LOW);
    digitalWrite(Bremslicht_R, LOW);
  }
}

#2: (Kommentare bereinigt)

#include <LiquidCrystal> //LCD-Bibliothek laden

LiquidCrystal lcd(34, 32, 30, 28, 26, 24); //In dieser Zeile wird festgelegt, welche Pins des Mikrocontrollerboards für das LCD verwendet wird (Am besten erstmal nicht verändern).

void setup()
{
  lcd.begin(16, 2); //Im Setup wird angegeben, wie viele Zeichen und Zeilen verwendet werden. Hier: 16 Zeichen in 2 Zeilen.
}

void loop()
{
  lcd.setCursor(0, 0); //Startposition der Darstellung auf dem LCD festlegen. lcd.setCursor(0,0) bedeutet: Erstes Zeichen in der ersten Zeile.
  lcd.print("Turbo"); //Dort soll der Text erscheinen. Der Befehl lcd.setCursor ist dem Mikrocontrollerboard durch das Aufrufen der Bibliothek bekannt.
  lcd.setCursor(0, 1); // lcd.setCursor(0,1) bedeutet: Erstes Zeichen in der zweiten Zeile.
  lcd.print("[Ein] [Aus]"); //Dort soll dann der Text auftauchen.
}

So, worin besteht nun das Problem?
Wenn z.B. angemeckert wird, daß 'setup()' öfter vor kommt - ja, soll's nicht - die Zeilen beider setup()-Blöcke kommen zusammen.
Gleiches bei loop()?
Auch hier: Beide Inhalte in EINE Loop kopieren.

Damit der Kram 'nebeneinander' laufen kann, muß man blockierenden Code vermeiden, delay() ist ein gute Beispiel, wie's nicht klappt.
Auch darf man nicht auf einen Tastendruck oder Ähnliches warten - wenn die Taste gedrückt ist, diese Info 'mitnehmen', sonst eben nicht.
Mit dieser Info kannst Du dann entscheiden, ob irgend ein Code ausgeführt wird - im Endeffekt machst Du Etwas, wenn die Taste gedrückt wird - aber hier wartest Du nicht darauf, daß endlich der Taster betätigt wird, wodurch das restliche Programm weiter arbeiten kann.

Aber erst Mal genug - sollte ich Dir noch nicht geholfen haben, wäre eine Beschreibung Deines Broblem und Deines Lösungsansatz interessant.

MfG