Hi atomicmate,
ja, hab da noch 2 ander Fehler drin gehabt.
Hab auch das Irrec.resume(); nochmals etwas anders plaziert.
Wenn ich die IR-Codes mittels tastern erzeuge, funktioniert es auf nem Nano. Hab taster-gedöns wieder entfernt aber die restlichen korrekturen gelassen.
Teste bitte und sag mir, ob der IR-Code im Serial-Monitor angezeigt wird.
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv (RECV_PIN);
decode_results results;
#define ein LOW
#define aus HIGH
long results_value =0;
int Cola = 4;
int Fanta = 5;
int Sprite = 6;
int Wasser = 7;
// steuervariablen
int Pumpe = 0 ; // Nummer der Pumpe (0 = keine Pumpe läuft)
bool Status = false; // true = eine Pumpe wurde eingeschaltet, false = es läuft grad keine Pumpe
bool Stop = false; // 1 = Stop gesendet, laufende Pumpe stoppen
unsigned long pumpDauer; // gibt an wie lange gepumpt wird
unsigned long pumpStart; //merkt sich, wan pumpe gestartet (um die Dauer des Pumpens messen zu können
void setup() {
digitalWrite(Cola, HIGH);
pinMode(Cola, OUTPUT);
digitalWrite(Fanta, HIGH);
pinMode(Fanta, OUTPUT);
digitalWrite(Sprite, HIGH);
pinMode(Sprite, OUTPUT);
digitalWrite(Wasser, HIGH);
pinMode(Wasser, OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(8,INPUT_PULLUP);
pinMode(9,INPUT_PULLUP);
pinMode(10,INPUT_PULLUP);
pinMode(11,INPUT_PULLUP);
pinMode(12,INPUT_PULLUP);
Serial.println("Setup ok");
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, DEC);
if (results.value == 16753245) Stop = true;
if (Status == false)
{ // folgende Zeilen nur ausführen, wenn keine Pumpe läuft)
if (results.value == 16724175) Pumpe = 1; // Cola läuft für 6sek, stoppt selbstständig // Zeit für ca 200ml
if (results.value == 16718055) Pumpe = 2; // Fanta läuft für 6sek, stoppt selbstständig
if (results.value == 16743045) Pumpe = 3; // Sprite läuft für 6sek, stoppt selbstständig
if (results.value == 16716015) Pumpe = 4; // Wasser läuft für 6sek, stoppt selbstständig
if (results.value == 16726215) Pumpe = 5; // Mezzo-Mix äuft für 6sek, stoppt selbstständig
if (results.value == 16769565) Pumpe = 10; // Spülen für 5sek
if (results.value == 16734885) Pumpe = 11; // Cola läuft für 8sek, stoppt selbstständig // Zeit für ca 260ml
if (results.value == 16728765) Pumpe = 12; // Fanta läuft für 8sek, stoppt selbstständig
if (results.value == 16730805) Pumpe = 13; // Sprite läuft für 8sek, stoppt selbstständig
if (results.value == 16732845) Pumpe = 14; // Wasser läuft für 8sek, stoppt selbstständig
if (Pumpe)
{
callPumpe(Pumpe);
Stop = false;
Status = true;
pumpStart = millis();
}
}
irrecv.resume();
}
else if (Status == true) { // prüfen ob eine Pumpe läuft
if ((millis() - pumpStart) >= pumpDauer) Stop = true; // hier wird geprüft, wie lange eine pumpe schon läuft
if (Stop == true)
{ // oder ob das Stop gesendet wurde
callPumpe(Pumpe); // Laufende Pumpe ausschalten
Pumpe = 0;
Stop = false; // stop wieder auf null
Status = false; // Status wieder auf false alles bereit für nächstes Getränk
}
}
} // loop end
void callPumpe(int Pump) {
pumpDauer = 6000; // Zeit für ca 200ml
if(Pump == 10) pumpDauer = 5000; // Zeit für Spülen
if(Pump > 10) {
pumpDauer = 8000; // Zeit für ca 260ml
Pump -= 10; // wenn Pump > 10 (Grosses Glas), 10 abziehen und dann entsprechende Pumpe starten
}
switch(Pump) { // Pumpennummer / Funktion
case 1: // Cola
digitalWrite(Cola, aus);
if(Status == false) digitalWrite(Cola, ein);
break;
case 2: // Fanta
digitalWrite(Fanta, aus);
if(Status == false) digitalWrite(Fanta, ein);
break;
case 3: // Sprite
digitalWrite(Sprite, aus);
if(Status == false) digitalWrite(Sprite, ein);
break;
case 4: // Wasser
digitalWrite(Wasser, aus);
if(Status == false) digitalWrite(Wasser, ein);
break;
case 5: // MezzoMix
digitalWrite(Cola, aus);
digitalWrite(Fanta, aus);
pumpDauer = 3000;
if(Status == false) {
digitalWrite(Cola, ein);
digitalWrite(Fanta, ein);
}
break;
case 10: // Spuehlen
digitalWrite(Cola, aus);
digitalWrite(Fanta, aus);
digitalWrite(Sprite, aus);
digitalWrite(Wasser, aus);
if(Status == false) {
digitalWrite(Cola, ein);
digitalWrite(Fanta, ein);
digitalWrite(Sprite, ein);
digitalWrite(Wasser, ein);
}
break;
}
}
sorry wegen der Umstände.
LG Stefan