/* * ООО НПК "НУКЛЕРОН" * Эмулятор прибора Радиаскоп-1. * Версия 1.0 (03.09.2025) * https://trirad.nucleron.ru */ #include // список команд #define com_version "#nuc version" #define com_workset "#nuc workset" #define com_voltage "#nuc voltage" #define com_beep_on "#nuc beep_on" #define com_beep_off "#nuc beep_off" char inChar; // принятый из порта символ String inStr = ""; // принятая строка String outStr = ""; // строка подготовленная для передачи byte flag = 0; // флаг корректно принятой команды word imp = 0; // счётчик импульсов радиации byte beep = 1; // флаг включения звука зарегистрированной частицы word hv = 0; // напряжение питания счётчика float cv = 0; // напряжение питания CPU float uv = 0; // напряжение питания USB // обработка прерывания таймера (имитация поведения дозиметра) void timer1() { // 68 имп./мкР, 10 мкР/ч if (random(1000)<20) { imp++; if (beep) { digitalWrite(LED_BUILTIN,HIGH); } } else { digitalWrite(LED_BUILTIN,LOW); } // напряжение питания CPU cv = (float)random(328,333); // напряжение питания USB uv = (float)random(492,512); // напряжение питания счётчика hv = (word)random(390,410); } void setup() { Serial.begin(9600); pinMode(LED_BUILTIN, OUTPUT); // дозиметр начинает отвечать через несколько секунд после USB соединения digitalWrite(LED_BUILTIN,HIGH); delay(5000); digitalWrite(LED_BUILTIN,LOW); MsTimer2::set(100, timer1); MsTimer2::start(); } void loop() { while (Serial.available()) { // принимаем что-то из порта inChar = Serial.read(); // если ещё не конец строки, то продолжаем собирать строку if (inChar!='\n') { inStr = inStr + (char)inChar; } // если строка собрана полностью - формируем ответ else { flag = 1; // Serial.println(inStr); // принята команда workset if (inStr == com_workset) { outStr = "#nuc @workset " + (String)imp + ",0," + (String)beep; Serial.println(outStr); flag = 0; } // принята команда voltage if (inStr == com_voltage) { outStr = "#nuc @voltage " + (String)(cv/100) + "," + (String)(uv/100) + "," + (String)hv; Serial.println(outStr); flag = 0; } // принята команда version if (inStr == com_version) { outStr = "#nuc @version 100.3,1.3,189,1,0,537-90010"; Serial.println(outStr); flag = 0; } // принята команда beep_on if (inStr == com_beep_on) { outStr = "#nuc @beep_on"; beep = 1; Serial.println(outStr); flag = 0; } // принята команда beep_off if (inStr == com_beep_off) { outStr = "#nuc @beep_off"; beep = 0; Serial.println(outStr); flag = 0; } // сообщение об ошибке (если команда не распознана) if (flag) { outStr = "#nuc @error \"" + inStr + "\""; Serial.println(outStr); } // и вновь строка пуста inStr = ""; } } // while }