Advertisement
desentcare

Untitled

Dec 16th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.92 KB | None | 0 0
  1. //version ovs17 с фонариком на красную и SOS на зелёную кнопку
  2. #define inputPinRed 2
  3. #define inputPinGreen 3
  4. #define inputPinBlue 4
  5.  
  6. #define outputPinRed 9
  7. #define outputPinGreen 10
  8. #define outputPinBlue 11
  9.  
  10. #define longDelay 600
  11. #define shortDelay 300
  12. #define blinkOffDelay 200
  13. #define wordsSpaceDelay 300
  14. #define betweenSosDelay 1000
  15.  
  16. int dutyCycleRed = 0;
  17. int dutyCycleGreen = 0;
  18. int dutyCycleBlue = 0;
  19.  
  20. int upDutyCycleRed = 0;
  21. int upDutyCycleGreen = 0;
  22. int upDutyCycleBlue = 0;
  23.  
  24. int buttonPressedRed = 0;
  25. int buttonPressedGreen = 0;
  26. int buttonPressedBlue = 0;
  27.  
  28. void setup()
  29. {
  30.     pinMode(inputPinRed, INPUT);
  31.     pinMode(inputPinGreen, INPUT);
  32.     pinMode(inputPinBlue, INPUT);
  33.  
  34.     pinMode(outputPinRed, OUTPUT);
  35.     pinMode(outputPinGreen, OUTPUT);
  36.     pinMode(outputPinBlue, OUTPUT);
  37.  
  38.     if (digitalRead(inputPinRed) == LOW) lantern();
  39.     else if (digitalRead(inputPinGreen) == LOW) sos();
  40.     else normalMode();
  41. }
  42.  
  43. void normalMode()
  44. {
  45.     lightsOff();
  46.     for(;;)
  47.     {
  48.         checkButtons();
  49.         changeDutyCycles();
  50.         delay(200);
  51.     }
  52. }
  53.  
  54. void sos()
  55. {
  56.     lightsOff();
  57.     for(;;)
  58.     {
  59.         blink(shortDelay);
  60.         delay(wordsSpaceDelay);
  61.  
  62.         blink(longDelay);
  63.         delay(wordsSpaceDelay);
  64.  
  65.         blink(shortDelay);
  66.         delay(betweenSosDelay);
  67.     }
  68. }
  69.  
  70. void blink(int length)
  71. {
  72.     for(int i = 0; i < 3; i++)
  73.         {
  74.             delay(blinkOffDelay);
  75.             lightsOn();
  76.             delay(length);
  77.             lightsOff();
  78.         }
  79. }
  80.  
  81. void lightsOn()
  82. {
  83.     analogWrite(outputPinRed, 0);
  84.     analogWrite(outputPinBlue, 0);
  85.     analogWrite(outputPinGreen, 0);
  86. }
  87.  
  88. void lightsOff()
  89. {
  90.     analogWrite(outputPinRed, 255);
  91.     analogWrite(outputPinBlue, 255);
  92.     analogWrite(outputPinGreen, 255);
  93. }
  94.  
  95. void lantern()
  96. {
  97.     for(;;);
  98. }
  99.  
  100. void loop()
  101. {
  102. }
  103.  
  104. void checkButtons()
  105. {
  106.     checkButton(&buttonPressedRed, inputPinRed, &upDutyCycleRed);
  107.     checkButton(&buttonPressedBlue, inputPinBlue, &upDutyCycleBlue);
  108.     checkButton(&buttonPressedGreen, inputPinGreen, &upDutyCycleGreen);
  109. }
  110.  
  111. void checkButton(int* buttonPressed, int inputPin, int* upDutyCycle)
  112. {
  113.     int buttonPressedBefore = *buttonPressed;
  114.     *buttonPressed = digitalRead(inputPin) == LOW;
  115.     if(!buttonPressedBefore && *buttonPressed)
  116.         *upDutyCycle = !*upDutyCycle;
  117. }
  118.  
  119. void changeDutyCycles()
  120. {
  121.     if (buttonPressedRed) changeDutyCycle(&dutyCycleRed, &upDutyCycleRed, outputPinRed);
  122.     if (buttonPressedBlue) changeDutyCycle(&dutyCycleBlue, &upDutyCycleBlue, outputPinBlue);
  123.     if (buttonPressedGreen) changeDutyCycle(&dutyCycleGreen, &upDutyCycleGreen, outputPinGreen);
  124. }
  125.  
  126. void changeDutyCycle(int* dutyCycle, int* upDutyCycle, int outputPin)
  127. {
  128.     *dutyCycle += *upDutyCycle ? 4 : -4;
  129.     if (*dutyCycle > 255) *dutyCycle = 255;
  130.     if (*dutyCycle < 0) *dutyCycle = 0;
  131.     analogWrite(outputPin, 255-*dutyCycle);
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement