// У нас на плате pro mini ATmega 168 (5v, 16MHz), хотя это и неважно
#include <SoftwareSerial.h> // Подключаем библиотеку
#include <TimerOne.h>
SoftwareSerial mySerial(10, 11); // RX, TX Назначаем пины на прием и передачу
byte pers; // Переменная для получения данных порта
int x; // Переменная координат алгоритма Брезенхема
int y; // Переменная координат алгоритма Брезенхема
int onoff = 0; // Переменная сигнала на плату симистора
unsigned int n; // Счетчик непришедших пакетов
unsigned long halfWave; // Для отсчета длины полуволны
int i = 1;
void setup() {
pinMode(12, OUTPUT); // Назначаем пин на выход (плата симистора)
pinMode(13, OUTPUT); // Назначаем пин на выход (светодиод-контролька)
digitalWrite(12, 0); // выход на плату симистора (отключено)
digitalWrite(13, 0); // Светодиод потушен
//Serial.begin(9600);
mySerial.begin(4800); // Запускаем работу порта
Timer1.initialize(10000);
Timer1.attachInterrupt(pulsar);
}
void loop()
{
}
void receiveData()
{
if (mySerial.available())
{
pers = mySerial.read(); // Считываем данные с порта, если там что-то есть
n = 0; // Раз данные пришли, обнулим счетчик
}
else
{
++n; // Считаем, сколько раз не пришли данные
}
if (pers > 100)
{
pers = 0; // на всякий случай, если значение нереальное
}
if (n > 10) // Если 10 секунд данные не приходят, прекратим подачу импульсов.
{
pers = 0;
}
}
void pulsar()
{
x = i * pers / 100 ;
if (x == y) // Если целая часть после деления осталась неизменной - импульса нет
{
onoff = 0;
}
else // Если целая часть увеличилась - импульс есть.
{
onoff = 1;
}
digitalWrite(12, onoff); // Включаем или выключаем плату симистора и светодиод.
digitalWrite(13, onoff);
y = x;
if (i >= 100)
{
i = 0;
y = 0;
receiveData(); // получаем данные
}
++i;
}
Ly8g0KMg0L3QsNGBINC90LAg0L/Qu9Cw0YLQtSBwcm8gbWluaSBBVG1lZ2EgMTY4ICg1diwgMTZNSHopLCDRhdC+0YLRjyDRjdGC0L4g0Lgg0L3QtdCy0LDQttC90L4KI2luY2x1ZGUgPFNvZnR3YXJlU2VyaWFsLmg+ICAgICAgICAgICAvLyDQn9C+0LTQutC70Y7Rh9Cw0LXQvCDQsdC40LHQu9C40L7RgtC10LrRgwojaW5jbHVkZSA8VGltZXJPbmUuaD4KU29mdHdhcmVTZXJpYWwgbXlTZXJpYWwoMTAsIDExKTsgLy8gUlgsIFRYINCd0LDQt9C90LDRh9Cw0LXQvCDQv9C40L3RiyDQvdCwINC/0YDQuNC10Lwg0Lgg0L/QtdGA0LXQtNCw0YfRgwoKYnl0ZSBwZXJzOyAgICAgICAgICAgICAgICAgIC8vINCf0LXRgNC10LzQtdC90L3QsNGPINC00LvRjyDQv9C+0LvRg9GH0LXQvdC40Y8g0LTQsNC90L3Ri9GFINC/0L7RgNGC0LAKaW50IHg7ICAgICAgICAgICAgICAgICAgICAgIC8vINCf0LXRgNC10LzQtdC90L3QsNGPINC60L7QvtGA0LTQuNC90LDRgiDQsNC70LPQvtGA0LjRgtC80LAg0JHRgNC10LfQtdC90YXQtdC80LAKaW50IHk7ICAgICAgICAgICAgICAgICAgICAgIC8vINCf0LXRgNC10LzQtdC90L3QsNGPINC60L7QvtGA0LTQuNC90LDRgiDQsNC70LPQvtGA0LjRgtC80LAg0JHRgNC10LfQtdC90YXQtdC80LAKaW50IG9ub2ZmID0gMDsgICAgICAgICAgICAgIC8vINCf0LXRgNC10LzQtdC90L3QsNGPINGB0LjQs9C90LDQu9CwINC90LAg0L/Qu9Cw0YLRgyDRgdC40LzQuNGB0YLQvtGA0LAKdW5zaWduZWQgaW50IG47ICAgICAgICAgICAgIC8vINCh0YfQtdGC0YfQuNC6INC90LXQv9GA0LjRiNC10LTRiNC40YUg0L/QsNC60LXRgtC+0LIKdW5zaWduZWQgbG9uZyBoYWxmV2F2ZTsgICAgIC8vINCU0LvRjyDQvtGC0YHRh9C10YLQsCDQtNC70LjQvdGLINC/0L7Qu9GD0LLQvtC70L3RiwppbnQgaSA9IDE7Cgp2b2lkIHNldHVwKCkgewogIHBpbk1vZGUoMTIsIE9VVFBVVCk7ICAgICAgICAgLy8g0J3QsNC30L3QsNGH0LDQtdC8INC/0LjQvSDQvdCwINCy0YvRhdC+0LQgKNC/0LvQsNGC0LAg0YHQuNC80LjRgdGC0L7RgNCwKQogIHBpbk1vZGUoMTMsIE9VVFBVVCk7ICAgICAgICAgLy8g0J3QsNC30L3QsNGH0LDQtdC8INC/0LjQvSDQvdCwINCy0YvRhdC+0LQgKNGB0LLQtdGC0L7QtNC40L7QtC3QutC+0L3RgtGA0L7Qu9GM0LrQsCkKICBkaWdpdGFsV3JpdGUoMTIsIDApOyAgICAgICAgIC8vINCy0YvRhdC+0LQg0L3QsCDQv9C70LDRgtGDINGB0LjQvNC40YHRgtC+0YDQsCAo0L7RgtC60LvRjtGH0LXQvdC+KQogIGRpZ2l0YWxXcml0ZSgxMywgMCk7ICAgICAgICAgLy8g0KHQstC10YLQvtC00LjQvtC0INC/0L7RgtGD0YjQtdC9CiAgLy9TZXJpYWwuYmVnaW4oOTYwMCk7CiAgbXlTZXJpYWwuYmVnaW4oNDgwMCk7ICAgICAgICAvLyDQl9Cw0L/Rg9GB0LrQsNC10Lwg0YDQsNCx0L7RgtGDINC/0L7RgNGC0LAKICBUaW1lcjEuaW5pdGlhbGl6ZSgxMDAwMCk7CiAgVGltZXIxLmF0dGFjaEludGVycnVwdChwdWxzYXIpOwp9Cgp2b2lkIGxvb3AoKQp7Cgp9Cgp2b2lkIHJlY2VpdmVEYXRhKCkKewoKICBpZiAobXlTZXJpYWwuYXZhaWxhYmxlKCkpCiAgewogICAgcGVycyA9IG15U2VyaWFsLnJlYWQoKTsgICAgICAgICAgIC8vINCh0YfQuNGC0YvQstCw0LXQvCDQtNCw0L3QvdGL0LUg0YEg0L/QvtGA0YLQsCwg0LXRgdC70Lgg0YLQsNC8INGH0YLQvi3RgtC+INC10YHRgtGMCiAgICBuID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g0KDQsNC3INC00LDQvdC90YvQtSDQv9GA0LjRiNC70LgsINC+0LHQvdGD0LvQuNC8INGB0YfQtdGC0YfQuNC6CiAgfQogIGVsc2UKICB7CiAgICArK247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g0KHRh9C40YLQsNC10LwsINGB0LrQvtC70YzQutC+INGA0LDQtyDQvdC1INC/0YDQuNGI0LvQuCDQtNCw0L3QvdGL0LUKICB9CgogIGlmIChwZXJzID4gMTAwKQogIHsKICAgIHBlcnMgPSAwOyAvLyDQvdCwINCy0YHRj9C60LjQuSDRgdC70YPRh9Cw0LksINC10YHQu9C4INC30L3QsNGH0LXQvdC40LUg0L3QtdGA0LXQsNC70YzQvdC+0LUKICB9CgogIGlmIChuID4gMTApICAgLy8g0JXRgdC70LggMTAg0YHQtdC60YPQvdC0INC00LDQvdC90YvQtSDQvdC1INC/0YDQuNGF0L7QtNGP0YIsINC/0YDQtdC60YDQsNGC0LjQvCDQv9C+0LTQsNGH0YMg0LjQvNC/0YPQu9GM0YHQvtCyLgogIHsKICAgIHBlcnMgPSAwOwogIH0KfQoKdm9pZCBwdWxzYXIoKQp7CiAgeCA9IGkgKiBwZXJzIC8gMTAwIDsKICBpZiAoeCA9PSB5KSAgICAgICAgICAgICAgICAgICAgIC8vINCV0YHQu9C4INGG0LXQu9Cw0Y8g0YfQsNGB0YLRjCDQv9C+0YHQu9C1INC00LXQu9C10L3QuNGPINC+0YHRgtCw0LvQsNGB0Ywg0L3QtdC40LfQvNC10L3QvdC+0LkgLSDQuNC80L/Rg9C70YzRgdCwINC90LXRggogIHsKICAgIG9ub2ZmID0gMDsKICB9CiAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDQldGB0LvQuCDRhtC10LvQsNGPINGH0LDRgdGC0Ywg0YPQstC10LvQuNGH0LjQu9Cw0YHRjCAtINC40LzQv9GD0LvRjNGBINC10YHRgtGMLgogIHsKICAgIG9ub2ZmID0gMTsKICB9CiAgZGlnaXRhbFdyaXRlKDEyLCBvbm9mZik7ICAgICAgICAvLyDQktC60LvRjtGH0LDQtdC8INC40LvQuCDQstGL0LrQu9GO0YfQsNC10Lwg0L/Qu9Cw0YLRgyDRgdC40LzQuNGB0YLQvtGA0LAg0Lgg0YHQstC10YLQvtC00LjQvtC0LgogIGRpZ2l0YWxXcml0ZSgxMywgb25vZmYpOwogIHkgPSB4OwoKICBpZiAoaSA+PSAxMDApCiAgewogICAgaSA9IDA7CiAgICB5ID0gMDsKICAgIHJlY2VpdmVEYXRhKCk7ICAgICAgICAgICAgICAgLy8g0L/QvtC70YPRh9Cw0LXQvCDQtNCw0L3QvdGL0LUKICB9CiAgKytpOwp9