Advertisement
Hanneman

Arduino Mood Light Nederlands

Jun 14th, 2014
507
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 41.24 KB | None | 0 0
  1.   /**
  2.    
  3.     * Geschreven door Hannes Beem
  4.    
  5.     *
  6.    
  7.     * Dit programma is gratis software, het staat u vrij om het te verspreiden en / of aan te passen
  8.    
  9.     * onder de voorwaarden van de GNU General Public License zoals gepubliceerd door
  10.    
  11.     * the Free Software Foundation, versie 3 van de licentie of
  12.    
  13.     * welke latere versie dan ook.
  14.    
  15.     *
  16.    
  17.     * Dit programma is gemaakt in de hoop dat het u van nut zal zijn,
  18.    
  19.     * maar het is ZONDER ENIGE GARANTIE; Zonder ook maar de geimpliceerde garantie voor
  20.    
  21.     * verkoopbaarheid of geschiktheid voor een bepaald doel.  Bekijk de
  22.    
  23.     * GNU General Public License voor meer details.
  24.    
  25.     *
  26.    
  27.     * Een kopie van het GNU General Public License kunt u hier vinden http://www.gnu.org/licenses/
  28.    
  29.     *
  30.    
  31.     * Deze software is gratis en het staat u vrij het te verspreiden.
  32.    
  33.     *
  34.    
  35.     * Met dank aan transcendtient voor zijn LiquidCrystal library gevonden op de Arduino.cc website. http://playground.arduino.cc/Main/LiquidCrystal
  36.    
  37.     * Met dank aan Alexander Brevig voor zijn MenuBackend library.  http://www.arduino.cc/playground/uploads/Profiles/MenuBackend_1-4.zip
  38.    
  39.     * Met dank aan rafbuff voor de meest accurate encoder code gevonden op de Arduino.cc website. http://playground.arduino.cc/Main/RotaryEncoders
  40.    
  41.     * Met dank aan salsa (van Jeff's Arduino Blog) voor de code van de knop. http://jmsarduino.blogspot.be/2009/05/click-for-press-and-hold-for-b.html
  42.    
  43.     * Met dank aan Nico Verduin en Shooter van het Nederlandse Arduino forum http://arduinoforum.nl en PaulS van het http://www.arduino.cc forum.
  44.    
  45.     * Met dank aan PaulS van het Arduino.cc forum.
  46.  
  47.     * Met dank aan Michael McRoberts auteur van  Beginning Arduino pdf.
  48.    
  49.    
  50.     ! Belangrijk: om de menubackend library te kunnen gebruiken, moet je hem eerst hier downloaden: http://www.arduino.cc/playground/uploads/Profiles/MenuBackend_1-4.zip
  51.       de volgende code moet toegevoegd worden aan het MenuBackend.h bestand op regel 195
  52.        void toRoot() {
  53.           setCurrent( &getRoot() );
  54.        }
  55.     */
  56.     #include <SPI.h> // Noodzakelijk om de 74HC595 chip te kunnen gebruiken
  57.     #include <MenuBackend.h> // MenuBackend library
  58.     #include <LiquidCrystal.h>  // LCD Display Library in combinatie met de 74HC595 chip
  59.     // library aanspreken om gebruik te maken van de latch pin van de 74HC595
  60.     LiquidCrystal lcd(10);
  61.     //
  62.     // Encoder pin toewijzingen
  63.     //
  64.     #define encoderPinA     2   // pin voor A
  65.     #define encoderPinB     3   // pin voor B
  66.     #define encoderButton   4   // pin voor drukknop
  67.     //
  68.     // PIN toewijzingen voor de LEDS
  69.     //
  70.     #define REDLEDPIN       5
  71.     #define GREENLEDPIN     6
  72.     #define BLUELEDPIN      9
  73.     //
  74.     // Finite State Machine Staten
  75.     //
  76.     #define presetleds         0
  77.     #define blinking           1
  78.     #define randommode         2
  79.     #define blinkadjust        3
  80.     #define whiteledstate      4
  81.     #define redledstate        5
  82.     #define greenledstate      6
  83.     #define blueledstate       7
  84.     #define purpleledstate     8
  85.     #define yellowledstate     9
  86.     #define coolblueledstate  10
  87.     #define mintgreenledstate 11
  88.     //
  89.     // Preset kleuren
  90.     //
  91.     #define whitecolor    12              
  92.     #define purple1color  13                
  93.     #define purple2color  14                  
  94.     #define purple3color  15
  95.     #define blue1color    16              
  96.     #define blue2color    17                  
  97.     #define blue3color    18      
  98.     #define yellow1color  19                  
  99.     #define yellow2color  20          
  100.     #define orange1color  21                  
  101.     #define orange2color  22  
  102.     #define green1color   23
  103.     #define green2color   24
  104.     #define green3color   25
  105.     //
  106.     // Encoder Variabelen
  107.     //
  108.     volatile unsigned int encoderPos = 30000;   // zet de standaard posite op 30000, dit zal het midden zijn.
  109.     unsigned int lastReportedPos = 1;           // houdt de positie bij
  110.     static boolean rotating=false;              // debounce
  111.     int reading;                                // leest de status van de knop
  112.     int lastButtonState;                        // de laatste status van de knop
  113.     long lastDebounceTime = 0;                  // houdt de tijd bij van de laatste keer dat de knop is ingedrukt geweest
  114.     long debounceDelayButton = 50;              // debounce tijd
  115.     int buttonState;                            // de status van de knop
  116.     #define holdTime 1000                       // hoelang je de knop ingedrukt moet houden om te bevestigen
  117.     int buttonVal = 0;                          // waarde van de knop
  118.     int buttonLast = 0;                         // gebufferde waarde van de vorige status van de knop
  119.     long btnDnTime;                             // hoelang de knop ingedrukt is
  120.     long btnUpTime;                             // hoelang de knop al in losgelaten toestand verblijft
  121.     boolean ignoreUp = false;                   // om te bepalen wat te doen als de knop niet langer ingedrukt is dan de holdTime
  122.     // interrupt service routine variabelen
  123.     boolean A_set = false;              
  124.     boolean B_set = false;
  125.     //
  126.     // Variabelen voor de FSM Staten
  127.     //
  128.     int moodmodes;                              // Switch variabele voor de Modi Preset Mode, Stroboscope Mode en Random Mode
  129.     int ledstatecolors;                         // Switch variabele voor de Stroboscope kleuren
  130.     int presetcolors;                           // Switch variabele voor de Preset kleuren
  131.     //
  132.     // Variabelen voor de Preset Modus en de Stroboscope modus
  133.     //
  134.     int ledState = LOW;                          // Zet de ledstatus voor de Stroboscope uit
  135.     int x;                                       // Variabele gebruikt in Randommode
  136.     long on_time = 500;                          // De tijd in milliseconden die de led aanblijft tussen de flitstijden in
  137.     long analog_value_multiplier = 1;            // vermenigvuldigingsfactor variable, pas deze aan voor snellere flitstijden
  138.     long minimum_delay = 5;                      // minimale pauze in milliseconden tussen flitsen
  139.     long strobe_delay = 1000;                    // start variable die de snelheid voor het flikkeren in de stroboscope modus bepaalt.
  140.                                                  // Veranderd wanneer er een andere snelheid gekozen wordt.
  141.     //
  142.     // Strobescope & Random mode variabelen
  143.     //
  144.     float RGB[3];                                // slaat de waarden die de pwm funktie geeft op
  145.     float RGB1[3];                               // slaat de waarden die de pwm funktie geeft op
  146.     float RGB2[3];                               // slaat de waarden die de pwm funktie geeft op
  147.     float INC[3];                                // slaat de waarde op de verhoogt of verlaagt wordt op
  148.     int red, green, blue;                        // integers nodig voor de randommode
  149.     int brightness = 0;                          // begin waarde voor de felheid van de LEDS
  150.     int flashamount = 30;                        // begin waar voor de flikker snelheid van de stroboscope
  151.     unsigned long delayCtr    = 0L;              // gebruikt om te bepalen wanneer een bepaalde actie uitgevoerd moet worden
  152.     //
  153.     //timers
  154.     //
  155.     unsigned long currentMillis = millis();      // gebruikt om te bepalen wanneer een bepaalde actie uitgevoerd moet worden
  156.     long previousMillis = 0;                     // gebruikt om te bepalen wanneer een bepaalde actie uitgevoerd moet worden
  157.     //
  158.     // Menu setup
  159.     //
  160.     MenuBackend menu = MenuBackend(menuUsed,menuChanged);  // menu backend
  161.  
  162.     // Onderstaande lijst bestaat uit de menuitems die nodig zijn om het menu op te bouwen
  163.     MenuItem presetmode          =  MenuItem("Preset Mode     ");
  164.                 MenuItem white       =  MenuItem("1. White        ");
  165.                 MenuItem purple1     =  MenuItem("2. Dark Purple  ");
  166.             MenuItem purple2     =  MenuItem("3. Medium Purple");
  167.                 MenuItem purple3     =  MenuItem("4. Light Purple ");
  168.             MenuItem blue1       =  MenuItem("5. Dark Blue    ");
  169.         MenuItem blue2       =  MenuItem("6. Medium Blue  ");
  170.                 MenuItem blue3       =  MenuItem("7. Light Blue   ");
  171.                 MenuItem yellow1     =  MenuItem("8. Dark Yellow  ");
  172.                 MenuItem yellow2     =  MenuItem("9. Yellow       ");
  173.                 MenuItem orange1     =  MenuItem("10. Dark Orange ");
  174.                 MenuItem orange2     =  MenuItem("11. Orange      ");
  175.                 MenuItem green1      =  MenuItem("12. Bright Green");
  176.                 MenuItem green2      =  MenuItem("13. Medium Green");
  177.                 MenuItem green3      =  MenuItem("14. Light Green ");
  178.     MenuItem strobomode          =  MenuItem("Stroboscope Mode");
  179.                 MenuItem strobespeed =  MenuItem("Adjust Speed?   ");
  180.                     MenuItem flashadjust30   =  MenuItem("Fastest Speed  ");
  181.                     MenuItem flashadjust40   =  MenuItem("S             IF");
  182.                     MenuItem flashadjust50   =  MenuItem("S            I F");
  183.                     MenuItem flashadjust60   =  MenuItem("S           I  F");
  184.                     MenuItem flashadjust70   =  MenuItem("S          I   F");
  185.                     MenuItem flashadjust80   =  MenuItem("S         I    F");
  186.                     MenuItem flashadjust90   =  MenuItem("S        I     F");
  187.                     MenuItem flashadjust100  =  MenuItem("S       I      F");
  188.                     MenuItem flashadjust120  =  MenuItem("S      I       F");
  189.                     MenuItem flashadjust140  =  MenuItem("S     I        F");
  190.                     MenuItem flashadjust160  =  MenuItem("S    I         F");
  191.                     MenuItem flashadjust180  =  MenuItem("S   I          F");
  192.                     MenuItem flashadjust200  =  MenuItem("S  I           F");
  193.                     MenuItem flashadjust220  =  MenuItem("S I            F");
  194.                     MenuItem flashadjust240  =  MenuItem("SI             F");
  195.                     MenuItem flashadjust260  =  MenuItem("Slowest Speed   ");
  196.                     MenuItem strobowhite     =        MenuItem("White           ");
  197.                     MenuItem strobored       =        MenuItem("Red             ");
  198.                     MenuItem strobogreen     =        MenuItem("Green           ");
  199.                     MenuItem stroboblue      =        MenuItem("Blue            ");
  200.                     MenuItem strobopurple    =        MenuItem("Purple          ");
  201.                     MenuItem stroboyellow    =        MenuItem("Yellow          ");
  202.                 MenuItem strobocoolblue  =        MenuItem("Cool Blue       ");
  203.         MenuItem _randommode                 =  MenuItem("Random Mode     ");
  204.                 MenuItem randomspeed         =  MenuItem("Change Speed?   ");
  205.                     MenuItem randomadjust30  =      MenuItem("Fastest Speed   ");
  206.                     MenuItem randomadjust40  =      MenuItem("S             IF");
  207.                     MenuItem randomadjust50  =      MenuItem("S            I F");
  208.                     MenuItem randomadjust60  =      MenuItem("S           I  F");
  209.                     MenuItem randomadjust70  =      MenuItem("S          I   F");
  210.                     MenuItem randomadjust80  =      MenuItem("S         I    F");
  211.                     MenuItem randomadjust90  =      MenuItem("S        I     F");
  212.                     MenuItem randomadjust100 =      MenuItem("S       I      F");
  213.                     MenuItem randomadjust120 =      MenuItem("S      I       F");
  214.                     MenuItem randomadjust140 =      MenuItem("S     I        F");
  215.                     MenuItem randomadjust160 =      MenuItem("S    I         F");
  216.                     MenuItem randomadjust180 =      MenuItem("S   I          F");
  217.                     MenuItem randomadjust200 =      MenuItem("S  I           F");
  218.                     MenuItem randomadjust220 =      MenuItem("S I            F");
  219.                     MenuItem randomadjust240 =      MenuItem("SI             F");
  220.                     MenuItem randomadjust260 =      MenuItem("Slowest Speed   ");
  221.  
  222.     void setup()
  223.     {
  224.     //
  225.     // Encoder Setup
  226.     //
  227.     pinMode(encoderPinA, INPUT);
  228.     pinMode(encoderPinB, INPUT);
  229.     pinMode(encoderButton, INPUT);
  230.     // zet de pullup weerstanden aan
  231.     digitalWrite(encoderPinA, HIGH);
  232.     digitalWrite(encoderPinB, HIGH);
  233.     digitalWrite(encoderButton, HIGH);
  234.     // encoder pin op interrupt 0 (pin 2)
  235.     attachInterrupt(0, doEncoderA, CHANGE);
  236.     // encoder pin op interrupt 1 (pin 3)
  237.     attachInterrupt(1, doEncoderB, CHANGE);
  238.     //
  239.     // LED Setup
  240.     //
  241.     pinMode(REDLEDPIN, OUTPUT);
  242.     pinMode(GREENLEDPIN, OUTPUT);
  243.     pinMode(BLUELEDPIN, OUTPUT);
  244.     //
  245.     // LEDS uit bij het opstarten
  246.     //
  247.     analogWrite(REDLEDPIN,   0);
  248.     analogWrite(GREENLEDPIN, 0);
  249.     analogWrite(BLUELEDPIN,  0);
  250.     //
  251.     // LCD Menu Setup
  252.     //
  253.     lcd.begin(16, 2);               // start de lcd display functies op. 16 karakters per regel, 2 regels in totaal
  254.     lcd.setCursor(0,0);             // zet de cursor in het lcd display op regel 0 en de eerste karakter positie (0)
  255.     lcd.print("Mood Light");        // zet Mood Light neer op de eerste regel, helemaal links
  256.     delay(2000);                    // wacht 2 seconden
  257.     lcd.setCursor(0,1);             // zet de cursor in het lcd display op regel 1 en de eerste karakter positie (0)
  258.     lcd.print("Turn Encoder    ");  // zet Mood Light neer op de tweede regel, helemaal links
  259.     }  
  260.    
  261.     void loop()
  262.     {
  263.     moodlightModes();            // Finite State Machine moodlight Modes loop
  264.     menuSetup();                 // menu loop
  265.     readButtons();               // lees de knop af en houdt de encoder in de gaten voor het geval eraan gedraaid wordt
  266.     //
  267.     // Encoder
  268.     //
  269.     rotating = true;             // reset de debouncer
  270.     if (lastReportedPos != encoderPos) {
  271.     lastReportedPos = encoderPos;
  272.       }
  273.     if (digitalRead(encoderButton) == LOW )  {
  274.     encoderPos = 30000;
  275.       }
  276.     }
  277.     // Interrupt A 's veranderende status
  278.     void doEncoderA(){
  279.     // debounce
  280.     if ( rotating ) delay (1);  // wacht heel 1 milliseconde totdat het bouncen gedaan is
  281.     // test of de verandering echt heeft plaatsgevonden
  282.       if( digitalRead(encoderPinA) != A_set ) {  // debounce nogmaals
  283.         A_set = !A_set;
  284.     // pas de teller omhoog aan + als A naar B leid
  285.     if ( A_set && !B_set )
  286.       encoderPos += 5;               // verhoogd met een waarde van 5 vanaf 30000, het menu reageert door een menu optie naar boven te gaan
  287.         rotating = false;            // niet meer debouncen totdat de loop() opnieuw afgedraaid wordt
  288.       }
  289.     }
  290.     // Interrupt op B's veranderde status, net zoals A hierboven deed
  291.     void doEncoderB(){
  292.       if ( rotating ) delay (1);
  293.         if( digitalRead(encoderPinB) != B_set ) {
  294.           B_set = !B_set;
  295.     //  pas de teller met - 1 aan as B naar A leid
  296.     if( B_set && !A_set )
  297.       encoderPos -= 5;              // verlaagd met een waarde van 5 vanaf 30000, het menu reageert door een menu optie naar beneden te gaan
  298.         rotating = false;
  299.       }
  300.     }
  301.      
  302.     void menuSetup()
  303.     {
  304.  
  305.     // voeg het menu bestand toe aan de menu root
  306.     menu.getRoot().add(presetmode); // de eerste menu optie is presetmode (Preset Mode)
  307.  
  308.           // Hoofd Menu setup
  309.                   presetmode.addAfter(strobomode);
  310.                   strobomode.addAfter(_randommode);   // het was noodzakelijk om een underscore _ voor randommode neer te zetten, anders kreeg ik steeds een  Error melding  
  311.                   _randommode.addAfter(presetmode);
  312.                  
  313.                   // Mode menu setup                
  314.                   presetmode.addRight(white);                      
  315.                         green3.addAfter(white);
  316.                         green2.addAfter(green3);
  317.             green1.addAfter(green2);
  318.                         orange2.addAfter(green1);
  319.                         orange1.addAfter(orange2);
  320.                         yellow2.addAfter(orange1);
  321.                         yellow1.addAfter(yellow2);
  322.                         blue3.addAfter(yellow1);
  323.                         blue2.addAfter(blue3);
  324.                         blue1.addAfter(blue2);
  325.                         purple3.addAfter(blue1);
  326.                         purple2.addAfter(purple3);
  327.                         purple1.addAfter(purple2);
  328.                         white.addAfter(purple1);
  329.                         // vanuit iedere kleur optie in Preset mode willen we terug kunnen naar menuoptie Preset mode
  330.                         green3.addLeft(presetmode);
  331.                         green2.addLeft(presetmode);
  332.                         green1.addLeft(presetmode);
  333.                         orange2.addLeft(presetmode);
  334.                         orange1.addLeft(presetmode);  
  335.                         yellow2.addLeft(presetmode);  
  336.                         yellow1.addLeft(presetmode);
  337.                         blue3.addLeft(presetmode);
  338.                         blue2.addLeft(presetmode);
  339.                         blue1.addLeft(presetmode);            
  340.                         purple3.addLeft(presetmode);
  341.                         purple2.addLeft(presetmode);
  342.             purple1.addLeft(presetmode);
  343.                         white.addLeft(presetmode);    
  344.                 strobomode.addRight(strobespeed);
  345.                        strobespeed.addRight(flashadjust30);
  346.                           flashadjust40.addAfter(flashadjust30);
  347.                           flashadjust50.addAfter(flashadjust40);
  348.                           flashadjust60.addAfter(flashadjust50);
  349.                           flashadjust70.addAfter(flashadjust60);
  350.                           flashadjust80.addAfter(flashadjust70);
  351.                           flashadjust90.addAfter(flashadjust80);
  352.                           flashadjust100.addAfter(flashadjust90);
  353.                           flashadjust120.addAfter(flashadjust100);
  354.                           flashadjust140.addAfter(flashadjust120);
  355.                           flashadjust160.addAfter(flashadjust140);
  356.                           flashadjust180.addAfter(flashadjust160);
  357.                           flashadjust200.addAfter(flashadjust180);
  358.                           flashadjust220.addAfter(flashadjust200);
  359.                           flashadjust240.addAfter(flashadjust220);
  360.                           flashadjust260.addAfter(flashadjust240);
  361.                         strobespeed.addAfter(strobowhite);  
  362.                         strobowhite.addAfter(strobored);
  363.                         strobored.addAfter(strobogreen);
  364.                         strobogreen.addAfter(stroboblue);
  365.                         stroboblue.addAfter(strobopurple);
  366.                         strobopurple.addAfter(stroboyellow);
  367.                         stroboyellow.addAfter(strobocoolblue);
  368.                         strobocoolblue.addAfter(strobespeed);
  369.                         // vanuit iedere optie in het aanpassen van de snelheid in Stroboscope mode en het kiezen van een kleur willen we terug kunnen naar menuoptie stroboscope mode
  370.                             strobocoolblue.addLeft(strobomode);
  371.                             stroboyellow.addLeft(strobomode);
  372.                             strobopurple.addLeft(strobomode);
  373.                             stroboblue.addLeft(strobomode);
  374.                             strobogreen.addLeft(strobomode);
  375.                             strobored.addLeft(strobomode);
  376.                             strobowhite.addLeft(strobomode);
  377.                         flashadjust260.addLeft(strobespeed);
  378.                         flashadjust240.addLeft(strobespeed);
  379.                         flashadjust220.addLeft(strobespeed);
  380.                         flashadjust200.addLeft(strobespeed);
  381.                         flashadjust180.addLeft(strobespeed);
  382.                         flashadjust160.addLeft(strobespeed);
  383.                         flashadjust140.addLeft(strobespeed);
  384.                         flashadjust120.addLeft(strobespeed);
  385.                         flashadjust100.addLeft(strobespeed);
  386.                         flashadjust90.addLeft(strobespeed);
  387.                         flashadjust80.addLeft(strobespeed);
  388.                         flashadjust70.addLeft(strobespeed);
  389.                         flashadjust60.addLeft(strobespeed);
  390.                         flashadjust50.addLeft(strobespeed);
  391.                         flashadjust40.addLeft(strobespeed);
  392.                         flashadjust30.addLeft(strobespeed);
  393.                         strobespeed.addLeft(strobomode);            
  394.                 _randommode.addRight(randomspeed);
  395.                     randomspeed.addRight(randomadjust30);
  396.                           randomadjust260.addAfter(randomadjust240);
  397.                           randomadjust240.addAfter(randomadjust220);
  398.                           randomadjust220.addAfter(randomadjust200);
  399.                           randomadjust200.addAfter(randomadjust180);
  400.                           randomadjust180.addAfter(randomadjust160);
  401.                           randomadjust160.addAfter(randomadjust140);
  402.                           randomadjust140.addAfter(randomadjust120);
  403.                           randomadjust120.addAfter(randomadjust100);
  404.                           randomadjust100.addAfter(randomadjust90);
  405.                           randomadjust90.addAfter(randomadjust80);
  406.                           randomadjust80.addAfter(randomadjust70);
  407.                           randomadjust70.addAfter(randomadjust60);
  408.                           randomadjust60.addAfter(randomadjust50);
  409.                           randomadjust50.addAfter(randomadjust40);
  410.                           randomadjust40.addAfter(randomadjust30);                          
  411.                         // vanuit iedere optie in het aanpassen van de snelheid in random mode willen we terug kunnen naar menuoptie Random mode
  412.                         randomadjust260.addLeft(_randommode);
  413.                         randomadjust240.addLeft(_randommode);
  414.                         randomadjust220.addLeft(_randommode);
  415.                         randomadjust200.addLeft(_randommode);
  416.                         randomadjust180.addLeft(_randommode);
  417.                         randomadjust160.addLeft(_randommode);
  418.                         randomadjust140.addLeft(_randommode);
  419.                         randomadjust120.addLeft(_randommode);
  420.                         randomadjust100.addLeft(_randommode);
  421.                         randomadjust90.addLeft(_randommode);
  422.                         randomadjust80.addLeft(_randommode);
  423.                         randomadjust70.addLeft(_randommode);
  424.                         randomadjust60.addLeft(_randommode);
  425.                         randomadjust50.addLeft(_randommode);
  426.                         randomadjust40.addLeft(_randommode);
  427.                         randomadjust30.addLeft(_randommode);                              
  428.     }
  429.    
  430.     void menuChanged(MenuChangeEvent changed)
  431.     {
  432.        lcd.setCursor(0,0);                // zet de cursor in het lcd display op regel 0 en de eerste karakter positie (0)
  433.        printLine(0, "Menu change     ");  // wis de eerste regel en zet Menu Change neer
  434.        lcd.setCursor(0,1);                // zet de cursor in het lcd display op regel 1 en de eerste karakter positie (0)
  435.        lcd.print(changed.from.getName()); // zet de naam neer van een vorige menukeuze optie waar je voor kunt kiezen
  436.        lcd.print(" ");                    // sla 1 karakter positie over
  437.        lcd.setCursor(0,1);                // zet de cursor in het lcd display op regel 1 en de eerste karakter positie (0)
  438.        lcd.print(changed.to.getName());   // zet de naam neer van de huidige menukeuze optie waar je voor kunt kiezen
  439.        //
  440.        // menukeuze opties en de opdracht die uitgevoerd moet worden (deze reageren al als er naartoe genavigeert wordt.
  441.        // In het Use gedeelte reageren ze pas wanneer de knop langer ingedrukt is geweest dan opgegeven bij holdTime)
  442.        //
  443.        MenuItem newMenuItem=changed.to;
  444.           if(newMenuItem.getName()==menu.getRoot()){
  445.              
  446.           }else if(newMenuItem.getName()=="Preset Mode     "){
  447.           }else if(newMenuItem.getName()=="Stroboscope Mode"){    
  448.           }else if(newMenuItem.getName()=="Random Mode     "){    
  449.             }else if(newMenuItem.getName()=="Fastest Speed   "){
  450.               flashamount = 30;
  451.             }else if(newMenuItem.getName()=="S             IF"){
  452.               flashamount = 40;
  453.             }else if(newMenuItem.getName()=="S            I F"){
  454.               flashamount = 50;  
  455.             }else if(newMenuItem.getName()=="S           I  F"){
  456.               flashamount = 60;
  457.             }else if(newMenuItem.getName()=="S          I   F"){
  458.               flashamount = 70;
  459.             }else if(newMenuItem.getName()=="S         I    F"){
  460.               flashamount = 80;
  461.             }else if(newMenuItem.getName()=="S        I     F"){
  462.               flashamount = 100;
  463.             }else if(newMenuItem.getName()=="S       I      F"){
  464.               flashamount = 120;
  465.             }else if(newMenuItem.getName()=="S      I       F"){
  466.               flashamount = 130;  
  467.             }else if(newMenuItem.getName()=="S     I        F"){
  468.               flashamount = 140;  
  469.             }else if(newMenuItem.getName()=="S    I         F"){
  470.               flashamount = 160;  
  471.             }else if(newMenuItem.getName()=="S   I          F"){
  472.               flashamount = 180;  
  473.             }else if(newMenuItem.getName()=="S  I           F"){
  474.               flashamount = 200;  
  475.             }else if(newMenuItem.getName()=="S I            F"){
  476.               flashamount = 220;
  477.             }else if(newMenuItem.getName()=="SI             F"){
  478.               flashamount = 240;  
  479.             }else if(newMenuItem.getName()=="Slowest Speed   "){
  480.               flashamount = 260;  
  481.               }else if(newMenuItem.getName()=="White           "){
  482.                 ledstatecolors = whiteledstate;
  483.               }else if(newMenuItem.getName()=="Red             "){
  484.                 ledstatecolors = redledstate;
  485.               }else if(newMenuItem.getName()=="Green           "){
  486.                 ledstatecolors = greenledstate;
  487.               }else if(newMenuItem.getName()=="Blue            "){
  488.                 ledstatecolors = blueledstate;
  489.               }else if(newMenuItem.getName()=="Purple          "){
  490.                 ledstatecolors = purpleledstate;
  491.               }else if(newMenuItem.getName()=="Yellow          "){
  492.                 ledstatecolors = yellowledstate;
  493.               }else if(newMenuItem.getName()=="Cool Blue       "){
  494.                 ledstatecolors = coolblueledstate;
  495.                 }else if(newMenuItem.getName()=="1. White        "){
  496.                   presetcolors = whitecolor;
  497.                 }else if(newMenuItem.getName()=="2. Dark Purple  "){
  498.                   presetcolors = purple1color;
  499.                 }else if(newMenuItem.getName()=="3. Medium Purple"){
  500.                   presetcolors = purple2color;
  501.                 }else if(newMenuItem.getName()=="4. Light Purple "){
  502.                   presetcolors = purple3color;
  503.                 }else if(newMenuItem.getName()=="5. Dark Blue    "){
  504.                   presetcolors = blue1color;
  505.                 }else if(newMenuItem.getName()=="6. Medium Blue  "){
  506.                   presetcolors = blue2color;
  507.                 }else if(newMenuItem.getName()=="7. Light Blue   "){
  508.                   presetcolors = blue3color;
  509.                 }else if(newMenuItem.getName()=="8. Dark Yellow  "){
  510.                   presetcolors = yellow1color;
  511.                 }else if(newMenuItem.getName()=="9. Yellow       "){
  512.                   presetcolors = yellow2color;
  513.                 }else if(newMenuItem.getName()=="10. Dark Orange "){
  514.                   presetcolors = orange1color;
  515.                 }else if(newMenuItem.getName()=="11. Orange      "){
  516.                   presetcolors = orange2color;
  517.                 }else if(newMenuItem.getName()=="12. Bright Green"){
  518.                   presetcolors = green1color;
  519.                 }else if(newMenuItem.getName()=="13. Medium Green"){
  520.                   presetcolors = green2color;
  521.                 }else if(newMenuItem.getName()=="14. Light Green "){
  522.                   presetcolors = green3color;
  523.                   }
  524.     }
  525.    
  526.     void menuUsed(MenuUseEvent used)
  527.     {
  528.          lcd.setCursor(0,0);              // zet de cursor in het lcd display op regel 0 en de eerste karakter positie (0)
  529.          lcd.print("Menu use        ");   // zet Menu use neer op de eerste regel en begin helemaal links
  530.          lcd.setCursor(0,1);              // zet de cursor in het lcd display op regel 1 en de eerste karakter positie (0)
  531.          lcd.print(used.item.getName());  // zet de naam neer die je gekozen hebt door de knop langer ingedrukt te houden dan opgegeven bij holdTime
  532.          //
  533.          // als de knop langer dan opgegeven bij holdTime ingedrukt wordt bevestig je 1 van de volgende menuopties
  534.          //  
  535.          MenuItem choosenMenuItem=used.item;
  536.            if(choosenMenuItem.getName()==menu.getRoot()){
  537.            
  538.              }else if(choosenMenuItem.getName()=="Preset Mode     "){ // als je kiest voor Preset Mode dan
  539.              
  540.                moodmodes = presetleds;                                // wordt de case presetleds van de Finite State Machine geactiveerd
  541.              
  542.              }else if(choosenMenuItem.getName()=="Stroboscope Mode"){ // als je kiest voor Stroboscope Mode dan
  543.      
  544.                moodmodes = blinking;                                  // wordt de case blinking van de Finite State Machine geactiveerd
  545.              
  546.              }else if(choosenMenuItem.getName()=="Random Mode     "){ // als je kiest voor Random Mode dan
  547.              
  548.                moodmodes = randommode;                                // wordt de case randommode van de Finite State Machine geactiveerd
  549.              }
  550.     }
  551.    
  552.     void  readButtons(){             // lees de knop af en of de encoder naar links of naar rechts wordt gedraaid. Voeg acties toe aan de encoder waarde.
  553.    
  554.         if (encoderPos <= 29995 ) {  // als de encoder naar links gedraaid is en de waarde dus 29995 wordt
  555.          
  556.             menu.moveDown();         // navigeer dan naar beneden in het menu
  557.             encoderPos=30000;        // en zet daarna de waarde weer in het midden; 30000
  558.            
  559.         } else if (encoderPos >= 30005 ) { // als de encoder naar rechts gedraaid is en de waarde dus 30005 wordt
  560.            
  561.             menu.moveUp();          // navigeer dan naar boven in het menu
  562.             encoderPos=30000;       // en zet daarna de waarde weer in het midden; 30000
  563.            
  564.                 } else {
  565.                   encoderPos=30000; // wordt er niets gedaan met de encoder dan blijft de waarde in het midden; 30000
  566.                 }
  567.    
  568.     // lees de status van de knop
  569.     buttonVal = digitalRead(encoderButton);
  570.    
  571.     // test of de knop wordt ingedrukt en sla op hoelang de knop ingedrukt wordt
  572.     if (buttonVal == LOW && buttonLast == HIGH && (millis() - btnUpTime) > long(debounceDelayButton))
  573.     {
  574.     btnDnTime = millis();
  575.     }
  576.    
  577.     // testen of de knop ingedrukt is geweest en sla de tijd op hoelang dat heeft geduurd
  578.     if (buttonVal == HIGH && buttonLast == LOW && (millis() - btnDnTime) > long(debounceDelayButton))
  579.     {
  580.     if (ignoreUp == false) {
  581.      
  582.       menu.moveLeft();    // naar links in het menu
  583.    
  584.     }else { ignoreUp = false;
  585.     btnUpTime = millis();
  586.     }
  587.     }
  588.    
  589.     // Testen of de knop langer ingedrukt is dan opgegeven bij holdTime
  590.     if (buttonVal == LOW && (millis() - btnDnTime) > long(holdTime))
  591.     {
  592.      
  593.       menu.use();         // bevestigen
  594.       menu.moveRight();   // naar rechts in het menu
  595.      
  596.     ignoreUp = true;
  597.     btnDnTime = millis();
  598.     }
  599.    
  600.     buttonLast = buttonVal;
  601.     }
  602.     // Dit stukje code zorgt ervoor dat wanneer je printLine gebruikt in plaats van lcd.print, de regel eerst volledig gewist wordt en er geen karakters van een vorig
  603.     // lcd.print commando blijven staan. Voorbeeld: printLine(0, "Menu change     ");  0 is de eerste regel op de display, 1 zou de tweede regel zijn.
  604.     void printLine(uint8_t regel, char * text) {
  605.       lcd.setCursor(0, regel);
  606.       lcd.print("                ");
  607.       lcd.setCursor(0, regel);
  608.       lcd.print(text);
  609.     }
  610.    
  611.     //
  612.     // Finite State Machine MoodlightModi
  613.     //
  614.     void  moodlightModes() {
  615.            
  616.       switch(moodmodes) {
  617.        
  618.          case presetleds:
  619.          
  620.                  analogWrite(REDLEDPIN,   0);
  621.                  analogWrite(GREENLEDPIN, 0);
  622.                  analogWrite(BLUELEDPIN,  0);
  623.            
  624.              switch(presetcolors) {
  625.                
  626.                  case whitecolor:
  627.                  analogWrite(REDLEDPIN,   255);
  628.                  analogWrite(GREENLEDPIN, 255);
  629.                  analogWrite(BLUELEDPIN,  255);
  630.                  break;
  631.                  case purple1color:
  632.                  analogWrite(REDLEDPIN,   255);
  633.                  analogWrite(GREENLEDPIN, 0);
  634.                  analogWrite(BLUELEDPIN,  255);
  635.                  break;
  636.                  case purple2color:
  637.                  analogWrite(REDLEDPIN,   255);
  638.                  analogWrite(GREENLEDPIN, 25);
  639.                  analogWrite(BLUELEDPIN,  255);
  640.                  case purple3color:
  641.                  analogWrite(REDLEDPIN,   255);
  642.                  analogWrite(GREENLEDPIN, 100);
  643.                  analogWrite(BLUELEDPIN,  255);
  644.                  case blue1color:
  645.                  analogWrite(REDLEDPIN,   0);
  646.                  analogWrite(GREENLEDPIN, 0);
  647.                  analogWrite(BLUELEDPIN,  255);
  648.                  break;
  649.                  case blue2color:
  650.                  analogWrite(REDLEDPIN,   0);
  651.                  analogWrite(GREENLEDPIN, 50);
  652.                  analogWrite(BLUELEDPIN,  255);
  653.                  case blue3color:
  654.                  analogWrite(REDLEDPIN,   255);
  655.                  analogWrite(GREENLEDPIN, 100);
  656.                  analogWrite(BLUELEDPIN,  255);
  657.                  case yellow1color:
  658.                  analogWrite(REDLEDPIN,   255);
  659.                  analogWrite(GREENLEDPIN, 255);
  660.                  analogWrite(BLUELEDPIN,  0);
  661.                  break;
  662.                  case yellow2color:
  663.                  analogWrite(REDLEDPIN,   255);
  664.                  analogWrite(GREENLEDPIN, 100);
  665.                  analogWrite(BLUELEDPIN,  0);
  666.                  break;
  667.                  case orange1color:
  668.                  analogWrite(REDLEDPIN,   255);
  669.                  analogWrite(GREENLEDPIN, 50);
  670.                  analogWrite(BLUELEDPIN,  0);
  671.                  break;
  672.                  case orange2color:
  673.                  analogWrite(REDLEDPIN,   255);
  674.                  analogWrite(GREENLEDPIN, 25);
  675.                  analogWrite(BLUELEDPIN,  0);
  676.                  break;
  677.                  case green1color:
  678.                  analogWrite(REDLEDPIN,   150);
  679.                  analogWrite(GREENLEDPIN, 255);
  680.                  analogWrite(BLUELEDPIN,  10);
  681.                  break;
  682.                  case green2color:
  683.                  analogWrite(REDLEDPIN,   100);
  684.                  analogWrite(GREENLEDPIN, 255);
  685.                  analogWrite(BLUELEDPIN,  10);
  686.                  break;
  687.                  case green3color:
  688.                  analogWrite(REDLEDPIN,   25);
  689.                  analogWrite(GREENLEDPIN, 255);
  690.                  analogWrite(BLUELEDPIN,  0);
  691.                  break;
  692.             }
  693.      
  694.         break;
  695.    
  696.         case blinking:
  697.        
  698.             switch(ledstatecolors) {
  699.              
  700.               case whiteledstate:
  701.                   if (millis() > delayCtr) {
  702.                   analogWrite(REDLEDPIN, ledState);
  703.                   analogWrite(GREENLEDPIN, ledState);
  704.                   analogWrite(BLUELEDPIN, ledState);  
  705.                   }
  706.                   break;
  707.               case redledstate:
  708.                   if (millis() > delayCtr) {
  709.                   analogWrite(REDLEDPIN, ledState);
  710.                   analogWrite(GREENLEDPIN, LOW);
  711.                   analogWrite(BLUELEDPIN, LOW);  
  712.                   }
  713.                   break;
  714.               case greenledstate:
  715.                   if (millis() > delayCtr) {
  716.                   analogWrite(REDLEDPIN, LOW);
  717.                   analogWrite(GREENLEDPIN, ledState);
  718.                   analogWrite(BLUELEDPIN, LOW);  
  719.                   }
  720.                   break;
  721.               case blueledstate:
  722.                   if (millis() > delayCtr) {
  723.                   analogWrite(REDLEDPIN, LOW);
  724.                   analogWrite(GREENLEDPIN, LOW);
  725.                   analogWrite(BLUELEDPIN, ledState);  
  726.                   }
  727.                   break;
  728.               case purpleledstate:
  729.                   if (millis() > delayCtr) {
  730.                   analogWrite(REDLEDPIN, ledState);
  731.                   analogWrite(GREENLEDPIN, LOW);
  732.                   analogWrite(BLUELEDPIN, ledState);  
  733.                   }
  734.                   break;
  735.               case yellowledstate:
  736.                   if (millis() > delayCtr) {
  737.                   analogWrite(REDLEDPIN, ledState);
  738.                   analogWrite(GREENLEDPIN, ledState);
  739.                   analogWrite(BLUELEDPIN, LOW);  
  740.                   }
  741.                   break;
  742.               case coolblueledstate:
  743.                   if (millis() > delayCtr) {
  744.                   analogWrite(REDLEDPIN, LOW);
  745.                   analogWrite(GREENLEDPIN, ledState);
  746.                   analogWrite(BLUELEDPIN, ledState);  
  747.                   }
  748.                   break;        
  749.             }
  750.            
  751.         flashamount = constrain(flashamount, 30, 260);                        // beperkt de waarde van flashamount tot een min. van 30 en een max. van 260
  752.                  
  753.         strobe_delay = minimum_delay + flashamount * analog_value_multiplier; // deze waarden zijn aan te passen in de code boven void setup()
  754.        
  755.         currentMillis = millis();                                             // millis() is een telsysteem van de Arduino. Hij telt het aantal milliseconden vanaf dat de arduino aan gaat
  756.        
  757.         if(currentMillis - previousMillis > strobe_delay) {
  758.         // sla de laatste keer dat de leds aan geweest zijn op
  759.         previousMillis = currentMillis;
  760.         // als de led aan is, zet hem uit en andersom
  761.         if (ledState == LOW)
  762.         brightness = 255;
  763.          ledState = brightness;
  764.          delayMicroseconds(on_time);
  765.         }
  766.         else
  767.         {
  768.           ledState = LOW; // anders, laat de led uit
  769.       }
  770.  
  771.     if (strobe_delay > 10000){
  772.    
  773.         delay((strobe_delay - on_time) / 1000);
  774.    
  775.     }else{
  776.    
  777.       delayMicroseconds(strobe_delay - on_time);
  778.     }
  779.    
  780.    
  781.     break;
  782.        
  783.       case randommode:
  784.      
  785.         randomSeed(analogRead(6));                             // neem de waarde van analoge ingang 5 als startpunt en genereer vanaf daar pseudo willekeurige getallen als basis voor de kleur
  786.         if (millis() > flashamount) {                          // dit is een manier om millis te gebruiken in plaats van delay, zodat het menu goed blijft werken
  787.         currentMillis = millis();                              // en niet vertraagt. Anders moet je lang wachten voordat draaien aan de encoder effect heeft.
  788.         if(currentMillis - previousMillis > (flashamount/3)) { // dit bepaalt de snelheid waarmee de leds van felheid en dus van kleur veranderen
  789.         for (int x=0; x<3; x++) {                              // for loop, doe drie keer dit....
  790.         INC[x] = (RGB1[x] - RGB2[x]) / 256; }                  // De verhogings, verlagingswaarde is afhankelijk van RGB1 - RGB2 gedeeld door 256, RGB2
  791.         for (int x=0; x<256; x++) {                            // for loop, doe 256 keer dit.....
  792.         red = int(RGB1[0]);                                    // red = de waarde van RGB1[0]
  793.         green = int(RGB1[1]);                                  // green = de waarde van RGB1[1]
  794.         blue = int(RGB1[2]);                                   // blue = de waarde van RGB[2]
  795.         analogWrite (REDLEDPIN, red);                          // laad de rode led branden afhankelijk van de waarde opgeslagen in red
  796.         analogWrite (GREENLEDPIN, green);                      // laad de groene led branden afhankelijk van de waarde opgeslagen in green
  797.         analogWrite (BLUELEDPIN, blue);                        // laad de blauwe led branden afhankelijk van de waarde opgeslagen in blue
  798.         if (millis() > (flashamount)){                         // dit bepaalt de snelheid van het overvloeien naar een andere kleur
  799.         if(currentMillis - previousMillis > (flashamount/6)) {
  800.         RGB1[0] -= INC[0];                                     // zorgt ervoor dat de leds overvloeien naar een andere kleur -= zorgt voor het verminderen van de waarde
  801.         RGB1[1] -= INC[1];
  802.         RGB1[2] -= INC[2];
  803.         previousMillis = currentMillis;
  804.              }
  805.           }
  806.         }
  807.         for (int x=0; x<3; x++) {                              // dit gedeelte zorgt ervoor dat de kans groter wordt dat er ook af en toe primary kleur voorkomen
  808.         RGB2[x] = random(556)-300;                             // en niet alleen pastel kleuren
  809.         RGB2[x] = constrain(RGB2[x], 0, 255);
  810.             }
  811.           }
  812.         }
  813.     break;
  814.    
  815.       }
  816.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement