Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Mein erstes Programm...
- Basis: http://www.arduino-tutorial.de/viele-leds-mit-arduino-steuern-ws2812/
- Einchalten: Alles Ambient
- Kurz Drücken: Lange Seite an, Kurze Seite Ambient
- Kurz Drücken: Alles an
- Kurz Drücken: Kurze Seite an, Lange Seite Ambient
- Kurz Drücken: goto Einchalten
- Weitere Links:
- https://www.arduino.cc/reference/en/language/structure/control-structure/switchcase/
- https://www.mikrocontroller.net/articles/Statemachine
- https://www.facebook.com/groups/1576254812623576/permalink/2029889573926762/?comment_id=2029919923923727&reply_comment_id=2029947240587662¬if_id=1523719620684096¬if_t=group_comment&ref=notif
- */
- #include <Adafruit_NeoPixel.h>
- #include <avr/power.h>
- #define LangeSeiteLedPin 6
- #define LangeSeiteNumpixels 150
- #define LangeSeiteButtonPin 2
- #define KurzeSeiteLedPin 5
- #define KurzeSeiteNumpixels 120
- #define KurzeSeiteButtonPin 4
- Adafruit_NeoPixel LangeSeite = Adafruit_NeoPixel(LangeSeiteNumpixels, LangeSeiteLedPin, NEO_GRB + NEO_KHZ800);
- Adafruit_NeoPixel KurzeSeite = Adafruit_NeoPixel(KurzeSeiteNumpixels, KurzeSeiteLedPin, NEO_GRB + NEO_KHZ800);
- int LangeSeiteAmbiR = 25;
- int LangeSeiteAmbiG = 10;
- int LangeSeiteAmbiB = 1;
- int LangeSeiteOnR = 255;
- int LangeSeiteOnG = 255;
- int LangeSeiteOnB = 255;
- int LangeSeiteBright = 255; // 0-255
- int KurzeSeiteAmbiR = 25;
- int KurzeSeiteAmbiG = 10;
- int KurzeSeiteAmbiB = 1;
- int KurzeSeiteOnR = 255;
- int KurzeSeiteOnG = 255;
- int KurzeSeiteOnB = 255;
- int KurzeSeiteBright = 255;
- int stripeLS = 0; //Lange Seite: 0 = Off, 1 = On, 2 =Ambi
- int stripeKS = 0; //Kurze Seite: 0 = Off, 1 = On, 2 =Ambi
- bool oldState = HIGH;
- int showType = -1;
- int maxType = 3;
- bool startSequenceLS = false;
- int endSequenceLS = LangeSeiteNumpixels / 2;
- int cycleLS = -1;
- bool startSequenceKS = false;
- int endSequenceKS = KurzeSeiteNumpixels / 2;
- int cycleKS = -1;
- bool debug = false;
- bool firststart = true;
- bool usecase = true;
- void debugprint(int i, int stripeLS, int stripeKS) {
- Serial.print("case = ");
- Serial.print(i);
- Serial.print(", Lange Seite = ");
- Serial.print(stripeLS);
- Serial.print(", Kurze Seite = ");
- Serial.println(stripeKS);
- }
- void startShow(int i) {
- if ( usecase == true ) {
- // maxType beachten
- switch (i) {
- case 0:
- if ( firststart ) {
- bool firststart = false;
- stripeLS = 1;
- stripeKS = 2;
- if ( cycleLS <= 0 ) cycleLS = 0;
- if ( cycleKS <= 0 ) cycleKS = 0;
- } else {
- stripeLS = 0;
- stripeKS = 2;
- if ( cycleKS > 0 ) cycleKS = 0;
- }
- usecase = false;
- if ( debug ) debugprint(i, stripeLS, stripeKS);
- break;
- case 1:
- if ( firststart ) {
- bool firststart = false;
- stripeLS = 1;
- stripeKS = 1;
- if ( cycleLS <= 0 ) cycleLS = 0;
- if ( cycleKS <= 0 ) cycleKS = 0;
- } else {
- stripeLS = 1;
- stripeKS = 0;
- if ( cycleLS > 0 ) cycleLS = 0;
- }
- usecase = false;
- if ( debug ) debugprint(i, stripeLS, stripeKS);
- break;
- case 2:
- if ( firststart ) {
- bool firststart = false;
- stripeLS = 2;
- stripeKS = 1;
- if ( cycleLS <= 0 ) cycleLS = 0;
- if ( cycleKS <= 0 ) cycleKS = 0;
- } else {
- stripeLS = 0;
- stripeKS = 1;
- if ( cycleKS > 0 ) cycleKS = 0;
- }
- usecase = false;
- if ( debug ) debugprint(i, stripeLS, stripeKS);
- break;
- case 3:
- if ( firststart ) {
- bool firststart = false;
- stripeLS = 2;
- stripeKS = 2;
- if ( cycleLS <= 0 ) cycleLS = 0;
- if ( cycleKS <= 0 ) cycleKS = 0;
- } else {
- stripeLS = 2;
- stripeKS = 0;
- if ( cycleLS > 0 ) cycleLS = 0;
- }
- usecase = false;
- if ( debug ) debugprint(i, stripeLS, stripeKS);
- break;
- }
- }
- }
- void setup() {
- if ( debug ) Serial.begin(9600);
- LangeSeite.begin();
- KurzeSeite.begin();
- LangeSeite.setBrightness(LangeSeiteBright);
- KurzeSeite.setBrightness(KurzeSeiteBright);
- LangeSeite.show();
- KurzeSeite.show();
- pinMode(LangeSeiteButtonPin, INPUT); // initialize the pushbutton pin as an input:
- pinMode(KurzeSeiteButtonPin, INPUT); // initialize the pushbutton pin as an input:
- }
- void loop() {
- // Get current button state.
- bool newState = digitalRead(LangeSeiteButtonPin);
- // Check if state changed from high to low (button press).
- if (newState == LOW && oldState == HIGH) {
- // Short delay to debounce button.
- delay(20);
- // Check if button is still low after debounce.
- newState = digitalRead(LangeSeiteButtonPin);
- if (newState == LOW) {
- cycleLS = 0;
- cycleKS = 0;
- usecase = true;
- showType++;
- if (showType > maxType)
- showType = 0;
- startShow(showType);
- }
- }
- // Set the last button state to the old state.
- oldState = newState;
- if ( startSequenceLS ) {
- if ( cycleLS < 0 ) cycleLS = 0;
- if ( debug ) Serial.println("Lange Seite geht los");
- }
- if ( startSequenceKS ) {
- if ( cycleKS < 0 ) cycleKS = 0;
- if ( debug ) Serial.println("Kurze Seite geht los");
- }
- if ( stripeLS == 2 ) {
- LangeSeite.setPixelColor(LangeSeiteNumpixels / 2 - cycleLS - 1, LangeSeite.Color(LangeSeiteAmbiR, LangeSeiteAmbiG, LangeSeiteAmbiB));
- LangeSeite.setPixelColor(LangeSeiteNumpixels / 2 + cycleLS, LangeSeite.Color(LangeSeiteAmbiR, LangeSeiteAmbiG, LangeSeiteAmbiB));
- if ( debug ) { Serial.print("Lange Seite Ambi. cycleLS="); Serial.println(cycleLS); }
- LangeSeite.show();
- }
- if ( stripeLS == 1 ) {
- LangeSeite.setPixelColor(LangeSeiteNumpixels / 2 - cycleLS - 1, LangeSeite.Color(LangeSeiteOnR, LangeSeiteOnG, LangeSeiteOnB));
- LangeSeite.setPixelColor(LangeSeiteNumpixels / 2 + cycleLS, LangeSeite.Color(LangeSeiteOnR, LangeSeiteOnG, LangeSeiteOnB));
- if ( debug ) { Serial.print("Lange Seite An. cycleLS="); Serial.println(cycleLS); }
- LangeSeite.show();
- }
- if ( stripeKS == 2 ) {
- KurzeSeite.setPixelColor(KurzeSeiteNumpixels / 2 - cycleKS - 1, KurzeSeite.Color(KurzeSeiteAmbiR, KurzeSeiteAmbiG, KurzeSeiteAmbiB));
- KurzeSeite.setPixelColor(KurzeSeiteNumpixels / 2 + cycleKS, KurzeSeite.Color(KurzeSeiteAmbiR, KurzeSeiteAmbiG, KurzeSeiteAmbiB));
- if ( debug ) { Serial.print("Kurze Seite Ambi. cycleLS="); Serial.println(cycleLS); }
- KurzeSeite.show();
- }
- if ( stripeKS == 1 ) {
- KurzeSeite.setPixelColor(KurzeSeiteNumpixels / 2 - cycleKS - 1, KurzeSeite.Color(KurzeSeiteOnR, KurzeSeiteOnG, KurzeSeiteOnB));
- KurzeSeite.setPixelColor(KurzeSeiteNumpixels / 2 + cycleKS, KurzeSeite.Color(KurzeSeiteOnR, KurzeSeiteOnG, KurzeSeiteOnB));
- if ( debug ) { Serial.print("Kurze Seite An. cycleLS="); Serial.println(cycleLS); }
- KurzeSeite.show();
- }
- /*
- int pirVal = digitalRead(pirPin);
- if (pirVal == LOW) { //was motion detected
- digitalWrite(pirLED, HIGH);
- if ( KurzeSeiteOverride == LOW ) {
- KurzeSeiteAmbiOff();
- }
- if ( LangeSeiteOverride == LOW ) {
- LangeSeiteAmbiOff();
- }
- } else {
- digitalWrite(pirLED, LOW);
- if ( KurzeSeiteOverride == LOW ) {
- KurzeSeiteAmbiOn();
- }
- if ( LangeSeiteOverride == LOW ) {
- LangeSeiteAmbiOn();
- }
- }
- */
- if ( ( debug ) && ( ( cycleLS >= 0 ) || ( cycleKS >= 0 ) ) ) {
- Serial.print("Schleife cycle läuft: cycleLS=");
- Serial.print(cycleLS);
- Serial.print(", cycleKS=");
- Serial.println(cycleKS);
- }
- if ( cycleLS >= 0 ) cycleLS++;
- if ( cycleLS >= endSequenceLS ) {
- if ( debug ) Serial.println("Stop Lange Seite");
- startSequenceLS = false;
- stripeLS = 0;
- cycleLS = -1;
- }
- if ( cycleKS >= 0 ) cycleKS++;
- if ( cycleKS >= endSequenceKS ) {
- if ( debug ) Serial.println("Stop Kurze Seite");
- startSequenceKS = false;
- stripeKS = 0;
- cycleKS = -1;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement