#define FIRMWARE_VERSION 0.21
/////Управление движением/////
// =============================================================================
// НАСТРОЙКИ ПИНОВ МИКРОКОНТРОЛЛЕРА
// =============================================================================
const uint8_t PIN_UNI[] = {PA0, PA1, PA2, PA3, PA4, PA5, PA6, PA7};//универсальные пины
const uint8_t PIN_IR_OUT_CP[] = {PB12, PB13, PB14, PB15};//ИК передатчик
const uint8_t PIN_IR_PIT_CP[] = {PA9, PA10, PA11, PA12}; //ИК разрешение передачи
const uint8_t PIN_IR_IN_CP[] = {PB3, PB4, PB5, PB6}; //ИК приемник
// enum Pins {
// PIN_UNI1 = PA0, //управляющий пин/ пин светофора R1
// PIN_UNI2 = PA1, //управляющий пин/ пин светофора Y1
// PIN_UNI3 = PA2, //управляющий пин/ пин светофора G1
// PIN_UNI4 = PA3, //управляющий пин/ пин светофора OUT1
// PIN_UNI5 = PA4, //управляющий пин/ пин светофора R2
// PIN_UNI6 = PA5, //управляющий пин/ пин светофора Y2
// PIN_UNI7 = PA6, //управляющий пин/ пин светофора G2
// PIN_UNI8 = PA7, //управляющий пин/ пин светофора OUT2
// PIN_CP1_IR_IN = PB3, //КТ1 ИК приемник
// PIN_CP1_IR_OUT = PB12, //КТ1 ИК передатчик
// PIN_CP1_IR_PIT = PA9, //КТ1 ИК разрешение передачи
// PIN_CP2_IR_IN = PB4, //КТ2 ИК приемник
// PIN_CP2_IR_OUT = PB13, //КТ2 ИК передатчик
// PIN_CP2_IR_PIT = PA10, //КТ2 ИК разрешение передачи
// PIN_CP3_IR_IN = PB5, //КТ3 ИК приемник
// PIN_CP3_IR_OUT = PB14, //КТ3 ИК передатчик
// PIN_CP3_IR_PIT = PA11, //КТ3 ИК разрешение передачи
// PIN_CP4_IR_IN = PB6, //КТ4 ИК приемник
// PIN_CP4_IR_OUT = PB15, //КТ4 ИК передатчик
// PIN_CP4_IR_PIT = PA12 //КТ4 ИК разрешение передачи
// };
// =============================================================================
// КОМАНДЫ ИК-ПРОТОКОЛА
// =============================================================================
// enum IRCommands {
// CMD_QUERY_ID = 47, //передача ID на УУ
// CMD_CAR_TO_CAR = 33, //между машинками
// CMD_TRAFFIC_LIGHT = 55, //от светофора
// CMD_CALIBRATION = 0, //от прибора калибровки//2-BBK
// CMD_X1 = 12, //переключить стрелку//1
// CMD_X2 = 24, //переключить стрелку//2
// CMD_X3 = 94, //переключить стрелку//3
// CMD_AUTO_ARROW = 28, //автоматически выключает стрелки//5
// CMD_TEMP_STOP = 178, //временный стоп //ок
// CMD_SMOOTH_START = 208, //плавный старт //вверх
// // CMD_SMOOTH_STOP = 50, //плавный стоп //вниз
// // CMD_LOW_SPEED = 170, //низкая скорость //перемотка назад
// // CMD_NORMAL_SPEED = 42, //рабочая скорость //play
// // CMD_MAX_SPEED = 232, //максимальная скорость //перемотка вперед
// // CMD_STOP = 104, //стоп//stop
// // CMD_TURN_LEFT = 242, //левый поворотник//-vol
// // CMD_TURN_RIGHT = 144, //правый поворотник//+vol
// // CMD_POWER_OFF = 80, //выключить машинку//exit
// // CMD_SPEED_UP = 200, //увеличить скорость на 10//CH+
// // CMD_SPEED_DOWN = 72, //уменьшить скорость на 10//CH-
// // CMD_MANUAL_ON = 64, //ручной режим вкл //3
// // CMD_MANUAL_OFF = 96, //ручной режим выкл //6
// // CMD_REVERSE = 129, //задний ход //9
// // CMD_INFO = 136, // отправляет заряд ионистора//info
// // CMD_POWER_ON = 18, //сброс машинки, после выключения//0
// // ///калибровка--в машинке будут перемигиваться фары и поворотники--увеличение значений будет укзано миганиями
// // CMD_CALIB_MODE = 114, //калибровка//menu
// // CMD_CAL_VOLT_UP = 200, //в калибровке/увеличение напряжения для запуска//CH+
// // CMD_CAL_VOLT_DOWN = 72, //в калибровке/уменьшение напряжения для запуска//CH-
// // CMD_CAL_SPEED_UP = 208, //в калибровке//увеличить среднюю скорость машинки//вверх
// // CMD_CAL_SPEED_DOWN= 50, //в калибровке//уменьшить среднюю скорость машинки//вниз
// // CMD_CAL_ID_UP = 232, //в калибровке//увеличить адрес ID//перемотка вперед
// // CMD_CAL_ID_DOWN = 170, //в калибровке//уменьшить адрес ID//перемотка назад
// // CMD_CAL_TEST_LED = 98, //в калибровке//вкл-выкл тест сигнала//1
// // CMD_CAL_OK = 178, //в калибровке//подтвердить изменение//OK
// // CMD_CAL_RESET = 224 //в калибровке//Сброс настроек по умолчанию//5
// };
enum IRCommands {
x1 = 12, //передача ID на УУ
x2 = 24, //между машинками
x3 = 94, //передача ID на УУ
x4 = 8, //между машинками
x5 = 28, //передача ID на УУ
x6 = 90, //между машинками
x7 = 66, //передача ID на УУ
x8 = 82, //между машинками
x9 = 74, //передача ID на УУ
x0 = 22, //между машинками
x_test = 68, //передача ID на УУ
x_menu = 71, //между машинками
x_on = 69, //между машинками
};
// =============================================================================
// НАСТРОЙКИ
// =============================================================================
#define DEBUG_ENABLE //Включение дебаг режима, закоментировать, если дебаг не нужен
uint8_t DEVICE_ID = 1; //адрес устройства по дефолту (1-255)
//Рабочие адреса
uint8_t CMD_QUERY_ID = 47; //прием адреса машинки\\47
uint8_t CMD_CAR_TO_CAR = 33; //между машинками
uint8_t CMD_TRAFFIC_LIGHT = 55; //адрес светофора
uint8_t CMD_CALIBRATION = 0; //адрес прибора калибровки//2-BBK
//Настройки светофора
uint8_t TF_ON = 0; //включение светофора 1-включен, 0-выключен
uint8_t SF_ON = 0; //полярность светофора, 0 - с общим GND, 1 - с общим плюсом
uint8_t SVT = 10; //задержка переключения светофора в сек
uint8_t MIG = 40; //скорость мигания светофора в мсек*10
uint8_t freq_sig = 400; //частота отправки сигнала в мсек*10
//Команды для светофора
uint8_t CMD_TEMP_STOP = 178; //временный стоп //ок
uint8_t CMD_SMOOTH_START = 208; //плавный старт //вверх
// =============================================================================
// CAN НАСТРОЙКИ
// =============================================================================
#define CAN_ID_BASE 0x100 // Базовый CAN ID
#define CAN_ID_PC_TO_DEVICE 0x200 // ID для команд от PC к устройству
#define CAN_ID_DEVICE_TO_PC 0x300 // ID для данных от устройства к PC
#define CAN_ID_DISCOVERY 0x100 // ID для обнаружения устройств
// =============================================================================
// БИБЛИОТЕКИ
// =============================================================================
#include "NecDecoder.h"
#include "NecEncoder.h"
#include <EEPROM.h>
NecDecoder CP1_ir_in;
NecDecoder CP2_ir_in;
NecDecoder CP3_ir_in;
NecDecoder CP4_ir_in;
NecEncoder CP1_IR_OUT(PIN_IR_OUT_CP[0]);
NecEncoder CP2_IR_OUT(PIN_IR_OUT_CP[1]);
NecEncoder CP3_IR_OUT(PIN_IR_OUT_CP[2]);
NecEncoder CP4_IR_OUT(PIN_IR_OUT_CP[3]);
NecEncoder IR1_OUT(PIN_UNI[3]);
NecEncoder IR2_OUT(PIN_UNI[7]);
#ifdef DEBUG_ENABLE
#define DEBUG(x) Serial.print(x)
#define DEBUGLN(x) Serial.println(x)
#else
#define DEBUG(x)
#define DEBUGLN(x)
#endif
enum Work_Mode {
MODE_MANUAL,
MODE_AUTOMATIC
};
Work_Mode mode;
// Состояние светофора
enum TrafficLightState {
TL_STATE_RED,
TL_STATE_RED_YELLOW,
TL_STATE_GREEN,
TL_STATE_GREEN_BLINK,
TL_STATE_YELLOW
};
TrafficLightState state;
uint8_t receiving_data[8] = {0}; //массив принимаемых данных
uint8_t temp_data[9] = {0}; //массив принимаемых данных
uint8_t send_data[8] = {0}; //массив отправляемых данных
// Глобальные переменные для 3 стрелок
unsigned long arrowTimers[8] = {0, 0, 0, 0, 0, 0, 0, 0};
bool automatic_arrow;
bool Tl_ON;
void ir1Isr() {
CP1_ir_in.tick();
}
void ir2Isr() {
CP2_ir_in.tick();
}
void ir3Isr() {
CP3_ir_in.tick();
}
void ir4Isr() {
CP4_ir_in.tick();
}
void initialize(){
DEBUGLN (F("SmartCars - UDM-KU"));
DEBUG (F("Версия ПО: ")); DEBUGLN (FIRMWARE_VERSION);
DEBUG(F("Board: STM32F103C8T6"));
DEBUG(F("F_CPU: ")); DEBUGLN(F_CPU);
if (EEPROM.read(132) == 30){ //проверяем, была ли калибровка
if (EEPROM.read(10) != 255) EEPROM.get(10, DEVICE_ID);
if (EEPROM.read(20) != 255) EEPROM.get(20, TF_ON);
if (TF_ON){
if (EEPROM.read(22) != 255) EEPROM.get(22, SF_ON);
if (EEPROM.read(24) != 255) EEPROM.get(24, SVT);
if (EEPROM.read(26) != 255) EEPROM.get(26, MIG);
if (EEPROM.read(28) != 255) EEPROM.get(28, freq_sig);
}
DEBUGLN (F("Данные считаны из памяти"));
} else DEBUGLN (F("!!!В ДЕМО режиме!!!"));
DEBUG (F("ID устройства: ")); DEBUGLN (DEVICE_ID);
DEBUG (F("Светофор: "));if (TF_ON){
DEBUGLN (F("включен"));
DEBUG (F("Полярность светофора: "));
if (SF_ON) DEBUGLN (F("плюс")); else DEBUGLN (F("GND"));
DEBUG (F("Задержка переключениия: ")); DEBUG (SVT); DEBUGLN (F(" сек."));
DEBUG (F("скорость мигания: ")); DEBUG (MIG*10); DEBUGLN (F(" милисек."));
DEBUG (F("скорость ИК сигнала: ")); DEBUG (freq_sig*10); DEBUGLN (F(" милисек."));
} else DEBUGLN (F("выключен"));
}
void setup() {
// Инициализация светофоров
for(int i = 0; i < 8; i++) {
pinMode(PIN_UNI[i], OUTPUT);
digitalWrite(PIN_UNI[i], HIGH); // Выключено (активный LOW)
}
// Инициализация ИК передатчиков
for(int i = 0; i < 4; i++) {
pinMode(PIN_IR_OUT_CP[i], OUTPUT);
pinMode(PIN_IR_PIT_CP[i], OUTPUT);
pinMode(PIN_IR_IN_CP[i], INPUT_PULLUP);
digitalWrite(PIN_IR_OUT_CP[i], LOW);
digitalWrite(PIN_IR_PIT_CP[i], LOW);
}
// Настройка прерываний (если нужно)
attachInterrupt(PIN_IR_IN_CP[0], ir1Isr, FALLING);
attachInterrupt(PIN_IR_IN_CP[1], ir2Isr, FALLING);
attachInterrupt(PIN_IR_IN_CP[2], ir3Isr, FALLING);
attachInterrupt(PIN_IR_IN_CP[3], ir4Isr, FALLING);
// // Отключаем JTAG для использования PB3, PB4, PB5
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
// GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); // Отключаем JTAG, оставляем SWD
#ifdef DEBUG_ENABLE
Serial.begin(9600); //115200 - 9600
#endif
initialize();
}
// void sendDeviceStatus() {
// uint8_t data[8] = {0};
// data[0] = DEVICE_ID; // ID устройства
// data[1] = x1 ? 1 : 0; // Состояние X1
// data[2] = x2 ? 1 : 0; // Состояние X2
// data[3] = x3 ? 1 : 0; // Состояние X3
// data[4] = automatic_arrow ? 1 : 0; // Автострелки
// data[5] = 0; // Резерв
// data[6] = 0; // Резерв
// data[7] = 0; // Резерв
// sendCAN_Message(CAN_ID_DEVICE_TO_PC + DEVICE_ID + 0x80, data, 8);
// }
// void sendDiscoveryResponse() {
// uint8_t data[8] = {0};
// data[0] = DEVICE_ID; // ID устройства
// data[1] = FIRMWARE_VERSION * 100; // Версия прошивки
// data[2] = 1; // Тип устройства (1=Управляющее)
// data[3] = 2; // Количество ИК приемников
// data[4] = 3; // Количество управляемых блоков
// data[5] = 0; // Резерв
// data[6] = 0; // Резерв
// data[7] = 0; // Резерв
// sendCAN_Message(CAN_ID_DISCOVERY + DEVICE_ID, data, 8);
// }
// void IR_send_id(){ // отправка ID при срабатывании Холла
// static unsigned long send_tmr2;
// digitalWrite(PIN_IR_ENABLE, HIGH); //отключение ИК приемника на время передачи
// if (millis() - send_tmr2 > 500) {
// irFront.send(CMD_QUERY_ID, carID);
// send_tmr2 = millis();
// digitalWrite(PIN_IR_ENABLE, LOW);
// }
// }
//мы принимаем пакет 1.1.101.69.10.0.5.1.56 - наш адрес, ИК передатчик, ИК адрес, ИК команда, стрелка Х1, Х2, Х3, служебный - 1 обычный прием, CRC
//data 15.1.103.69.1.0.0.1.56- номер принятого пакета, ИК передатчик 0-нет, ИК адрес, ИК команда, стрелка Х1, Х2, Х3, служебный, CRC
/*
1-15 - адрес устройства
2-1 - № передатчика
3-101 - адрес машинки
4-68 - команда для машинки
5-50 - стрелка Х1 в мс*100
6-0 - стрелка Х2 в мс*100
7-10 - стрелка Х3 в мс*100
8-1 - служебный, 1-выполнение, 5- узнать состояние, 99 - изменение настроек
9-111 - CRC вычисляется
*/
void Receive_data() {
if (Serial.available()) {
char buffer[32];
int len = Serial.readBytesUntil('\n', buffer, sizeof(buffer)-1);
buffer[len] = '\0';
int received_id, ir_num, ir_adr, ir_data, st_x1, st_x2, st_x3, service, rec_CRC;
unsigned int rec_num;
// Парсим 8 чисел
if (sscanf(buffer, "%d.%d.%d.%d.%d.%d.%d.%d.%d", &received_id, &ir_num, &ir_adr, &ir_data, &st_x1, &st_x2, &st_x3, &service, &rec_CRC) == 9) {
temp_data[0] = (uint8_t)received_id;//кому адресован пакет
temp_data[1] = (uint8_t)ir_num; //номер ИК передатчика
temp_data[2] = (uint8_t)ir_adr; //ИК адрес
temp_data[3] = (uint8_t)ir_data; //ИК команда
temp_data[4] = (uint8_t)st_x1; //Стрелка 1
temp_data[5] = (uint8_t)st_x2; //Стрелка 1
temp_data[6] = (uint8_t)st_x3; //Стрелка 1
temp_data[7] = (uint8_t)service; //Сервисный
temp_data[8] = (uint8_t)rec_CRC; //CRC
// При проверке пакета:
uint8_t check_crc = 0;
for (int i = 0; i < 7; i++) {
check_crc ^= temp_data[i];
}
if (check_crc == temp_data[8]) DEBUG (F("Принят пакет - "));
else DEBUG (F("CRC не совпадает - "));
DEBUGLN (buffer);
// Проверяем ID устройства
if (temp_data[0] == DEVICE_ID) {
if (service == 1){
rec_num++;
// Пакет для нас - обрабатываем
receiving_data[0] = (uint8_t)rec_num; //номер принятого пакета
receiving_data[1] = temp_data[1]; //номер ИК передатчика
receiving_data[2] = temp_data[2]; //ИК адрес
receiving_data[3] = temp_data[3]; //ИК команда
receiving_data[4] = temp_data[4]; //Стрелка 1
receiving_data[5] = temp_data[5]; //Стрелка 1
receiving_data[6] = temp_data[6]; //Стрелка 1
receiving_data[7] = temp_data[7]; //Сервисный
DEBUGLN (F("Выплонение команд"));
}else DEBUGLN (F("Не прошел сервисный байт"));
} else {
// Пакет не для нас - отправляем обратно
DEBUGLN (DEVICE_ID); DEBUG (F("Не наш пакет - ")); DEBUGLN (buffer);
}
} else {
DEBUGLN (F("ERROR: Неверный формат пакета"));
}
}
}
void Input_Command(){
if (CP1_ir_in.available()) { //проверяем пришла ли команда
uint8_t address = CP1_ir_in.readAddress(); // Чтение адреса
uint8_t command = CP1_ir_in.readCommand(); // Чтение команды
DEBUGLN ("Принят пакет, приемник 1:");
DEBUG (address); DEBUG(F(" -адрес - команда - ")); DEBUGLN (command); //отладка ИК
if (address == CMD_QUERY_ID) {
send_data[1] = command;
send_data[6] = 1;
}else if (address == CMD_CALIBRATION){
send_data[1] = command;
send_data[6] = 2;
}
}
if (CP2_ir_in.available()) { //проверяем пришла ли команда
uint8_t address = CP2_ir_in.readAddress(); // Чтение адреса
uint8_t command = CP2_ir_in.readCommand(); // Чтение команды
DEBUGLN ("Принят пакет, приемник 2:");
DEBUG (address); DEBUG(F(" -адрес - команда - ")); DEBUGLN (command); //отладка ИК
if (address == CMD_QUERY_ID) {
send_data[2] = command;
send_data[6] = 1;
}else if (address == CMD_CALIBRATION){
send_data[2] = command;
send_data[6] = 2;
}
}
if (CP3_ir_in.available()) { //проверяем пришла ли команда
uint8_t address = CP3_ir_in.readAddress(); // Чтение адреса
uint8_t command = CP3_ir_in.readCommand(); // Чтение команды
DEBUGLN ("Принят пакет, приемник 3:");
DEBUG (address); DEBUG(F(" -адрес - команда - ")); DEBUGLN (command); //отладка ИК
if (address == CMD_QUERY_ID) {
send_data[2] = command;
send_data[6] = 1;
}else if (address == CMD_CALIBRATION){
send_data[2] = command;
send_data[6] = 2;
}
}
if (CP4_ir_in.available()) { //проверяем пришла ли команда
uint8_t address = CP4_ir_in.readAddress(); // Чтение адреса
uint8_t command = CP4_ir_in.readCommand(); // Чтение команды
DEBUGLN ("Принят пакет, приемник 4:");
DEBUG (address); DEBUG(F(" -адрес - команда - ")); DEBUGLN (command); //отладка ИК
switch (command) {//тест
case x1: //увеличиваем напряжение включения машинки
arrow(PIN_UNI[0], 3000);
break;
case x2: //уменьшаем напряжение включения машинки
arrow(PIN_UNI[1], 3000);
break;
case x3: //увеличиваем среднюю скорость машинки
arrow(PIN_UNI[2], 3000);
break;
case x4: //увеличиваем среднюю скорость машинки
arrow(PIN_UNI[3], 3000);
break;
case x5: //увеличиваем напряжение включения машинки
arrow(PIN_UNI[4], 3000);
break;
case x6: //уменьшаем напряжение включения машинки
arrow(PIN_UNI[5], 3000);
break;
case x7: //увеличиваем среднюю скорость машинки
arrow(PIN_UNI[6], 3000);
break;
case x8: //увеличиваем среднюю скорость машинки
arrow(PIN_UNI[7], 3000);
break;
case x_menu: //увеличиваем среднюю скорость машинки
TF_ON = !TF_ON;
break;
case x_test: //увеличиваем среднюю скорость машинки
Tl_ON = !Tl_ON;
break;
default:
break;
}
}
}
void test_led(){
static uint8_t p=0,d=1; static unsigned long lt=0;
if(millis()-lt<100) return; lt=millis();
p+=d; if(p==0||p==7) d=-d;
arrow(PIN_UNI[p], 100);
}
// x1 = 12, //передача ID на УУ
// x2 = 24, //между машинками
// x3 = 94, //передача ID на УУ
// x4 = 8, //между машинками
// x5 = 28, //передача ID на УУ
// x6 = 90, //между машинками
// x7 = 66, //передача ID на УУ
// x8 = 82, //между машинками
// x9 = 74, //передача ID на УУ
// x0 = 22, //между машинками
// x_test = 68, //передача ID на УУ
// x_menu = 71, //между машинками
// x_on = 69, //между машинками
// if (address == CMD_QUERY_ID) {
// send_data[2] = command;
// send_data[6] = 1;
// }else if (address == CMD_CALIBRATION){
// send_data[2] = command;
// send_data[6] = 2;
// receiving_data[4] = 10;
// arrow(PIN_UNI[0], 1000);
// }
// }
// }
// // При формировании пакета:
// data[7] = 0; // Обнуляем байт CRC
// for (int i = 0; i < 7; i++) {
// data[7] ^= data[i]; // XOR всех байтов
// }
// // При проверке пакета:
// uint8_t check_crc = 0;
// for (int i = 0; i < 7; i++) {
// check_crc ^= data[i];
// }
// if (check_crc == data[7]) {
// // CRC верна
// }
void Sending_data(){
if (send_data[6]){
send_data[7] = 0; // Обнуляем байт CRC
for (int i = 0; i < 7; i++) {
send_data[7] ^= send_data[i]; // XOR всех байтов
}
char response[32]; //отправка пакета
snprintf(response, sizeof(response), "%d.%d.%d.%d.%d.%d.%d.%d",
send_data[0] = DEVICE_ID, // адрес устройства
send_data[1], // CP1 принятый адрес машинки
send_data[2], // CP2 принятый адрес машинки
send_data[3], // ir_adr
send_data[4], // ir_data
send_data[5], // st_x1
send_data[6], // сервисный
send_data[7]); // CRC
DEBUGLN(F("Отправляем пакет - ")); Serial.println(response); // Отправляем ответ
//send_data[6]=0;
for (int i = 0; i < 7; i++) {
send_data[i] = 0; // обнуляем пакет
}
}
}
void Work(){
unsigned int current_date;
Receive_data();
Sending_data();
if (receiving_data[0] > current_date){
current_date = receiving_data[0];
if (receiving_data[1]) IR_send(receiving_data[1], receiving_data[2], receiving_data[3]);
}
}
// Функция включения стрелки на время
void arrow(uint8_t pin, unsigned long duration_ms) {
// Находим индекс пина в массиве PIN_UNI
for (int i = 0; i < 8; i++) {
if (pin == PIN_UNI[i]) {
digitalWrite(pin, LOW); // Включаем (активный LOW)
DEBUG (F("Стрелка - ")); DEBUG (pin); DEBUGLN (F(" ON"));
arrowTimers[i] = millis() + duration_ms;
return;
}
}
}
// Функция обновления стрелок (вызывать в loop)
void updateArrows() {
unsigned long now = millis();
for (int i = 0; i < 8; i++) {
if (arrowTimers[i] > 0 && now >= arrowTimers[i]) {
digitalWrite(PIN_UNI[i], HIGH); // Выключаем
DEBUG (F("Стрелка - ")); DEBUG (PIN_UNI[i]); DEBUGLN (F(" OFF"));
arrowTimers[i] = 0;
}
}
}
void IR_send (uint8_t device, uint8_t Address, uint8_t Data){
DEBUG (F("Передача ИК пакета- ")); DEBUG (device); DEBUG (F(" ADR- ")); DEBUG (Address); DEBUG (F(" DATA- ")); DEBUGLN (Data);
switch (device) {
case 1:
digitalWrite(PIN_IR_PIT_CP[0], HIGH); //отключение ИК приемника на время передачи
CP1_IR_OUT.send(Address, Data);
digitalWrite(PIN_IR_PIT_CP[0], LOW);
break;
case 2:
digitalWrite(PIN_IR_PIT_CP[1], HIGH); //отключение ИК приемника на время передачи
CP2_IR_OUT.send(Address, Data);
digitalWrite(PIN_IR_PIT_CP[1], LOW);
break;
case 3:
if (!TF_ON) IR1_OUT.send(Address, Data); else DEBUG (F("! Ошибка передатчик занят светофором"));
break;
case 4:
if (!TF_ON) IR1_OUT.send(Address, Data); else DEBUG (F("! Ошибка передатчик занят светофором"));
break;
default:
break;
}
receiving_data[1] = 0; receiving_data[2] = 0; receiving_data[3] = 0;
}
void loop() {
if(TF_ON) Traffic_Lights();
Input_Command();
if(!TF_ON) Work();
updateArrows();
if (Tl_ON) test_led();
}
Loading
stm32-bluepill
stm32-bluepill