#include <TimerOne.h>
#define BUTTON 2
#define LED 8
class Button
{
public:
Button(int pinB)
{
_lastButton = HIGH;
_curButton = HIGH;
_pinButton = pinB;
pinMode(pinB, INPUT_PULLUP);
}
~Button() = default;
void process()
{
_curButton = debounce();
if (_lastButton == HIGH && _curButton == LOW)
{
Timer1.start();
}
_lastButton = _curButton;
}
private:
int _lastButton;
int _curButton;
int _pinButton;
int debounce ()
{
int current = digitalRead(_pinButton);
if(_lastButton != current)
{
delay(5);
current = digitalRead(_pinButton);
}
return current;
}
};
volatile Button button(BUTTON);
volatile static int symbolNum = 0;
void proxyButton()
{
noInterrupts();
if(symbolNum == 0)
{
button.process();
}
interrupts();
}
void SOS()
{
++symbolNum;
switch(symbolNum)
{
//пауза между буквами = 3 точки
//пауза между элементами одной буквы = 1 точка
case 1:
digitalWrite(LED, HIGH);
break;
case 2:
digitalWrite(LED, LOW);
break;
case 3:
digitalWrite(LED, HIGH);
break;
case 4:
digitalWrite(LED, LOW);
break;
case 5:
digitalWrite(LED, HIGH);
break;
case 6:
Timer1.setPeriod(600000);
digitalWrite(LED, LOW);
break;
case 7:
Timer1.setPeriod(600000);
digitalWrite(LED, HIGH);
break;
case 8:
Timer1.setPeriod(200000);
digitalWrite(LED, LOW);
break;
case 9:
Timer1.setPeriod(600000);
digitalWrite(LED, HIGH);
break;
case 10:
Timer1.setPeriod(200000);
digitalWrite(LED, LOW);
break;
case 11:
Timer1.setPeriod(600000);
digitalWrite(LED, HIGH);
break;
case 12:
digitalWrite(LED, LOW);
break;
case 13:
Timer1.setPeriod(200000);
digitalWrite(LED, HIGH);
break;
case 14:
digitalWrite(LED, LOW);
break;
case 15:
digitalWrite(LED, HIGH);
break;
case 16:
digitalWrite(LED, LOW);
break;
case 17:
digitalWrite(LED, HIGH);
break;
case 18:
digitalWrite(LED, LOW);
symbolNum = 0;
Timer1.stop();
break;
}
}
void setup()
{
pinMode(LED, OUTPUT);
attachInterrupt(0, proxyButton, CHANGE);
Timer1.initialize(200000);
Timer1.stop();
Timer1.attachInterrupt(SOS);
}
void loop()
{
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
r1:1
r1:2
led1:A
led1:C