отсылаем коды кнопок (радио-пультов - от радио розеток)с ПК - через bat файл или (монитор порта)-(COM порт)
Arduino radio sockets on off Leonardo ATmega32u4 Arduino radio sockets on off RF Radio 433Mhz коды
arduino-IDE v 1.6.12
Вспомогательные видео материалы.
как ? узнать код - кнопки радио пульта 433Mhz
how? learn the code button RF Remote control.
https://www.youtube.com/watch?v=82eZMCQag1k // Библиотека для отправки Radio кодов. http://yadi.sk/d/6kwepbRb3aTrU */
#include <RemoteSwitch.h> // устанавливаем библиотеку для отправки радио кодов на радио розетки
#define RADIO_PIN 10 // PIN для радио передатчика 433 МГц.
unsigned long radioCode_ON = 0; // сюда сохраняем поступивший код включения радио розетки
unsigned long radioCode_OFF = 0; // сюда сохраняем поступивший код выключения радио розетки
unsigned long timer_auto_off = 0; // сюда сохраняем время таймера - для автоматического отключения розетки
bool repeat_sent_code = false; // повторно отправленный код
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
// Прототипы функций: нужны - чтобы все функции были видны компилятору, вне зависимости от их расположения в коде
void sendRadioCode(unsigned long);
void FOOparsingSstringToLong();
/* ################################## */
void setup() {
Serial.begin(9600);
// while (!Serial); // wait for serial port to connect. Needed for native USB port only
while (millis() < 5000)digitalWrite(LED_BUILTIN, round(millis() / 100 % 2)); // Мигаем
digitalWrite(LED_BUILTIN, LOW);
}
// @: set radioCode='15146~15144~20#' 15146~15144~20#
void loop() {
if (Serial.available()) {
FOOparsingSstringToLong();
if (repeat_sent_code == false)sendRadioCode(radioCode_ON); // если, не повторно отправленный код отправляем код включения
else { // если повторно отправленный код
sendRadioCode(radioCode_OFF); // отправляем код выключения розетки
timer_auto_off = 0; // отключаем таймер
}
repeat_sent_code = !repeat_sent_code; // инвертируем статус повтора
}
if ((timer_auto_off != 0) && (millis() > (unsigned long)timer_auto_off)) { // если наступило время таймера авто-отключения
sendRadioCode(radioCode_OFF); // отправляем код выключения розетки
timer_auto_off = 0; // отключаем таймер
repeat_sent_code = false; // отключаем статус повтора
}
if (timer_auto_off != 0)digitalWrite(LED_BUILTIN, round(millis() / 200 % 2)); // если таймер авто-отключения запущен - Мигаем
else digitalWrite(LED_BUILTIN, LOW);
}
/* ################################## */
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
#define MAXIMUM_PART 3 // максимальное количество принимаемых частей в строке
char arrInString[(MAXIMUM_PART * 11)] = {0}; // массив char для хранения входящей сырой строки
byte arrIndexPart[MAXIMUM_PART] = {0}; // массив флагов / индексов - начала частей данных для сортировки
const uint16_t arrRef[] { (& radioCode_ON), (& radioCode_OFF), (& timer_auto_off) }; // массив ссылок на адреса переменных в памяти
void FOOparsingSstringToLong() { // функция для сортировки "на лету" данных, в принятой строке
memset(arrInString, 0, sizeof(arrInString)); // очищаем весь массив
memset(arrIndexPart, 0, sizeof(arrIndexPart)); // очищаем весь массив
unsigned long timeout = 0; // максимальное Время ожидания следующего байта
int8_t indexArrIn = -1; // счетчик индексов массива arrInString
int8_t indeXarrIndexPart = 0; // счетчик индексов массива arrIndexPart
char inChar = NULL;
while (1) { // стоим на месте / зависаем
if (indexArrIn > (MAXIMUM_PART * 11))return; // защита от переполнения массива arrInString
if (Serial.available()) { // если в буфере Serial есть данные
timeout = (millis() + 1000); // сохраняем время таймера максимальное Время ожидания следующего байта
inChar = (char)Serial.read();
arrInString[++indexArrIn] = inChar; // сохраняем поступившие сырые данные в массив
if (inChar == '~') { // если обнаружен символ / флаг разделителя (частей / кусков - строки)
arrIndexPart[++indeXarrIndexPart] = (indexArrIn + 1); // сохраняем стартовые индексы разделителя (частей / кусков - строки)
arrInString[indexArrIn] = NULL; // заменяем символ разделителя частей строки, на флаг конца строки c++
}
}
if ((inChar == '#') || (millis() > timeout)) { // если обнаружен "свой" символ конца строки, или истекло время ожидания
if (inChar == '#')arrInString[indexArrIn] = NULL; // заменяем "свой" символ / флаг конца строки, на флаг конца строки в c++
for (int i = 0; i <= indeXarrIndexPart; i++) { // сортируем строку
// записываем данные из массива arrInString в переменные, через адреса переменных, начиная с индекса arrIndexPart[i]
(*(uint32_t*)arrRef[i]) = atol(arrInString + arrIndexPart[i]); // и конвертируем их из string в Long
// Serial.println(arrInString + arrIndexPart[i]);
Serial.println((*(uint32_t*)arrRef[i]));
}
if (timer_auto_off != 0) { // если есть данные для таймера авто-отключения
timer_auto_off *= 60000; // преобразуем значения в минуты
timer_auto_off += millis(); // прибавляем текущее время
}
break;
}
}
}
/* ################################## */
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
// функция для отправки радио кодов на радио розетки
void sendRadioCode(unsigned long radioCode) {
for (int i = 0; i < 9; i++) { // для надёжности отправляем повторно код 8 раз
radioCode |= (unsigned long)343 << 23;
radioCode |= 2L << 20;
RemoteSwitch::sendTelegram(radioCode, RADIO_PIN);
delay(50);
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); // Мигаем.
}
Serial.println('R');
}
/* ################################## */
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/*
@: bat - файл RF_1_ON_OFF
@: отсылаем коды кнопок (радио-пультов - от радио розеток)с ПК - через bat файл
@: строка для отправки, состоит из трёх значений, разделённых символом '~', символ '#' конец строки.
@: первое значение, код включения радио розетки. второй код выключения радио розетки. третий, время таймера
@: в минутах, для автоматического отключения радио розетки (для отправки кода 2).
@: например '18062~18060~60#:' или '19034~19032~10' или '15146~15144~20'
@: создаём переменную radioCode для отправки строки
set radioCode='18062~18060~10#'
@: set radioCode='15146~15144~20#'
@: set radioCode='19034~19032~1#'
@: создаём переменную SERIAL_BAUD скорость на которой работает Arduino
set /a SERIAL_BAUD=9600
@: создаём переменную COM_PORT номер COM-порта,
@: номер COM-порта, заранее записываем в файл COM_PORT.txt. читаем её, и записываем в переменную COM_PORT
for /F "delims=" %%i in (COM_PORT.txt) do set COM_PORT=%%i
@:устанавливаем COM_port и скорость на которой работает Arduino
powershell "$port= new-Object System.IO .Ports.SerialPort COM%COM_PORT%,(%SERIAL_BAUD%),None,8,one; $port.open(); $port.Write(%radioCode%); $port.Close()"
goto start // начало комментария
// (18062) код кнопки от радио пульта с (8 кнопками) для радио розеток, из леруа мерлен.
#define RF1ON 18062
#define RF1OFF 18060
#define RF2ON 19034
#define RF2OFF 19032
#define RF3ON 15146
#define RF3OFF 15144
#define RFF1 359349 //(359349)код кнопки от другого радио пульта с (3 кнопками) для радио розеток, №2.
#define RFF2 359331
#define RFF3 359323
#define PERIOD 294; //(294) period duration: - полученные из (монитор порта)
#define PERIOD 342;
#define PERIOD 343;
// конец комментария
:start
*/
/* ################################## */
/*
bat файл
https://ok.ru/group/55500490473687/topic/152539109653975 */
@: отсылаем коды кнопок (радио-пультов - от радио розеток)с ПК - через bat файл
@: строка для отправки, состоит из трёх значений, разделённых символом '~', символ '#' конец строки.
@: первое значение, код включения радио розетки. второй код выключения радио розетки. третий, время таймера
@: в минутах, для автоматического отключения радио розетки (для отправки кода 2).
@: например '18062~18060~60#:' или '19034~19032~10' или '15146~15144~20'
@: создаём переменную radioCode для отправки строки
set radioCode='18062~18060~60#'
@: set radioCode='15146~15144~20#'
@: set radioCode='19034~19032~1#'
@: создаём переменную SERIAL_BAUD скорость на которой работает Arduino
set /a SERIAL_BAUD=9600
@: создаём переменную COM_PORT номер COM-порта,
@: номер COM-порта, заранее записываем в файл COM_PORT.txt. читаем её, и записываем в переменную COM_PORT
for /F "delims=" %%i in (COM_PORT.txt) do set COM_PORT=%%i
@:устанавливаем COM_port и скорость на которой работает Arduino
powershell "$port= new-Object System.IO .Ports.SerialPort COM%COM_PORT%,(%SERIAL_BAUD%),None,8,one; $port.open(); $port.Write(%radioCode%); $port.Close()"
goto start // начало комментария
// (18062) код кнопки от радио пульта с (8 кнопками) для радио розеток, из леруа мерлен.
#define RF1ON 18062
#define RF1OFF 18060
#define RF2ON 19034
#define RF2OFF 19032
#define RF3ON 15146
#define RF3OFF 15144
#define RFF1 359349 //(359349)код кнопки от другого радио пульта с (3 кнопками) для радио розеток, №2.
#define RFF2 359331
#define RFF3 359323
#define PERIOD 294; //(294) period duration: - полученные из (монитор порта)
#define PERIOD 342;
#define PERIOD 343;
// конец комментария
:start


Присоединяйтесь — мы покажем вам много интересного
Присоединяйтесь к ОК, чтобы подписаться на группу и комментировать публикации.
Нет комментариев