Eingänge über PC auslesen, langer kurzer Tastendruck

Hallo,
ich bin Arduino Neuling,
und habe mir ein Starter Set gekauft und etwas gespielt, da ich ein Projekt am Laufen habe, bei welchem ich eine Steuerung mit einigen Aus und Eingängen habe.

Ich bin ein 20 jähriger Elektriker und habe meine Projekte bis jetzt mit Loxone, bzw Eaton Easy gelöst,
diese beiden Programme zeigen relativ einfach die Zustände der Aus- und Eingänge an.
Gibt es für den Arduino ein Programm am Laptop oder so, welches mir zeigt welcher Ausgang LOW bzw HIGH ist, und bei den Analogen Eingängen welchen Wert die haben.

Wenn ich schon Schreibe, hätte ich noch eine zweite frage, die ich mir stelle, und zwar wie ich mit einer Folienaster Matrix einen Ausgang auf HIGH Schalte und bei erneutem drücken wieder auf Low.
Diese Funktion bräuchte ich auch mit einem langen (ca 3sek) drücken ein und kurz drücken wieder aus.

Der Code den ich jetzt verwende zum ein und Ausschalten:

{
    switch (key)
    {
      case 'C':
        digitalWrite(Kuehlung, HIGH);
        break;
      case 'D':
        {digitalWrite(Kuehlung, LOW);
        break;
      default:
        Serial.println(key);
    }
  }
  }

Mfg Manuel

Processing (auf PC) und Firmata auf (Arduino)?

Die Variablen cGedrueckt und dGedrueckt sind bool.

  if (key == 'C')                                         // Taste gedrückt?
  {
    if (!cGedrueckt)                                      // vorher nicht gedrueckt?
    {
      cGedrueckt = true;                                  // merken
      { digitalWrite(kuehlung, !digitalRead(kuehlung)); } // schaltet mit jedem Tastendruck um
    }
  }
  else                                                    // Taste losgelassen?
  {
    cGedrueckt = false;                                   // Merker löschen
  }
  //
  if (key == 'D')                                         // Taste gedrückt?
  {
    if (!dGedrueckt)                                      // vorher nicht gedrückt?
    {
      dGedrueckt = true;                                  // merken, das
      startZeit = millis();                               // merken, wann gedrückt
    }
  }
  else if (dGedrueckt)                                    // Taste losgelassen und vorher gedrückt?
  {
    if (millis() - startZeit > 3000)                      // Drückzeit feststellen
    {
      digitalWrite(heizung, HIGH);                        // Wenn lang
    }
    else
    {
      (digitalWrite(heizung, LOW);                        // wenn kürzer
    }
    dGedrueckt = false;                                   // Merker löschen
  }

Vielen dank, nur zeigt es mir an, dass "startZeit" nicht deklariert ist, sprich als was muss die deklariert werden? Im Netz habe ich auch nichts gefunden.

wie funktioniert das genau, oder gibt es dafür eine Anleitung im Forum?

Hm.. startZeit nimmt millis() auf, daher muss die Variable wenigstens so gestellt sein, das millis() reinpassen.
Da millis() eine Größe von 4.294.967.295 erreichen kann, ist der Datentyp mindest unsigned long.

okay und was muss ich genau reinschreiben, ich schätze mal am Anfang, wo ich auch die bool's geschrieben habe
´´´
bool cGedrueckt = false;
bool dGedrueckt = false;
´´´

wie wäre es mit

unsigned long startZeit;

Alternativ auch

uint32_t startZeit;

Und solltest Du C und D im Wechsel drücken, dann brauchst Du sowohl für cGedrueckt als auch dGedrueckt eine zugeordnete startZeit-Variable.
z.B. cStartZeit / dStartZeit

1 Like

Danke, das ausschalten funktioniert, aber das einschalten leider nicht.

Was hälst Du davon, einfach mal zu zeigen, was Du hast?
Ich weiss nicht, wie dein Code aussieht und meine Glaskugel ist zur Reinigung.

#include <Keypad.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(23, 25, 27, 29, 31, 33);


const int Nuss1  = 2; // Pumpe1
const int Nuss2  = 3; // Pumpe2
const int Nuss3  = 4; // Pumpe3
const int Nuss4  = 5; // Pumpe4
const int Nuss5  = 6; // Pumpe5
const int Nuss6  = 7; // Pumpe6
const int Nuss7  = 8; // Pumpe7
const int Nuss8  = 9; // Pumpe8
const int Nuss9  = 10; // Pumpe9
const int Nuss10  = 11; // Pumpe10
const int Umwalz = A4; //Pumpe auf Verteiler
int TVerteiler = A2; //Fühler auf Verteiler
const int Kuehlung = 22; //Kühlung
const int Licht = 24;  //Relais Licht
const int RE3 = 26;  //reserve Relais
const int RE5 = 28;  //reserve Relais
const int LED = A3; //LED Lüfter
const int Schwimmer = 30; //Tank Leer
const int Tank = 32; //kein Tank
int TSumpf = A0; //Fühler Kühlsumpf
int LSumpf = 12; //Lüfter Leisungsvernichtung
int WerteSumpf; //Ein Aus Lüfter
int DrehzSumpf; //Ein Aus Lüfter
int TKond = A1; //Fühler Kühlsumpf
int LKond = 13; //Lüfter Kondensator
int WerteKond; //Ein Aus Lüfter
int DrehzKond; //Ein Aus Lüfter
const byte ROWS = 4; // 4Reihen
const byte COLS = 4; // 4Spalten



// Nummerschild Definieren
char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'#', '0', '*', 'D'}
};
// Anschlusspins Reihe
byte rowPins[ROWS] = { 49, 47, 45, 43 };
// Anschlusspins Spalte
byte colPins[COLS] = { 41, 39, 37, 35 };

