#include <util/atomic.h>
volatile boolean actionState = LOW;
volatile long Impulse = 0;
long i = 0;
void setup() {
Serial.begin(9600);
attachInterrupt(0, ImpulseCounter, RISING);
}
void loop() {
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
i = Impulse;
}
if (Serial.available() > 0) {
String param = Serial.readString();
if(param == "1")
#Serial.print("impulse = ");
Serial.println(i);
}
}
void ImpulseCounter() {
actionState != actionState;
Impulse++;
}{$co}{$co}Процедура ОткрытьПорт()
Драйвер = Новый ComОбъект("MSCOMMLib.MSComm.1");
Драйвер.CommPort = НомерПорта; // COM1
Драйвер.Settings = "9600,N,8,1";
Если Драйвер.PortOpen=1 Тогда
Драйвер.PortOpen=0;
КонецЕсли;
Драйвер.PortOpen=1;
Драйвер.Handshaking=1; // 1 = ComXOnXoff
Драйвер.InputMode=0; // если 1 = то данные, 0 = строки
Драйвер.InputLen = 0; //чистим буфер
Драйвер.NullDiscard = 1; // игнорируем нули
Драйвер.InBufferCount = 0; //Возвращает количество символов ждущих в получаещем буфере
Драйвер.RTSEnable = 1;
//Setting the RThreshold property to 0 (the default) disables generating the OnComm event when characters are received.
//Setting RThreshold to 1, for example, causes the MSComm control to generate the OnComm event every time a single character is placed in the receive buffer.
Драйвер.RThreshold = 1;
//Sets and returns the minimum number of characters allowable in the transmit buffer before the MSComm control sets the CommEvent property to comEvSend and generates the OnComm event.
Драйвер.SThreshold = 1;
Сообщить("Открыт COM"+Драйвер.CommPort);
КонецПроцедуры
Процедура ОтправитьКоманду( парам )
Попытка
Если Драйвер.PortOpen=0 Тогда
ОткрытьПорт();
КонецЕсли;
Исключение
ОткрытьПорт();
КонецПопытки;
сообщить("Команда "+Команда);
Драйвер.InputLen = 0; //чистим буфер
Рез = Драйвер.Input; //чистим буфер
Драйвер.Output=Строка( Команда );
ПолучитьДанные( парам );
КонецПроцедуры
Процедура ПолучитьДанные(парам)
//пауза!
т = ТекущаяУниверсальнаяДатаВМиллисекундах() + 5000; // Задержка
Пока ( Драйвер.InBufferCount=0 ) и (ТекущаяУниверсальнаяДатаВМиллисекундах()< т) Цикл
ОбработкаПрерыванияПользователя();
КонецЦикла;
Рез = Драйвер.Input;
//Сообщить("В буфере бит: "+Драйвер.InBufferCount+" Содержимое буфера: "+Рез);
Сообщить("Результат = "+Рез);
КонецПроцедуры