Facebook
From Marcin, 6 Years ago, written in C++.
Embed
Download Paste or View Raw
Hits: 255
  1. #include <math.h>
  2.  
  3. const char data = 11;
  4. const char clock = 12;
  5. const char latch = 8;
  6. const char startButton = 2;  // przerwanie 0
  7. const char stopButton = 3;  // przerwanie 1
  8. const char selectMode_1 = 4;
  9. const char selectMode_2 = 5;  // zmienne do wyboru trybu swiecenia - max. 4 mozliwosci
  10. const unsigned int setDelay  = 50; // opoznienie w ms
  11.  
  12. char statusOfWork = 0; // 0 - stop; 1 - start
  13.  
  14. void startWorking();
  15. void stopWorking();
  16. void mode_1();
  17. void mode_2();
  18. void mode_3();
  19.  
  20. void setup()
  21. {
  22.   pinMode(data, OUTPUT);
  23.   pinMode(clock, OUTPUT);  
  24.   pinMode(latch, OUTPUT);  
  25.   pinMode(startButton, INPUT_PULLUP);
  26.   pinMode(stopButton, INPUT_PULLUP);
  27.   pinMode(selectMode_1, INPUT);
  28.   pinMode(selectMode_2, INPUT);
  29. // obsługa przerwania 0 - start - gdy na wejsciu startButton pojawi się zbocze opadające
  30.   attachInterrupt(digitalPinToInterrupt(startButton), startWorking, FALLING);  
  31. // obsługa przerwania 1 - stop - gdy na wejsciu stopButton pojawi się zbocze opadajace
  32.   attachInterrupt(digitalPinToInterrupt(stopButton), stopWorking, FALLING);
  33. }
  34.  
  35. // infinite loop
  36. void loop()                      
  37. {
  38.   if (statusOfWork)
  39.   {
  40.      if (digitalRead(selectMode_1) == 0 && digitalRead(selectMode_2) == 0)
  41.     {
  42.       mode_1();
  43.     }
  44.     else if (digitalRead(selectMode_1) == 0 && digitalRead(selectMode_2) == 1)
  45.     {
  46.       mode_2();
  47.     }
  48.     else if (digitalRead(selectMode_1) == 1 && digitalRead(selectMode_2) == 0)
  49.     {
  50.       mode_3();
  51.     }
  52.   }
  53. }
  54.  
  55. void startWorking() // obsługa funkcji przerwania 0
  56. {
  57.     statusOfWork = 1;   // status pracy
  58. }
  59.  
  60. void stopWorking() // obsługa funkcji przerwania 1
  61. {
  62.     statusOfWork = 0;  // status stopu
  63. }
  64.  
  65. void mode_1()  // tryb 1
  66. {
  67.     for(int i = 0; i < 9; i++)
  68.     {
  69.       digitalWrite(latch, LOW);
  70.       int value = pow( 2, i );
  71.       if (value == 2) continue;
  72.       shiftOut(data, clock, MSBFIRST, value);
  73.       digitalWrite(latch, HIGH);
  74.       if (i == 8) delay(setDelay*3);
  75.       else delay(setDelay);
  76.     }
  77.     digitalWrite(latch, LOW);
  78.     shiftOut(data, clock, MSBFIRST, 0);
  79.     digitalWrite(latch, HIGH);
  80.     delay(setDelay*10);
  81. }
  82.  
  83. void mode_2() // tryb 2
  84. {
  85.   for(int i = -1; i < 9; i++)
  86.     {
  87.       digitalWrite(latch, LOW);
  88.       int value = pow( 2, i );
  89.       if (value == 2) continue;
  90.       if (i == -1) value = 0;
  91.       shiftOut(data, clock, MSBFIRST, value);
  92.       digitalWrite(latch, HIGH);
  93.       delay(setDelay);
  94.     }
  95.    for(int i = 8; i >= -1; i--)
  96.     {
  97.       digitalWrite(latch, LOW);
  98.       int value = pow( 2, i );
  99.       if (value == 2) continue;
  100.       if (i == -1) value = 0;
  101.       shiftOut(data, clock, MSBFIRST, value);
  102.       digitalWrite(latch, HIGH);
  103.       delay(setDelay);
  104.     }
  105.     delay(setDelay*5);
  106. }
  107.  
  108. void mode_3() // tryb 3
  109. {
  110.     for(int i = -1; i < 9; i++)
  111.     {
  112.       digitalWrite(latch, LOW);
  113.       int value = pow( 2, i );
  114.       if (value == 2) continue;
  115.       shiftOut(data, clock, MSBFIRST, value);
  116.       digitalWrite(latch, HIGH);
  117.       delay(setDelay);
  118.     }
  119.     delay(setDelay*3);
  120.     digitalWrite(latch, LOW);
  121.     shiftOut(data, clock, MSBFIRST, 0);
  122.     digitalWrite(latch, HIGH);
  123. }
  124.  
  125.