// Create the Keypad
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

bool geschaltet = false;
bool aGedrueckt = false;
bool bGedrueckt = false;
bool cGedrueckt = false;
bool dGedrueckt = false;
unsigned long startZeit;
int empfindlichkeit = 200;

void setup()
{
  pinMode(Nuss1, OUTPUT); // Pumpe an
  analogWrite(Nuss1, LOW); //Pumpe aus
  pinMode(Nuss2, OUTPUT); // Pumpe an
  analogWrite(Nuss2, LOW); // Pumpe aus
  pinMode(Nuss3, OUTPUT); // Pumpe an
  analogWrite(Nuss3, LOW); // Pumpe aus
  pinMode(Nuss4, OUTPUT); // Pumpe an
  analogWrite(Nuss4, LOW); // Pumpe aus
  pinMode(Nuss5, OUTPUT); // Pumpe an
  analogWrite(Nuss5, LOW); // Pumpe aus
  pinMode(Nuss6, OUTPUT); // Pumpe an
  analogWrite(Nuss6, LOW); // Pumpe aus
  pinMode(Nuss7, OUTPUT); // Pumpe an
  analogWrite(Nuss7, LOW); // Pumpe aus
  pinMode(Nuss8, OUTPUT); // Pumpe an
  analogWrite(Nuss8, LOW); // Pumpe aus
  pinMode(Nuss9, OUTPUT); // Pumpe an
  analogWrite(Nuss9, LOW); // Pumpe aus
  pinMode(Nuss10, OUTPUT); // Pumpe an
  analogWrite(Nuss10, LOW); // Pumpe aus
  pinMode(Umwalz, OUTPUT); // Pumpe auf Verteiler aus
  digitalWrite(Umwalz, HIGH); // Pumpe auf Verteiler aus beim Starten
  pinMode(Kuehlung, OUTPUT); // Kühlung
  digitalWrite(Kuehlung, HIGH); // Kühlung an bei Start
  pinMode(Licht, OUTPUT); //Relais Licht
  digitalWrite(Licht, HIGH); //Licht an
  pinMode(LED, OUTPUT); //LED Lüfter
  digitalWrite(LED, HIGH); //LED Lüfter AN
  pinMode(Schwimmer, INPUT_PULLUP); // Schwimmer = Schalter
  pinMode(Tank, INPUT_PULLUP); // Tank kontakt = Schalter
  pinMode(TSumpf, INPUT); // Fühler = Analoger Eingang
  pinMode(LSumpf, OUTPUT); // Lüfter Sumpf = Ausgang
  pinMode(TKond, INPUT); // Fühler = Analoger Eingang
  pinMode(LKond, OUTPUT); // Lüfter Kondensator = Ausgang
  pinMode(Umwalz, OUTPUT); // Pumpe auf Verteiler aus
  digitalWrite(Umwalz, HIGH); // Pumpe auf Verteiler aus beim Starten
  delay(2000); //Zeit für Umwalzen
  digitalWrite(Umwalz, LOW); //Umwälzpume aus
  lcd.begin(16, 2);

  Serial.begin(9600);
}

void loop()
{
  char key = kpd.getKey();
  if (key)
  {
    switch (key)
    {
      case '1':
      if (digitalRead(Schwimmer) == HIGH)
      {
        analogWrite(Nuss1, 255);
        lcd.setCursor(0, 0);
        lcd.print("ein Schnaps");
        lcd.setCursor(0, 1);
        lcd.print("kommt sofort");
        delay(2000);
        lcd.clear();
        analogWrite(Nuss1, 0);
    }
    }
  }


  {
    switch (key)
    {
      case '2':
      if (digitalRead(Schwimmer) == HIGH)
      {
        analogWrite(Nuss1, 255);
        analogWrite(Nuss2, 255);
         lcd.setCursor(0, 0);
        lcd.print("ein Schnaps");
        lcd.setCursor(0, 1);
        lcd.print("kommt sofort");
        delay(2000);
        lcd.clear();
        analogWrite(Nuss1, 0);
        analogWrite(Nuss2, 0);
    }
    }
  }

  {
    switch (key)
    {
      case '3':
      if (digitalRead(Schwimmer) == HIGH)
      {
        analogWrite(Nuss1, 255);
        analogWrite(Nuss2, 255);
        analogWrite(Nuss3, 255);
         lcd.setCursor(0, 0);
        lcd.print("ein Schnaps");
        lcd.setCursor(0, 1);
        lcd.print("kommt sofort");
        delay(2000);
        lcd.clear();
        analogWrite(Nuss1, 0);
        analogWrite(Nuss2, 0);
        analogWrite(Nuss3, 0);
    }
    }
  }

  {
    switch (key)
    {
      case '4':
      if (digitalRead(Schwimmer) == HIGH)
      {
        analogWrite(Nuss1, 255);
        analogWrite(Nuss2, 255);
        analogWrite(Nuss3, 255);
        analogWrite(Nuss4, 255);
         lcd.setCursor(0, 0);
        lcd.print("ein Schnaps");
        lcd.setCursor(0, 1);
        lcd.print("kommt sofort");
        delay(2000);
        lcd.clear();
        analogWrite(Nuss1, 0);
        analogWrite(Nuss2, 0);
        analogWrite(Nuss3, 0);
        analogWrite(Nuss4, 0);
    }
    }
  }

  {
    switch (key)
    {
      case '5':
      if (digitalRead(Schwimmer) == HIGH)
      {
        analogWrite(Nuss1, 255);
        analogWrite(Nuss2, 255);
        analogWrite(Nuss3, 255);
        analogWrite(Nuss4, 255);
        analogWrite(Nuss5, 255);
         lcd.setCursor(0, 0);
        lcd.print("ein Schnaps");
        lcd.setCursor(0, 1);
        lcd.print("kommt sofort");
        delay(2000);
        lcd.clear();
        analogWrite(Nuss1, 0);
        analogWrite(Nuss2, 0);
        analogWrite(Nuss3, 0);
        analogWrite(Nuss4, 0);
        analogWrite(Nuss5, 0);
    }
    }
  }

  {
    switch (key)
    {
      case '6':
      if (digitalRead(Schwimmer) == HIGH)
      {
        analogWrite(Nuss1, 255);
        analogWrite(Nuss2, 255);
        analogWrite(Nuss3, 255);
        analogWrite(Nuss4, 255);
        analogWrite(Nuss5, 255);
        analogWrite(Nuss6, 255);
         lcd.setCursor(0, 0);
        lcd.print("ein Schnaps");
        lcd.setCursor(0, 1);
        lcd.print("kommt sofort");
        delay(2000);
        lcd.clear();
        analogWrite(Nuss1, 0);
        analogWrite(Nuss2, 0);
        analogWrite(Nuss3, 0);
        analogWrite(Nuss4, 0);
        analogWrite(Nuss5, 0);
        analogWrite(Nuss6, 0);
    }
    }
  }

  {
    switch (key)
    {
      case '7':
      if (digitalRead(Schwimmer) == HIGH)
      {
        analogWrite(Nuss1, 255);
        analogWrite(Nuss2, 255);
        analogWrite(Nuss3, 255);
        analogWrite(Nuss4, 255);
        analogWrite(Nuss5, 255);
        analogWrite(Nuss6, 255);
        analogWrite(Nuss7, 255);
         lcd.setCursor(0, 0);
        lcd.print("ein Schnaps");
        lcd.setCursor(0, 1);
        lcd.print("kommt sofort");
        delay(2000);
        lcd.clear();
        analogWrite(Nuss1, 0);
        analogWrite(Nuss2, 0);
        analogWrite(Nuss3, 0);
        analogWrite(Nuss4, 0);
        analogWrite(Nuss5, 0);
        analogWrite(Nuss6, 0);
        analogWrite(Nuss7, 0);
    }
    }
  }

  {
    switch (key)
    {
      case '8':
      if (digitalRead(Schwimmer) == HIGH)
      {
        analogWrite(Nuss1, 255);
        analogWrite(Nuss2, 255);
        analogWrite(Nuss3, 255);
        analogWrite(Nuss4, 255);
        analogWrite(Nuss5, 255);
        analogWrite(Nuss6, 255);
        analogWrite(Nuss7, 255);
        analogWrite(Nuss8, 255);
         lcd.setCursor(0, 0);
        lcd.print("ein Schnaps");
        lcd.setCursor(0, 1);
        lcd.print("kommt sofort");
        delay(2000);
        lcd.clear();
        analogWrite(Nuss1, 0);
        analogWrite(Nuss2, 0);
        analogWrite(Nuss3, 0);
        analogWrite(Nuss4, 0);
        analogWrite(Nuss5, 0);
        analogWrite(Nuss6, 0);
        analogWrite(Nuss7, 0);
        analogWrite(Nuss8, 0);
    }
    }
  }

  {
    switch (key)
    {
      case '9':
      if (digitalRead(Schwimmer) == HIGH)
      {
        analogWrite(Nuss1, 255);
        analogWrite(Nuss2, 255);
        analogWrite(Nuss3, 255);
        analogWrite(Nuss4, 255);
        analogWrite(Nuss5, 255);
        analogWrite(Nuss6, 255);
        analogWrite(Nuss7, 255);
        analogWrite(Nuss8, 255);
        analogWrite(Nuss9, 255);
         lcd.setCursor(0, 0);
        lcd.print("ein Schnaps");
        lcd.setCursor(0, 1);
        lcd.print("kommt sofort");
        delay(2000);
        lcd.clear();
        analogWrite(Nuss1, 0);
        analogWrite(Nuss2, 0);
        analogWrite(Nuss3, 0);
        analogWrite(Nuss4, 0);
        analogWrite(Nuss5, 0);
        analogWrite(Nuss6, 0);
        analogWrite(Nuss7, 0);
        analogWrite(Nuss8, 0);
        analogWrite(Nuss9, 0);
    }
    }
  }

  {
    switch (key)
    {
      case '0':
      if (digitalRead(Schwimmer) == HIGH)
      {
        analogWrite(Nuss1, 255);
        analogWrite(Nuss2, 255);
        analogWrite(Nuss3, 255);
        analogWrite(Nuss4, 255);
        analogWrite(Nuss5, 255);
        analogWrite(Nuss6, 255);
        analogWrite(Nuss7, 255);
        analogWrite(Nuss8, 255);
        analogWrite(Nuss9, 255);
        analogWrite(Nuss10, 255);
         lcd.setCursor(0, 0);
        lcd.print("ein Schnaps");
        lcd.setCursor(0, 1);
        lcd.print("kommt sofort");
        delay(2000);
        lcd.clear();
        analogWrite(Nuss1, 0);
        analogWrite(Nuss2, 0);
        analogWrite(Nuss3, 0);
        analogWrite(Nuss4, 0);
        analogWrite(Nuss5, 0);
        analogWrite(Nuss6, 0);
        analogWrite(Nuss7, 0);
        analogWrite(Nuss8, 0);
        analogWrite(Nuss9, 0);
        analogWrite(Nuss10, 0);
    }
    }
  }
      
    {
    WerteSumpf = analogRead(TSumpf);
    if(WerteSumpf >1023) { //Temp Lüfter100%
      WerteSumpf = 1023;   //Temp Lüfter100%
    } 
    DrehzSumpf = map(WerteSumpf, 0, 1023, 255, 0);
    //Temp Lüfter bei Start, Temp Lüfter100%,max 1023
    //Drehzahl Lüfter bei Start, Drehzahl Lüfter 100% max255
    if(WerteSumpf <0) {    //Temp Lüfter0%
      DrehzSumpf = 0; //unter oberen wert diesen wert 0%
    }
    analogWrite(LSumpf, DrehzSumpf);
    }


    {
    WerteKond = analogRead(TKond);
    if(WerteKond >1023) { //Temp Lüfter100%
      WerteKond = 1023;   //Temp Lüfter100%
    } 
    DrehzKond = map(WerteKond, 1023, 0, 255, 0
    
    );
    //Temp Lüfter bei Start, Temp Lüfter100%,max 1023
    //Drehzahl Lüfter bei Start, Drehzahl Lüfter 100% max255
    if(WerteKond <0) {    //Temp Lüfter0%
      DrehzKond = 0; //unter oberen wert diesen wert 0%
    }
    analogWrite(LKond, DrehzKond);
    }
    
    {
    if (digitalRead(Schwimmer) == LOW)
    {lcd.setCursor(0, 0);
    lcd.print("Tank Leer");}
    else
    {lcd.setCursor(0, 0);
    lcd.print("         ");}
    }

    {
    if (digitalRead(Tank) == HIGH)
    {lcd.setCursor(0, 1);
    lcd.print("kein Tank");}
    else
    {lcd.setCursor(0, 1);
    lcd.print("         ");}
    }

    {if (digitalRead(Kuehlung) == HIGH)
    {lcd.setCursor(15, 0);
    lcd.print("*");}
    else
     {lcd.setCursor(15, 0);
    lcd.print(" ");}
    }


  if (key == 'A')                                         // Taste gedrückt?
  {
    if (!aGedrueckt)                                      // vorher nicht gedrueckt?
    {
      aGedrueckt = true;                                  // merken
      { digitalWrite(Licht, !digitalRead(Licht)); }
      { digitalWrite(LED, !digitalRead(LED)); }
    }
  }
  else                                                    // Taste losgelassen?
  {
    aGedrueckt = false;                                   // Merker löschen
  }

if (key == 'B')                                         // Taste gedrückt?
  {
    if (!bGedrueckt)                                      // vorher nicht gedrueckt?
    {
      bGedrueckt = true;                                  // merken
      { digitalWrite(Umwalz, !digitalRead(Umwalz)); }
    }
  }
  else                                                    // Taste losgelassen?
  {
    bGedrueckt = false;                                   // Merker löschen
  }

  
  {
  if (key == 'C')                                         // Taste gedrückt?
  {
    if (!cGedrueckt)                                      // vorher nicht gedrueckt?
    {
      cGedrueckt = true;                                  // merken
      { digitalWrite(Kuehlung, !digitalRead(Kuehlung)); }  // schaltet mit jedem Tastendruck um
    }
  }
  else                                                    // Taste losgelassen?
  {
    cGedrueckt = false;                                   // Merker löschen
  }
  }

    {if (analogRead(TVerteiler) >500) //0-1023 einschaltwert
    {digitalWrite(Umwalz, LOW);}
    if (analogRead(TVerteiler) <400) //0-1023 ausschaltwert
    {digitalWrite(Umwalz, HIGH);}
    }

    
{if (digitalRead(Umwalz) == HIGH)
    {lcd.setCursor(14, 0);
    lcd.print("u");}
    else
   {lcd.setCursor(14, 0);
    lcd.print(" ");}
    }
  
 if (key == 'D')                                         // Taste gedrückt?
  {
    if (!dGedrueckt)                                      // vorher nicht gedrückt?
    {
      dGedrueckt = true;                                  // merken, das
      startZeit = millis();                               // merken, wann gedrückt
    }
  }
  else if (dGedrueckt)                                    // Taste losgelassen und vorher gedrückt?
  {
    if (millis() - startZeit > 3000)                      // Drückzeit feststellen
    {
      digitalWrite(Umwalz, HIGH);                        // Wenn lang
    }
    else
    {
      digitalWrite(Umwalz, LOW);                        // wenn kürzer
    }
    dGedrueckt = false;                                   // Merker löschen
  }

    
}

Umwalz soll am Anfang für 2 sek laufen,
dann mit einem Fühler auf pin A2 ab einer gewissen Temperatur laufen
und mit Taste D mit einem Langen druck gemeinsam mit Allen Pumpen laufen
und mit Taste B ein und aus geschaltet werden

Die ganze Anlage dient zum herunterlassen vom Nussschnaps für 1-10 Stamperl

Wenn Du die lib benutzt, dann schau in das Beispiel DynamikKeypad. Da ist alles drin, was Du brauchst.

[Nachtrag]
Ich hab das switch/case mal aufgelöst.
Alles was danach kommt weggelassen, aber mal auf die Schnelle das als Array gelöst.

#include <Keypad.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(23, 25, 27, 29, 31, 33);

const byte numNuss = 10;
const byte nuss[numNuss] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
const int Umwalz = A4; //Pumpe auf Verteiler
int TVerteiler = A2; //Fühler auf Verteiler
const int Kuehlung = 22; //Kühlung
const int Licht = 24;  //Relais Licht
const int RE3 = 26;  //reserve Relais
const int RE5 = 28;  //reserve Relais
const int LED = A3; //LED Lüfter
const int Schwimmer = 30; //Tank Leer
const int Tank = 32; //kein Tank
int TSumpf = A0; //Fühler Kühlsumpf
int LSumpf = 12; //Lüfter Leisungsvernichtung
int WerteSumpf; //Ein Aus Lüfter
int DrehzSumpf; //Ein Aus Lüfter
int TKond = A1; //Fühler Kühlsumpf
int LKond = 13; //Lüfter Kondensator
int WerteKond; //Ein Aus Lüfter
int DrehzKond; //Ein Aus Lüfter
const byte ROWS = 4; // 4Reihen
const byte COLS = 4; // 4Spalten



