Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //version ovs19 с фонариком на красную кнопку, SOS на зелёную и бесконечное мигание на синюю
- #define checkButtonDelay 200
- #define dutyCycleSpeed 4
- #define inputPinRed 2
- #define inputPinGreen 3
- #define inputPinBlue 4
- #define outputPinRed 9
- #define outputPinGreen 10
- #define outputPinBlue 11
- #define MorsePointDuration 300
- int dutyCycleRed = 0;
- int dutyCycleGreen = 0;
- int dutyCycleBlue = 0;
- int upDutyCycleRed = 0;
- int upDutyCycleGreen = 0;
- int upDutyCycleBlue = 0;
- int buttonPressedRed = 0;
- int buttonPressedGreen = 0;
- int buttonPressedBlue = 0;
- void setup()
- {
- pinMode(inputPinRed, INPUT);
- pinMode(inputPinGreen, INPUT);
- pinMode(inputPinBlue, INPUT);
- pinMode(outputPinRed, OUTPUT);
- pinMode(outputPinGreen, OUTPUT);
- pinMode(outputPinBlue, OUTPUT);
- if (digitalRead(inputPinRed) == LOW) lantern();
- else if (digitalRead(inputPinGreen) == LOW) sos();
- else if (digitalRead(inputPinBlue) == LOW) blinkForever();
- else normalMode();
- }
- void blinkForever()
- {
- for(;;)
- {
- delay(MorsePointDuration);
- lightsOff();
- delay(MorsePointDuration);
- lightsOn();
- }
- }
- void normalMode()
- {
- lightsOff();
- for(;;)
- {
- checkButtons();
- changeDutyCycles();
- delay(checkButtonDelay);
- }
- }
- void sos()
- {
- lightsOff();
- for(;;)
- {
- blink(MorsePointDuration);
- delay(3 * MorsePointDuration);
- blink(3 * MorsePointDuration);
- delay(3 * MorsePointDuration);
- blink(MorsePointDuration);
- delay(7 * MorsePointDuration);
- }
- }
- void blink(int length)
- {
- for(int i = 0; i < 3; i++)
- {
- delay(MorsePointDuration);
- lightsOn();
- delay(length);
- lightsOff();
- }
- }
- void lightsOn()
- {
- analogWrite(outputPinRed, 0);
- analogWrite(outputPinBlue, 0);
- analogWrite(outputPinGreen, 0);
- }
- void lightsOff()
- {
- analogWrite(outputPinRed, 255);
- analogWrite(outputPinBlue, 255);
- analogWrite(outputPinGreen, 255);
- }
- void lantern()
- {
- for(;;);
- }
- void loop()
- {
- }
- void checkButtons()
- {
- checkButton(&buttonPressedRed, inputPinRed, &upDutyCycleRed);
- checkButton(&buttonPressedBlue, inputPinBlue, &upDutyCycleBlue);
- checkButton(&buttonPressedGreen, inputPinGreen, &upDutyCycleGreen);
- }
- void checkButton(int* buttonPressed, int inputPin, int* upDutyCycle)
- {
- int buttonPressedBefore = *buttonPressed;
- *buttonPressed = digitalRead(inputPin) == LOW;
- if(!buttonPressedBefore && *buttonPressed)
- *upDutyCycle = !*upDutyCycle;
- }
- void changeDutyCycles()
- {
- if (buttonPressedRed) changeDutyCycle(&dutyCycleRed, &upDutyCycleRed, outputPinRed);
- if (buttonPressedBlue) changeDutyCycle(&dutyCycleBlue, &upDutyCycleBlue, outputPinBlue);
- if (buttonPressedGreen) changeDutyCycle(&dutyCycleGreen, &upDutyCycleGreen, outputPinGreen);
- }
- void changeDutyCycle(int* dutyCycle, int* upDutyCycle, int outputPin)
- {
- *dutyCycle += *upDutyCycle ? dutyCycleSpeed : -dutyCycleSpeed;
- if (*dutyCycle > 255) *dutyCycle = 255;
- if (*dutyCycle < 0) *dutyCycle = 0;
- analogWrite(outputPin, 255-*dutyCycle);
- }
- //#define longDelay 600
- //#define shortDelay 300
- //#define blinkOffDelay 200
- //#define wordsSpaceDelay 300
- //#define betweenSosDelay 1000
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement