Vorhandenes Programm erweitern, Arduino Nano

Hallo zusammen,

ich bin neuhier im Forum, habe mich aber schon mehr oder weniger mit dem Arduino nano beschäftigt und in Nutzung.

Mein Projekt ist zur Zeit eine Lenkradabdeckung für ein Rennauto. Darauf sind einige Taster für verschiedene Funktionen die auch fast problemlos funktionieren.

  1. Funktion = TasterFlash (lässt das Fernlicht 5 mal blinken ) ist i.O.

  2. Funktion = TasterTimer lässt das Fernlicht in einem speziellen Rhythmus blinken (Warnlicht in der Boxengasse)und startet den externen Timer für die Boxenstoppstandzeit auf dem Lenkrad. ist i.O.

  3. Funktion soll mit Taster X ein Relais antasten, es soll so lange angezogen bleiben bis man wieder Taster X drückt. Dann soll es abfallen. Quasi ein Stromstoßrelais-Funktion.

Taster soll auf D4 und das Relais auf D9 liegen.

Kann mir jemand helfen ? Das ist bestimmt nicht schwer. Aber wenn man weiß wie es geht ist es immer einfach..... :slight_smile:

Gruß Micha

hier mal mein sketch bisher:

int Relais=7;
int RelaisTimer=8;
int taster1=2; // Taster Flash
int taster2=3; // Taster Timer
int tasterstatus1=0;
int tasterstatus2=0;

void setup()
  
   {
   pinMode(Relais, OUTPUT);
   pinMode(RelaisTimer, OUTPUT);
   pinMode(taster1, INPUT);
   pinMode(taster2, INPUT);
   }

void loop()
{
tasterstatus1=digitalRead(taster1);

if (tasterstatus1 == HIGH)
   {
  digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (150);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (150);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (150);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (150);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (150);
   }

else

   {
   digitalWrite(Relais, LOW); 
   }
   

tasterstatus2=digitalRead(taster2);

if (tasterstatus2 == HIGH)
   
   {
    digitalWrite(RelaisTimer,HIGH);
    delay (300);
    digitalWrite(RelaisTimer,LOW);
     
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (350);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (350);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (350);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (350);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (350);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (350);    
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (350);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (350);
digitalWrite(Relais, HIGH);
delay (150);    
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (350);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (350);    
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (350);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (350);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (350);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (350);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (350);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (350);    
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (350);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (350);
digitalWrite(Relais, HIGH);
delay (150);    
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (350);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (350);    
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (350);
digitalWrite(Relais, HIGH);
delay (150);    
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (350);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);  
delay (350);  
digitalWrite(Relais, HIGH);
delay (150);    
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (350);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);
delay (100);
digitalWrite(Relais, HIGH);
delay (150);
digitalWrite(Relais, LOW);  
delay (350);     
   }   

else

   {
   digitalWrite(Relais, LOW); 
   }
}

Dein Bandwurmsketch ist fast nicht zu lesen. In einem Mobilgerät überhaupt nicht.
Setze den bitte in Code-Tags.

Verwende dazu die Schaltfläche </> oben links im Editorfenster.
Das kannst du auch nachträglich machen.
Dazu den Sketch markieren und die Schaltfläche klicken, oder [code] davor und [/code] dahinter ohne *.

Damit wird dieser für alle besser lesbar.

Und die vielen delays in dem macht eine Erweiterung unmöglich.

Da solltest du aufräumen und diese durch die Funktion millis() ersetzen, ganz nach dem Beispiel BlinkWithoutDelay.

Hallo Micha,

editiere bitte Beitrag #0 und packe Dein Programm in Code-Tags. Lies dazu bitte How to use this forum - please read..

micha2109:
… habe mich aber schon mehr oder weniger mit dem Arduino nano beschäftigt und in Nutzung.

Da möchte ich mal nach einem Blick auf Dein Programm die Betonung auf “weniger” legen.

In der IDE empfehle ich Dir die automatische Formatierung.

Schleifen machen Dein Programm kürzer und übersichtlicher:

  if (tasterstatus2 == HIGH)

  {
    digitalWrite(RelaisTimer, HIGH);
    delay (300);
    digitalWrite(RelaisTimer, LOW);

    for (byte j = 0; j < 25) {
      digitalWrite(Relais, HIGH);
      delay (150);
      digitalWrite(Relais, LOW);
      delay (100);
      digitalWrite(Relais, HIGH);
      delay (150);
      digitalWrite(Relais, LOW);
      delay (350);
    }
  }
  else
  {
    digitalWrite(Relais, LOW);
  }

Die Verwendung der richtigen Variablentypen und die Unterscheidung von Konstanten und Variablen vereinfacht den Durchblick.

Zeiten solltest Du anstelle von delay mittels millis abarbeiten.

Hallo Micha2109,

Wilkommen im Forum .

Leider muss ich Dir mitteilen das das so nichts wird. Du hast in Deinem Sketck jedem Menge delay() verarbeitet. Damit kannst Du den Tasterfür das Relais nur abfragen wenn nicht gerade in einem If Teil hängst.
Bei delay macht der Nano eine Pause und wartete bis die Zeit abgelaufen ist. So kann das Relais nur anziehen wenn gerade nichts blinkt.

Du musst deine Zeiten durch millis() ersetzen. Schau Dir das Beispiel BlinkWithoutDelay an und suche nach dem Nachtwächter um es zu verstehen.

wenn Du den Taster auf D4 anschliessen willst dann ist das im Sketch als Pin einfach 4 geiches gilt für das Relais einfach 9

byte pinRelay=9;
byte pinTaster=4;