// У нас на плате pro mini ATmega 168 (5v, 16MHz), хотя это и неважно
#include <SoftwareSerial.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); // Запускаем работу порта
}
void loop()
{
if (halfWave == 0 || (millis() - halfWave) >= 10) // Каждые 10 мс.
{
halfWave = millis();
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;
}
}
void receiveData()
{
if (mySerial.available())
{
pers = mySerial.read(); // Считываем данные с порта, если там что-то есть
n = 0; // Раз данные пришли, обнулим счетчик
}
else
{
++n; // Считаем, сколько раз не пришли данные
}
if (pers > 100)
{
pers = 0; // на всякий случай, если значение нереальное
}
if (n > 10) // Если 10 секунд данные не приходят, прекратим подачу импульсов.
{
pers = 0;
}
}
Ly8g0KMg0L3QsNGBINC90LAg0L/Qu9Cw0YLQtSBwcm8gbWluaSBBVG1lZ2EgMTY4ICg1diwgMTZNSHopLCDRhdC+0YLRjyDRjdGC0L4g0Lgg0L3QtdCy0LDQttC90L4KI2luY2x1ZGUgPFNvZnR3YXJlU2VyaWFsLmg+ICAgICAgICAgICAvLyDQn9C+0LTQutC70Y7Rh9Cw0LXQvCDQsdC40LHQu9C40L7RgtC10LrRgwoKU29mdHdhcmVTZXJpYWwgbXlTZXJpYWwoMTAsIDExKTsgLy8gUlgsIFRYINCd0LDQt9C90LDRh9Cw0LXQvCDQv9C40L3RiyDQvdCwINC/0YDQuNC10Lwg0Lgg0L/QtdGA0LXQtNCw0YfRgwoKYnl0ZSBwZXJzOyAgICAgICAgICAgICAgICAgIC8vINCf0LXRgNC10LzQtdC90L3QsNGPINC00LvRjyDQv9C+0LvRg9GH0LXQvdC40Y8g0LTQsNC90L3Ri9GFINC/0L7RgNGC0LAKaW50IHg7ICAgICAgICAgICAgICAgICAgICAgIC8vINCf0LXRgNC10LzQtdC90L3QsNGPINC60L7QvtGA0LTQuNC90LDRgiDQsNC70LPQvtGA0LjRgtC80LAg0JHRgNC10LfQtdC90YXQtdC80LAKaW50IHk7ICAgICAgICAgICAgICAgICAgICAgIC8vINCf0LXRgNC10LzQtdC90L3QsNGPINC60L7QvtGA0LTQuNC90LDRgiDQsNC70LPQvtGA0LjRgtC80LAg0JHRgNC10LfQtdC90YXQtdC80LAKaW50IG9ub2ZmID0gMDsgICAgICAgICAgICAgIC8vINCf0LXRgNC10LzQtdC90L3QsNGPINGB0LjQs9C90LDQu9CwINC90LAg0L/Qu9Cw0YLRgyDRgdC40LzQuNGB0YLQvtGA0LAKdW5zaWduZWQgaW50IG47ICAgICAgICAgICAgIC8vINCh0YfQtdGC0YfQuNC6INC90LXQv9GA0LjRiNC10LTRiNC40YUg0L/QsNC60LXRgtC+0LIKdW5zaWduZWQgbG9uZyBoYWxmV2F2ZTsgICAgIC8vINCU0LvRjyDQvtGC0YHRh9C10YLQsCDQtNC70LjQvdGLINC/0L7Qu9GD0LLQvtC70L3RiwppbnQgaSA9IDE7Cgp2b2lkIHNldHVwKCkgewogIHBpbk1vZGUoMTIsIE9VVFBVVCk7ICAgICAgICAgLy8g0J3QsNC30L3QsNGH0LDQtdC8INC/0LjQvSDQvdCwINCy0YvRhdC+0LQgKNC/0LvQsNGC0LAg0YHQuNC80LjRgdGC0L7RgNCwKQogIHBpbk1vZGUoMTMsIE9VVFBVVCk7ICAgICAgICAgLy8g0J3QsNC30L3QsNGH0LDQtdC8INC/0LjQvSDQvdCwINCy0YvRhdC+0LQgKNGB0LLQtdGC0L7QtNC40L7QtC3QutC+0L3RgtGA0L7Qu9GM0LrQsCkKICBkaWdpdGFsV3JpdGUoMTIsIDApOyAgICAgICAgIC8vINCy0YvRhdC+0LQg0L3QsCDQv9C70LDRgtGDINGB0LjQvNC40YHRgtC+0YDQsCAo0L7RgtC60LvRjtGH0LXQvdC+KQogIGRpZ2l0YWxXcml0ZSgxMywgMCk7ICAgICAgICAgLy8g0KHQstC10YLQvtC00LjQvtC0INC/0L7RgtGD0YjQtdC9CiAvLyBTZXJpYWwuYmVnaW4oOTYwMCk7CiAgbXlTZXJpYWwuYmVnaW4oNDgwMCk7ICAgICAgICAvLyDQl9Cw0L/Rg9GB0LrQsNC10Lwg0YDQsNCx0L7RgtGDINC/0L7RgNGC0LAKfQoKdm9pZCBsb29wKCkKewogIGlmIChoYWxmV2F2ZSA9PSAwIHx8IChtaWxsaXMoKSAtIGhhbGZXYXZlKSA+PSAxMCkgICAvLyDQmtCw0LbQtNGL0LUgMTAg0LzRgS4KICB7CiAgICBoYWxmV2F2ZSA9IG1pbGxpcygpOwogICAgeCA9IGkgKiBwZXJzIC8gMTAwIDsKICAgIGlmICh4ID09IHkpICAgICAgICAgICAgICAgICAgICAgLy8g0JXRgdC70Lgg0YbQtdC70LDRjyDRh9Cw0YHRgtGMINC/0L7RgdC70LUg0LTQtdC70LXQvdC40Y8g0L7RgdGC0LDQu9Cw0YHRjCDQvdC10LjQt9C80LXQvdC90L7QuSAtINC40LzQv9GD0LvRjNGB0LAg0L3QtdGCCiAgICB7CiAgICAgIG9ub2ZmID0gMDsKICAgIH0KICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g0JXRgdC70Lgg0YbQtdC70LDRjyDRh9Cw0YHRgtGMINGD0LLQtdC70LjRh9C40LvQsNGB0YwgLSDQuNC80L/Rg9C70YzRgSDQtdGB0YLRjC4KICAgIHsKICAgICAgb25vZmYgPSAxOwogICAgfQogICAgZGlnaXRhbFdyaXRlKDEyLCBvbm9mZik7ICAgICAgICAvLyDQktC60LvRjtGH0LDQtdC8INC40LvQuCDQstGL0LrQu9GO0YfQsNC10Lwg0L/Qu9Cw0YLRgyDRgdC40LzQuNGB0YLQvtGA0LAg0Lgg0YHQstC10YLQvtC00LjQvtC0LgogICAgZGlnaXRhbFdyaXRlKDEzLCBvbm9mZik7CiAgICB5PXg7CiAgICAKICAgIGlmIChpID49IDEwMCkgCiAgICB7CiAgICAgIGkgPSAwOwogICAgICB5ID0gMDsKICAgICAgcmVjZWl2ZURhdGEoKTsgICAgICAgICAgICAgICAvLyDQv9C+0LvRg9GH0LDQtdC8INC00LDQvdC90YvQtQogICAgfQogICAgKytpOwogIH0KfQoKdm9pZCByZWNlaXZlRGF0YSgpCnsKICBpZiAobXlTZXJpYWwuYXZhaWxhYmxlKCkpCiAgewogICAgcGVycyA9IG15U2VyaWFsLnJlYWQoKTsgICAgICAgICAgIC8vINCh0YfQuNGC0YvQstCw0LXQvCDQtNCw0L3QvdGL0LUg0YEg0L/QvtGA0YLQsCwg0LXRgdC70Lgg0YLQsNC8INGH0YLQvi3RgtC+INC10YHRgtGMCiAgICBuID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g0KDQsNC3INC00LDQvdC90YvQtSDQv9GA0LjRiNC70LgsINC+0LHQvdGD0LvQuNC8INGB0YfQtdGC0YfQuNC6CiAgfQogIGVsc2UKICB7CiAgICArK247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g0KHRh9C40YLQsNC10LwsINGB0LrQvtC70YzQutC+INGA0LDQtyDQvdC1INC/0YDQuNGI0LvQuCDQtNCw0L3QvdGL0LUKICB9CgogIGlmIChwZXJzID4gMTAwKQogIHsKICAgIHBlcnMgPSAwOyAvLyDQvdCwINCy0YHRj9C60LjQuSDRgdC70YPRh9Cw0LksINC10YHQu9C4INC30L3QsNGH0LXQvdC40LUg0L3QtdGA0LXQsNC70YzQvdC+0LUKICB9CgogIGlmIChuID4gMTApICAgLy8g0JXRgdC70LggMTAg0YHQtdC60YPQvdC0INC00LDQvdC90YvQtSDQvdC1INC/0YDQuNGF0L7QtNGP0YIsINC/0YDQtdC60YDQsNGC0LjQvCDQv9C+0LTQsNGH0YMg0LjQvNC/0YPQu9GM0YHQvtCyLgogIHsKICAgIHBlcnMgPSAwOwogIH0KfQ==