Hallo,
ich stelle mich erstmal vor:
Ich bin Roedler, 29 Jahre jung und gerade ganz frisch in Arduino eingestiegen.
Ich habe mir folgendes Projekt überlegt: Eine "Schnaps-Zapfanlage"
Dafür stelle ich mir das so vor, dass ich 2 "Ausläufe" habe.
Mit Taster um die Pumpe über ein Relais anzusteuern und Glaserkennung.
Unter jedem Glas ist ein 16 Bit LED Ring.
Das Programm stelle ich mir wie folgt vor:
Steht kein Glas auf dem Sensor, leuchten (unabhängig) voneinander die LED Ringe einfach Blau.
Stelle ich ein Glas auf den Sensor, soll der entsprechende LED Ring in Gelb im Kreis wandern.
Den Zapfvorgang starte ich mit einem Taster ( Die Pumpe wird nur angesteuert, wenn Glassensor schaltet und der Taster schaltet) und dabei soll der LED Ring rot pulsieren.
Lasse ich den Taster los, soll der LED Ring grün Leuchten ( Jede 2. LED ) Nehme ich das Glas weg, dann wieder Blau.
Ich bin mit dem Programm schon angefangen und ich glaube, ich habe zumindest schon einmal den Befehl drin, dass die LED Ringe Blau leuchten und wenn ein Glas auf den Sensor gestellt werden dann Gelb im Kreis laufen. Nehme ich das Glas wieder weg, sollte er wieder in Blau springen. ( Zumindest sagt das Programm keinen Fehler an )
Und den Befehl, für das Zapfen müsste ich auch schon richtig drin haben:)
Aber ich habe erhebliche Probleme ( Verständnisprobleme ) die LED Ringe da mit der Adafruit Bibliothek einzubinden.
Einen Ausgang einbinden habe ich schon hinbekommen.
Jetzt ist die Frage - Wie kann ich dem Programm sagen, dass ich 2 LED Ringe habe? Muss ich die Bibliothek doppelt integrieren oder wie funktioniert das ?
Mit dem Pulsieren habe ich auch noch keine Lösung gefunden.
Ich möchte hier auch nicht nach einem fertigen Sketch betteln. Das würde den "Lerneffekt" ja versauen.
Aber vielleicht hat jemand den ein oder anderen Lösungsansatz für mich, der mir hilft?
Für das Pulsieren, dass man vielleicht eine IF abfrage mit der FOR abfrage verbinden kann? ( Wenn der Glassensor schaltet, fange an endlos im Kreis zu drehen, wenn der Taster dazu gedrückt wird, wechsel auf Rot und pulsiere . ) Aber wie realisiere ich jetzt, dass wenn ich jetzt den Taster wieder loslasse, dass der Ring dann grün blinkt? Und wenn ihc das Glas wegnehme wieder in Anfang springt?
Das mit dem Anfang müsste ich ja mit dem IF und For oben im Sketch schon haben oder?
Ich hoffe, ich werde nicht gleich zerlegt hier und bekomme etwas Hilfe.
LG
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define NUMPIXELS 16
#define PIN 8
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
// Umbenennung der Pin-Belegung
int pumpe1 = 2;
int pumpe2 = 3;
int taster1 = 4;
int taster2 = 5;
int glas1 = 6;
int glas2 = 7;
int ledring1 = 8;
int ledring2 = 9;
int tasterstatus1 = 0;
int tasterstatus2 = 0;
int glasstatus1 = 0;
int glasstatus2 = 0;
int s = 0; //s steht für die 1. LED am Ring (s-15) (16Bit Ring)
// Zuordnung der Ein-und Ausgänge
void setup()
{
pinMode(pumpe1, OUTPUT);
pinMode(pumpe2, OUTPUT);
pinMode(ledring1, OUTPUT);
pinMode(ledring2, OUTPUT);
pinMode(taster1, INPUT);
pinMode(taster2, INPUT);
pinMode(glas1, INPUT);
pinMode(glas2, INPUT);
pixels.begin();
pixels.show();
}
//Hauptprogramm zur Shot-Steuerung
void loop()
{
// Im Zustand ohne ein Glas unter dem Auslauf leuchten ledring1 und ledring2 blau. Steht ein Glas darunter, dann gelb im Kreis
if (digitalRead(glasstatus1) == LOW) //Kein Glas unter dem Auslauf
for (s = 0; s <= 15; s++)
{
pixels.setPixelColor(s, pixels.Color( 0, 0, 255)); // Gesamter Ring leuchtet Blau
pixels.show();
}
else // Steht ein Glas drunter
{
pixels.setPixelColor(s, pixels.Color( 255, 215, 0));
pixels.setPixelColor(s - 1, pixels.Color( 0, 0, 0));
pixels.show();
if (s == 0) pixels.setPixelColor(15, pixels.Color (0, 0, 0)); // Goldene LED wandert im Kreis
pixels.show();
s = s + 1;
if (s == 16) s = 0;
}
// pumpe1 und pumpe2 sollen durch taster1 und taster2 angesteuert werden, solange man den Taster drückt und ein Glas darunter steht.
// und der ledring1 und ledring2 soll (unabhängig voneinander) rot pulsieren. Ansteuerung nur, wenn Glas1 oder Glas2 geschaltet hat.
// Glas1 schaltet, Taster1 wird gedrückt, Pumpe1 pumpt, LEDRing1 soll Rot pulsieren
tasterstatus1 = digitalRead(taster1); //Pumpe1 startet bei Tasterdruck, Ring1 pulsiert rot
glasstatus1 = digitalRead(glas1); //Pumpe1 funktioniert nur, wenn Glas1 steht
if ((digitalRead(glasstatus1) == HIGH) && (digitalRead(tasterstatus1) == HIGH))
{
digitalWrite(pumpe1, HIGH);
}
else
{
digitalWrite(pumpe1, LOW);
}
// Glas2 schaltet, Taster2 wird gedrückt, Pumpe2 pumpt, LEDRing2 soll Rot pulsieren
tasterstatus2 = digitalRead(taster2); //Pumpe2 startet bei Tasterdruck, Ring2 pulsiert rot
glasstatus2 = digitalRead(glas2); //Pumpe2 funktioniert nur, wenn Glas2 steht
if ((digitalRead(glasstatus2) == HIGH) && (digitalRead(tasterstatus2) == HIGH))
{
digitalWrite(pumpe2, HIGH);
}
else
{
digitalWrite(pumpe2, LOW);
}
}