Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1.  
  2. //Libs
  3. #include "lightuino5.h"
  4. #include "FWB.h"
  5.  
  6. #define NBR_STAIR_STEP 14
  7.  
  8. #define BP_UP 0
  9. #define BP_DOWN 1
  10. #define BP_LED 13
  11.  
  12. #define STEP_DELAY 200
  13.  
  14. #define ANI_UP 0
  15. #define ANI_DOWN 1
  16. #define ANI_MAX 3
  17.  
  18. int _brightness = 255; // de 30 à 255
  19.  
  20. FWB bpUP;
  21. FWB bpDOWN;
  22.  
  23. LightuinoSink sinks;
  24. unsigned long int a = 0, b = 0;
  25. unsigned char c = 0;
  26.  
  27. int _currentAnimId = 0;
  28. int _currentAnimStep = 0;
  29. int _increment = 1;
  30. boolean _animated = false;
  31. int _timeToWay = STEP_DELAY;
  32. int _multiplier = 75;
  33. long _lastTime = 0;
  34.  
  35. #pragma region "To Reset datas, for emulator only"
  36. void _Reset()
  37. {
  38.     _brightness = 30;
  39.     a = 0, b = 0;c = 0;
  40.     _currentAnimId = 0;
  41.     _currentAnimStep = 0;
  42.     _increment = 1;
  43.     _animated = false;
  44.     _timeToWay = STEP_DELAY;
  45.     _lastTime = 0;
  46. }
  47. #pragma endregion
  48.  
  49. void AllOff()
  50. {
  51.     a = 0; b = 0; c = 0;
  52.     sinks.set(a, b, c);
  53. }
  54. void AllOn()
  55. {
  56.     a = 0xffffffff; b = 0xffffffff; c = B00111111;
  57.     sinks.set(a, b, c);
  58. }
  59. void SetOut(int id, boolean state)
  60. {
  61.     if (state)
  62.         setbit(id, &a, &b, &c);
  63.     else
  64.         clearbit(id, &a, &b, &c);
  65.     sinks.set(a, b, c);
  66. }
  67.  
  68. //Animations
  69. void AnimUP()
  70. {
  71.     //LED = ON => UP
  72.     //Wait
  73.     //LED => OFF => UP
  74.     //End anim
  75.  
  76.     long m = millis();
  77.     boolean onState = _currentAnimStep < NBR_STAIR_STEP;
  78.     //Initialization
  79.     if (_currentAnimStep == 0)
  80.     {
  81.         AllOff();
  82.         SetOut(_currentAnimStep, onState);
  83.         _currentAnimStep += _increment;
  84.         _lastTime = m;
  85.     }
  86.     //Power on, wait, and power off
  87.     if ((m - _lastTime) > _timeToWay)
  88.     {
  89.         int outpin = _currentAnimStep;
  90.         if (!onState) outpin = _currentAnimStep - NBR_STAIR_STEP;
  91.  
  92.         SetOut(outpin, onState);
  93.         _currentAnimStep += _increment;
  94.         _lastTime = m;
  95.         if (_currentAnimStep == NBR_STAIR_STEP)
  96.             _timeToWay = STEP_DELAY * _multiplier;
  97.         if (_currentAnimStep == NBR_STAIR_STEP + 1)
  98.             _timeToWay = STEP_DELAY;
  99.     }
  100.  
  101.     //End of anim
  102.     if (_currentAnimStep == NBR_STAIR_STEP * 2)
  103.         _animated = false;
  104. }
  105. void AnimDOWN()
  106. {
  107.     //LED = ON => DOWN
  108.     //Wait
  109.     //LED => OFF => DOWN
  110.     //End anim
  111.  
  112.     long m = millis();
  113.     boolean onState = _currentAnimStep > -1;
  114.     //Initialization
  115.     if (_currentAnimStep == NBR_STAIR_STEP - 1)
  116.     {
  117.         AllOff();
  118.         SetOut(_currentAnimStep, onState);
  119.         _currentAnimStep += _increment;
  120.         _lastTime = m;
  121.     }
  122.     //Power on, wait, and power off
  123.     if ((m - _lastTime) > _timeToWay)
  124.     {
  125.         int outpin = _currentAnimStep;
  126.         if (!onState) outpin = _currentAnimStep + NBR_STAIR_STEP;
  127.  
  128.         SetOut(outpin, onState);
  129.         _currentAnimStep += _increment;
  130.         _lastTime = m;
  131.         if (_currentAnimStep == -1)
  132.             _timeToWay = STEP_DELAY * _multiplier;
  133.         if (_currentAnimStep == -2)
  134.             _timeToWay = STEP_DELAY;
  135.     }
  136.  
  137.     //End of anim
  138.     if (_currentAnimStep == -(NBR_STAIR_STEP + 1))
  139.         _animated = false;
  140.  
  141. }
  142.  
  143. void Anim1()
  144. {
  145.     //Chenillard (aller-retour de 3 LED allum�es)
  146.     long m = millis();
  147.     boolean onState = _currentAnimStep < NBR_STAIR_STEP;
  148.     //Initialization
  149.     if (_currentAnimStep == 0)
  150.     {
  151.         AllOff();
  152.         SetOut(_currentAnimStep, onState);
  153.         _currentAnimStep += _increment;
  154.         _lastTime = m;
  155.     }
  156.  
  157.  
  158.  
  159. }
  160.  
  161.  
  162. void (*_animations[ANI_MAX])(void) = {AnimUP, AnimDOWN, Anim1};
  163. // Btn events
  164. void OnClick(int pin)
  165. {
  166.     //if (_animated) //Animation already in progress
  167.     //{ }
  168.     //else //Launch animation
  169.     {
  170.         if (pin == BP_UP)
  171.         {
  172.             _currentAnimId = 0;
  173.             _currentAnimStep = 0;
  174.             _timeToWay = STEP_DELAY;
  175.             _increment = 1;
  176.         }
  177.         else
  178.         {
  179.             _currentAnimId = 1;
  180.             _currentAnimStep = NBR_STAIR_STEP - 1;
  181.             _timeToWay = STEP_DELAY;
  182.             _increment = -1;
  183.         }
  184.         _animated = true;
  185.     }
  186. }
  187. void OnDblClick(int pin) { }
  188. void OnLongPress(int pin) { }
  189. void OnVLongPress(int pin) { }
  190.  
  191.  
  192. void setup()
  193. {
  194.     bpUP.Configure(BP_UP);
  195.     bpUP.OnClick = OnClick;
  196.     bpUP.OnDblClick = OnDblClick;
  197.     bpUP.OnLongPress = OnLongPress;
  198.     bpUP.OnVLongPress = OnVLongPress;
  199.  
  200.     bpDOWN.Configure(BP_DOWN);
  201.     bpDOWN.OnClick = OnClick;
  202.     bpDOWN.OnDblClick = OnDblClick;
  203.     bpDOWN.OnLongPress = OnLongPress;
  204.     bpDOWN.OnVLongPress = OnVLongPress;
  205.  
  206.     sinks.setBrightness(_brightness);
  207.  
  208.     pinMode(BP_LED, OUTPUT);
  209.         SetOut(0, HIGH);
  210. }
  211. void loop()
  212. {
  213.     if (digitalRead(BP_UP) == HIGH)
  214.         digitalWrite(BP_LED, HIGH);
  215.     else if (digitalRead(BP_DOWN) == HIGH)
  216.         digitalWrite(BP_LED, HIGH);
  217.     else
  218.         digitalWrite(BP_LED, LOW);
  219.  
  220.     // Test button state
  221.     bpUP.CheckBP();
  222.     bpDOWN.CheckBP();
  223.  
  224.     // Call next step
  225.     if (_animated && _animations[_currentAnimId])
  226.         _animations[_currentAnimId]();
  227. }
  228.  
  229.