// Nummerschild Definieren
char keys[ROWS][COLS] =
{
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'#', '0', '*', 'D'}
};
// Anschlusspins Reihe
byte rowPins[ROWS] = { 49, 47, 45, 43 };
// Anschlusspins Spalte
byte colPins[COLS] = { 41, 39, 37, 35 };

// Create the Keypad
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

bool geschaltet = false;
bool aGedrueckt = false;
bool bGedrueckt = false;
bool cGedrueckt = false;
bool dGedrueckt = false;
unsigned long startZeit;
int empfindlichkeit = 200;

void setup()
{
  for (byte b = 0; b < numNuss; b++)
  {
    digitalWrite(nuss[b], LOW);
    pinMode(nuss[b], OUTPUT);
  }
  pinMode(Umwalz, OUTPUT); // Pumpe auf Verteiler aus
  digitalWrite(Umwalz, HIGH); // Pumpe auf Verteiler aus beim Starten
  pinMode(Kuehlung, OUTPUT); // Kühlung
  digitalWrite(Kuehlung, HIGH); // Kühlung an bei Start
  pinMode(Licht, OUTPUT); //Relais Licht
  digitalWrite(Licht, HIGH); //Licht an
  pinMode(LED, OUTPUT); //LED Lüfter
  digitalWrite(LED, HIGH); //LED Lüfter AN
  pinMode(Schwimmer, INPUT_PULLUP); // Schwimmer = Schalter
  pinMode(Tank, INPUT_PULLUP); // Tank kontakt = Schalter
  pinMode(TSumpf, INPUT); // Fühler = Analoger Eingang
  pinMode(LSumpf, OUTPUT); // Lüfter Sumpf = Ausgang
  pinMode(TKond, INPUT); // Fühler = Analoger Eingang
  pinMode(LKond, OUTPUT); // Lüfter Kondensator = Ausgang
  pinMode(Umwalz, OUTPUT); // Pumpe auf Verteiler aus
  digitalWrite(Umwalz, HIGH); // Pumpe auf Verteiler aus beim Starten
  delay(2000); //Zeit für Umwalzen
  digitalWrite(Umwalz, LOW); //Umwälzpume aus
  lcd.begin(16, 2);
  Serial.begin(9600);
}

void loop()
{
  char key = kpd.getKey();
  if (key)
  {
    byte anzahl = 0;
    if (key == '0')
    {
      anzahl = 10;
    }
    else if (isDigit(key))
    { anzahl = key - '0'; }
    if (digitalRead(Schwimmer) == HIGH)
    {
      lcd.setCursor(0, 0);
      lcd.print(anzahl);
      lcd.print(F(" Schnaps"));
      lcd.setCursor(0, 1);
      lcd.print(F("kommt sofort"));
      for (byte b = 0; b < anzahl; b++)
      {
        analogWrite(nuss[b], HIGH);
      }
      delay(2000);
      for (byte b = 0; b < anzahl; b++)
      {
        analogWrite(nuss[b], LOW);
      }
      lcd.clear();
    }
  }
}

Bitte beachte oben die Variable nuss und wie das z.B. im setup aussieht.

also zunächst würde ich da den Code eher ein wenig zusammenräumen.

du hast da 10 switch case konstrukte. Wozu? normalerweise macht man einen switch und stellt darunter mehrere cases dar.

    switch (key)
    {
      case '0':
        if (digitalRead(Schwimmer) == HIGH)
        {
          analogWrite(Nuss1, 255);
          analogWrite(Nuss2, 255);
          analogWrite(Nuss3, 255);
          analogWrite(Nuss4, 255);
          analogWrite(Nuss5, 255);
          analogWrite(Nuss6, 255);
          analogWrite(Nuss7, 255);
          analogWrite(Nuss8, 255);
          analogWrite(Nuss9, 255);
          analogWrite(Nuss10, 255);
          lcd.setCursor(0, 0);
          lcd.print("ein Schnaps");

warum steht immer "ein Schnaps"? sind das nicht 10?

Überhaupt würde ich erst mal alle switch cases rauswerfen und dafür eine Funktion machen

void zapfen (byte anzahl)
{
  if (digitalRead(Schwimmer) == HIGH)
  {
    if (anzahl >= 1) analogWrite(Nuss1, 255);
    if (anzahl >= 2) analogWrite(Nuss2, 255);
    if (anzahl >= 3) analogWrite(Nuss3, 255);
    if (anzahl >= 4) analogWrite(Nuss4, 255);
    if (anzahl >= 5) analogWrite(Nuss5, 255);
    if (anzahl >= 6) analogWrite(Nuss6, 255);
    if (anzahl >= 7) analogWrite(Nuss7, 255);
    if (anzahl >= 8) analogWrite(Nuss8, 255);
    if (anzahl >= 9) analogWrite(Nuss9, 255);
    if (anzahl >= 10) analogWrite(Nuss10, 255);
    lcd.setCursor(0, 0);
    lcd.print(anzahl);
    lcd.print(F(" Schnaps  "));
    lcd.setCursor(0, 1);
    lcd.print(F("kommt sofort"));
    delay(2000);
    lcd.clear();
    if (anzahl >= 1) analogWrite(Nuss1, 0);
    if (anzahl >= 2) analogWrite(Nuss2, 0);
    if (anzahl >= 3) analogWrite(Nuss3, 0);
    if (anzahl >= 4) analogWrite(Nuss4, 0);
    if (anzahl >= 5) analogWrite(Nuss5, 0);
    if (anzahl >= 6) analogWrite(Nuss6, 0);
    if (anzahl >= 7) analogWrite(Nuss7, 0);
    if (anzahl >= 8) analogWrite(Nuss8, 0);
    if (anzahl >= 9) analogWrite(Nuss9, 0);
    if (anzahl >= 10) analogWrite(Nuss10, 0);
  }
}

wobei man da noch hinterfragen müsste, warum du da analogWrite nimmst wenn es eh nur 0 oder 255 ist.

aber eigentlich gehören die Variablen die 1..10 benannt sind, sowieso in ein Array.

ich habe einstweilen alle auf 255, muss es mir im genauen dann anschauen, falls eine Pumpe weniger fördert, bzw falls es bei voller Leistung spritzt.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.