Hallo,
ich bin neu hier im Forum und habe bereits fleißig gelesen und auch das ein oder andere Video geschaut.
Ich habe vor einen Tisch mit 165 WS2812b LEDs als Matrix zu bauen. Die Matrix alleine, ist ja unproblematisch mit fastLED Beispielen steuerbar.
Ich möchte aber auch mit dem Tisch interagieren können, daher sollen die LEDs in 25 Gruppen aufgeteilt werden und jede Gruppe mit einem Touchsensor ansteuerbar sein.
Sprich Sensor1 steuert LED-Gruppe1; Sensor2 die Gruppe2, usw.
Noch kurz zur Hardware:
Also Borad kommt ein Elegoo Mega R3 zum Einsatz in Kombination mit einem 10 A Netzteil.
Dass die 10 A für 165 LEDs knapp sind, ist mir bewusst, daher werden die LEDs, wenn die gesamte Matrix eingeschaltet ist nie 100% Helligkeit erreichen.
Da ich bisher keine großen Erfahrungen mit Arduino gesammelt habe würde ich das Projekt und die Fortschritte hier gerne vorstellen und hoffe, das mir der ein oder andere den kleinen Roman verzeiht und auch bei ein paar Programmierfragen helfen kann. (Spoileralarm, ich habe schon welche )
Begonnen habe ich bisher mit dem Ein-/Ausschaltablauf, welcher durch die Sensoren ausgelöst werden sollen. Glücklicherweise funktioniert das schonmal.
Wenn ich mich richtig eingelesen habe, sollte das ein einfacher Automat sein.
Der Ablauf sollte so aussehen:
- Sensor wird berüht und gehalten -> LEDs dimmen von 0% auf 100%
- Sensor wird gehalten -> LEDs leuchten
- Sensor wird losgelassen -> LEDs dimmen von 100% auf 0%
- Sensor wird nicht berührt -> LEDs sind aus
Zum Vermeiden von einer "Fehlbedienung" erfolgt der Wechsel von State0 auf State1 nur, wenn der Sensor auch eine gewisse Zeit gehalten wird.
Den Abschnitt "Hilfe" musste ich einbauen, da ansonsten das Ausdimmen nicht über das vorgegebene Intervall erfolgt ist.
Zur Zeit beschränkt sich das ganze noch auf einen Sensor.
Außerdem gebe ich die Aktion zur Zeit testweise noch als Text aus und schalte noch keine LEDs.
Später wird dann Serial.println durch Code aus der fastLED Library ersetzt.
Da dieser Ablauf für jeden Sensor gleich sein soll frage ich mich, ob man den Code noch vereinfachen kann bzw. habe ich mir das zu kompliziert gemacht?
Wie ich das für 25 Gruppen wiederholen kann ist mir auch noch nicht klar, außer eben 25 mal copy&paste...
#define BPin1 6 //TTP223
int buttonState = 0;
long TimerEIN = 0;
long IntervallEIN = 400;
long TimerAUS = 0;
long IntervallAUS = 2000;
void setup() {
pinMode(BPin1, INPUT);
Serial.begin(9600);
}
void loop() {
//------------------ DIMMEN+ -------------------------
if ((digitalRead(BPin1) == HIGH) && buttonState == 0) {
Serial.println("State 1 - läuft");
if (millis() > TimerEIN + IntervallEIN) {
buttonState = 1;
Serial.println ("State 1 - FERTIG");
}
else buttonState = 0;
}
else TimerEIN = millis();
//------------------ AN -------------------------
if ((digitalRead(BPin1) == HIGH) && buttonState == 1) {
Serial.println("State 2 - AN");
}
//------------------ HILFE -------------------------
if ((digitalRead(BPin1) == LOW) && buttonState == 1) {
Serial.println("HILFE");
buttonState = 2;
TimerAUS = millis();
}
//------------------ DIMMEN- -------------------------
if ((digitalRead(BPin1) == LOW) && buttonState == 2) {
Serial.println("State 3 - läuft");
if (millis() > TimerAUS + IntervallAUS) {
buttonState = 3;
Serial.println ("State 3 - FERTIG");
}
}
//------------------ AUS -------------------------
if ((digitalRead(BPin1) == LOW) && buttonState == 3) {
Serial.println("State 4 - AN");
buttonState = 0;
}
}