Advertisement
ChristianKnorr

Arduino, 2x WS2812B strips, Zimmerbeleuchtung

Apr 15th, 2018
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.05 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement