ChristianKnorr

Arduino, 2x WS2812B strips, Zimmerbeleuchtung

Apr 15th, 2018
160
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.    Mein erstes Programm...
  3.    Basis: http://www.arduino-tutorial.de/viele-leds-mit-arduino-steuern-ws2812/
  4.  
  5.    Einchalten: Alles Ambient
  6.    Kurz Drücken: Lange Seite an, Kurze Seite Ambient
  7.    Kurz Drücken: Alles an
  8.    Kurz Drücken: Kurze Seite an, Lange Seite Ambient
  9.    Kurz Drücken: goto Einchalten
  10.  
  11.    Weitere Links:
  12.      https://www.arduino.cc/reference/en/language/structure/control-structure/switchcase/
  13.      https://www.mikrocontroller.net/articles/Statemachine
  14.      https://www.facebook.com/groups/1576254812623576/permalink/2029889573926762/?comment_id=2029919923923727&reply_comment_id=2029947240587662&notif_id=1523719620684096&notif_t=group_comment&ref=notif
  15. */
  16.  
  17. #include <Adafruit_NeoPixel.h>
  18. #include <avr/power.h>
  19.  
  20. #define LangeSeiteLedPin         6
  21. #define LangeSeiteNumpixels      150
  22. #define LangeSeiteButtonPin      2
  23. #define KurzeSeiteLedPin         5
  24. #define KurzeSeiteNumpixels      120
  25. #define KurzeSeiteButtonPin      4
  26.  
  27. Adafruit_NeoPixel LangeSeite = Adafruit_NeoPixel(LangeSeiteNumpixels, LangeSeiteLedPin, NEO_GRB + NEO_KHZ800);
  28. Adafruit_NeoPixel KurzeSeite = Adafruit_NeoPixel(KurzeSeiteNumpixels, KurzeSeiteLedPin, NEO_GRB + NEO_KHZ800);
  29.  
  30. int LangeSeiteAmbiR = 25;
  31. int LangeSeiteAmbiG = 10;
  32. int LangeSeiteAmbiB = 1;
  33. int LangeSeiteOnR = 255;
  34. int LangeSeiteOnG = 255;
  35. int LangeSeiteOnB = 255;
  36. int LangeSeiteBright = 255; // 0-255
  37.  
  38. int KurzeSeiteAmbiR = 25;
  39. int KurzeSeiteAmbiG = 10;
  40. int KurzeSeiteAmbiB = 1;
  41. int KurzeSeiteOnR = 255;
  42. int KurzeSeiteOnG = 255;
  43. int KurzeSeiteOnB = 255;
  44. int KurzeSeiteBright = 255;
  45.  
  46. int stripeLS = 0; //Lange Seite: 0 = Off, 1 = On, 2 =Ambi
  47. int stripeKS = 0; //Kurze Seite: 0 = Off, 1 = On, 2 =Ambi
  48.  
  49. bool oldState = HIGH;
  50. int showType = -1;
  51. int maxType = 3;
  52. bool startSequenceLS = false;
  53. int endSequenceLS = LangeSeiteNumpixels / 2;
  54. int cycleLS = -1;
  55. bool startSequenceKS = false;
  56. int endSequenceKS = KurzeSeiteNumpixels / 2;
  57. int cycleKS = -1;
  58. bool debug = false;
  59. bool firststart = true;
  60. bool usecase = true;
  61.  
  62. void debugprint(int i, int stripeLS, int stripeKS) {
  63.   Serial.print("case = ");
  64.   Serial.print(i);
  65.   Serial.print(", Lange Seite = ");
  66.   Serial.print(stripeLS);
  67.   Serial.print(", Kurze Seite = ");
  68.   Serial.println(stripeKS);
  69. }
  70.  
  71. void startShow(int i) {
  72.   if ( usecase == true ) {
  73.  
  74.     //  maxType beachten
  75.     switch (i) {
  76.       case 0:
  77.         if ( firststart ) {
  78.           bool firststart = false;
  79.           stripeLS = 1;
  80.           stripeKS = 2;
  81.           if ( cycleLS <= 0 ) cycleLS = 0;
  82.           if ( cycleKS <= 0 ) cycleKS = 0;
  83.         } else {
  84.           stripeLS = 0;
  85.           stripeKS = 2;
  86.           if ( cycleKS > 0 ) cycleKS = 0;
  87.         }
  88.         usecase = false;
  89.         if ( debug ) debugprint(i, stripeLS, stripeKS);
  90.         break;
  91.  
  92.       case 1:
  93.         if ( firststart ) {
  94.           bool firststart = false;
  95.           stripeLS = 1;
  96.           stripeKS = 1;
  97.           if ( cycleLS <= 0 ) cycleLS = 0;
  98.           if ( cycleKS <= 0 ) cycleKS = 0;
  99.         } else {
  100.           stripeLS = 1;
  101.           stripeKS = 0;
  102.           if ( cycleLS > 0 ) cycleLS = 0;
  103.         }
  104.         usecase = false;
  105.         if ( debug ) debugprint(i, stripeLS, stripeKS);
  106.         break;
  107.  
  108.       case 2:
  109.         if ( firststart ) {
  110.           bool firststart = false;
  111.           stripeLS = 2;
  112.           stripeKS = 1;
  113.           if ( cycleLS <= 0 ) cycleLS = 0;
  114.           if ( cycleKS <= 0 ) cycleKS = 0;
  115.         } else {
  116.           stripeLS = 0;
  117.           stripeKS = 1;
  118.           if ( cycleKS > 0 ) cycleKS = 0;
  119.         }
  120.         usecase = false;
  121.         if ( debug ) debugprint(i, stripeLS, stripeKS);
  122.         break;
  123.  
  124.       case 3:
  125.         if ( firststart ) {
  126.           bool firststart = false;
  127.           stripeLS = 2;
  128.           stripeKS = 2;
  129.           if ( cycleLS <= 0 ) cycleLS = 0;
  130.           if ( cycleKS <= 0 ) cycleKS = 0;
  131.         } else {
  132.           stripeLS = 2;
  133.           stripeKS = 0;
  134.           if ( cycleLS > 0 ) cycleLS = 0;
  135.         }
  136.         usecase = false;
  137.         if ( debug ) debugprint(i, stripeLS, stripeKS);
  138.         break;
  139.     }
  140.   }
  141. }
  142.  
  143. void setup() {
  144.   if ( debug ) Serial.begin(9600);
  145.   LangeSeite.begin();
  146.   KurzeSeite.begin();
  147.   LangeSeite.setBrightness(LangeSeiteBright);
  148.   KurzeSeite.setBrightness(KurzeSeiteBright);
  149.   LangeSeite.show();
  150.   KurzeSeite.show();
  151.   pinMode(LangeSeiteButtonPin, INPUT); // initialize the pushbutton pin as an input:
  152.   pinMode(KurzeSeiteButtonPin, INPUT); // initialize the pushbutton pin as an input:
  153. }
  154.  
  155. void loop() {
  156.   // Get current button state.
  157.   bool newState = digitalRead(LangeSeiteButtonPin);
  158.  
  159.   // Check if state changed from high to low (button press).
  160.   if (newState == LOW && oldState == HIGH) {
  161.     // Short delay to debounce button.
  162.     delay(20);
  163.     // Check if button is still low after debounce.
  164.     newState = digitalRead(LangeSeiteButtonPin);
  165.     if (newState == LOW) {
  166.       cycleLS = 0;
  167.       cycleKS = 0;
  168.       usecase = true;
  169.       showType++;
  170.       if (showType > maxType)
  171.         showType = 0;
  172.       startShow(showType);
  173.     }
  174.   }
  175.  
  176.   // Set the last button state to the old state.
  177.   oldState = newState;
  178.   if ( startSequenceLS ) {
  179.     if ( cycleLS < 0 ) cycleLS = 0;
  180.     if ( debug ) Serial.println("Lange Seite geht los");
  181.   }
  182.   if ( startSequenceKS ) {
  183.     if ( cycleKS < 0 ) cycleKS = 0;
  184.     if ( debug ) Serial.println("Kurze Seite geht los");
  185.   }
  186.  
  187.   if ( stripeLS == 2 ) {
  188.     LangeSeite.setPixelColor(LangeSeiteNumpixels / 2 - cycleLS - 1, LangeSeite.Color(LangeSeiteAmbiR, LangeSeiteAmbiG, LangeSeiteAmbiB));
  189.     LangeSeite.setPixelColor(LangeSeiteNumpixels / 2 + cycleLS, LangeSeite.Color(LangeSeiteAmbiR, LangeSeiteAmbiG, LangeSeiteAmbiB));
  190.     if ( debug ) { Serial.print("Lange Seite Ambi. cycleLS="); Serial.println(cycleLS); }
  191.     LangeSeite.show();
  192.   }
  193.   if ( stripeLS == 1 ) {
  194.     LangeSeite.setPixelColor(LangeSeiteNumpixels / 2 - cycleLS - 1, LangeSeite.Color(LangeSeiteOnR, LangeSeiteOnG, LangeSeiteOnB));
  195.     LangeSeite.setPixelColor(LangeSeiteNumpixels / 2 + cycleLS, LangeSeite.Color(LangeSeiteOnR, LangeSeiteOnG, LangeSeiteOnB));
  196.     if ( debug ) { Serial.print("Lange Seite An. cycleLS="); Serial.println(cycleLS); }
  197.     LangeSeite.show();
  198.   }
  199.   if ( stripeKS == 2 ) {
  200.     KurzeSeite.setPixelColor(KurzeSeiteNumpixels / 2 - cycleKS - 1, KurzeSeite.Color(KurzeSeiteAmbiR, KurzeSeiteAmbiG, KurzeSeiteAmbiB));
  201.     KurzeSeite.setPixelColor(KurzeSeiteNumpixels / 2 + cycleKS, KurzeSeite.Color(KurzeSeiteAmbiR, KurzeSeiteAmbiG, KurzeSeiteAmbiB));
  202.     if ( debug ) { Serial.print("Kurze Seite Ambi. cycleLS="); Serial.println(cycleLS); }
  203.     KurzeSeite.show();
  204.   }
  205.   if ( stripeKS == 1 ) {
  206.     KurzeSeite.setPixelColor(KurzeSeiteNumpixels / 2 - cycleKS - 1, KurzeSeite.Color(KurzeSeiteOnR, KurzeSeiteOnG, KurzeSeiteOnB));
  207.     KurzeSeite.setPixelColor(KurzeSeiteNumpixels / 2 + cycleKS, KurzeSeite.Color(KurzeSeiteOnR, KurzeSeiteOnG, KurzeSeiteOnB));
  208.     if ( debug ) { Serial.print("Kurze Seite An. cycleLS="); Serial.println(cycleLS); }
  209.     KurzeSeite.show();
  210.   }
  211.  
  212.   /*
  213.     int pirVal = digitalRead(pirPin);
  214.     if (pirVal == LOW) { //was motion detected
  215.       digitalWrite(pirLED, HIGH);
  216.       if ( KurzeSeiteOverride == LOW ) {
  217.         KurzeSeiteAmbiOff();
  218.       }
  219.       if ( LangeSeiteOverride == LOW ) {
  220.         LangeSeiteAmbiOff();
  221.       }
  222.     } else {
  223.       digitalWrite(pirLED, LOW);
  224.       if ( KurzeSeiteOverride == LOW ) {
  225.         KurzeSeiteAmbiOn();
  226.       }
  227.       if ( LangeSeiteOverride == LOW ) {
  228.         LangeSeiteAmbiOn();
  229.       }
  230.     }
  231.   */
  232.   if ( ( debug ) && ( ( cycleLS >= 0 ) || ( cycleKS >= 0 ) ) ) {
  233.     Serial.print("Schleife cycle läuft: cycleLS=");
  234.     Serial.print(cycleLS);
  235.     Serial.print(", cycleKS=");
  236.     Serial.println(cycleKS);
  237.   }
  238.   if ( cycleLS >= 0 ) cycleLS++;
  239.   if ( cycleLS >= endSequenceLS ) {
  240.     if ( debug ) Serial.println("Stop Lange Seite");
  241.     startSequenceLS = false;
  242.     stripeLS = 0;
  243.     cycleLS = -1;
  244.   }
  245.   if ( cycleKS >= 0 ) cycleKS++;
  246.   if ( cycleKS >= endSequenceKS ) {
  247.     if ( debug ) Serial.println("Stop Kurze Seite");
  248.     startSequenceKS = false;
  249.     stripeKS = 0;
  250.     cycleKS = -1;
  251.   }
  252. }
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×