Arduino. Проблема с serial. Нужна помощь
Пишу скетч для управления маленькой сыроварней у себя дома. Нужно в сериал передавать данные температуры рубашки и молока и читать оттуда управляющие команды
сам скетч
#include <OneWire.h> // Подключаем библиотеку для взаимодействия с устройствами, работающими на шине и по протоколу 1-Wire#include <DallasTemperature.h> // Подключаем библиотеку с функциями для работы с DS18B20 (запросы, считывание и преобразование возвращаемых данных)
#define ONE_WIRE_BUS 4 // Указываем пин подключения data-вывода датчика температуры
// Массив для хранения адресов датчиков
DeviceAddress sensor1, sensor2;
// Таймер очередного считывания значений с датчика температуры
unsigned long tempReadTimer;
// Частота считывания температуры с датчика (мс)
int tempReadDuration = 1000;
// Порт для нагревателя
#define HEATER_PIN 12
//Порт для охладителя
#define COOLER_PIN 13
//Порт для активации мешалки
#define BLENDER_PIN 4
//Порт для мешалки правый
#define BLENDER_PIN_R 5
//Порт для мешалки левый
#define BLENDER_PIN_L 6
OneWire oneWire(ONE_WIRE_BUS); // Сообщаем библиотеке об устройстве, работающем по протоколу 1-Wire
DallasTemperature sensors(&oneWire); // Связываем функции библиотеки DallasTemperature с нашим 1-Wire устройством (DS18B20)
void setup(void)
{
Serial.begin(9600); // Порт на Nextion
Serial.setTimeout(50); // Таймаут ожидания что все пришло
// Нагреватель
pinMode(HEATER_PIN, OUTPUT);
// Охладитель
pinMode(COOLER_PIN, OUTPUT);
// Мешалка
pinMode(BLENDER_PIN, OUTPUT);
pinMode(BLENDER_PIN_R, OUTPUT);
pinMode(BLENDER_PIN_L, OUTPUT);
// Выключаем порт нагревателя
digitalWrite(COOLER_PIN, LOW);
// Выключаем порт охладителя
digitalWrite(HEATER_PIN, LOW);
//Выключаем порты мешалки
digitalWrite(BLENDER_PIN, LOW);
digitalWrite(BLENDER_PIN_L, LOW);
digitalWrite(BLENDER_PIN_R, LOW);
// Запускаем библиотеку измерения температуры
sensors.begin();
// Запускаем поиск датчиков
if (!sensors.getAddress(sensor1, 0)) {
Serial.println("Датчик 1 не найден!");
}
if (!sensors.getAddress(sensor2, 1)) {
Serial.println("Датчик 2 не найден!");
}
// Установка разрешения датчиков (9-12 бит)
sensors.setResolution(sensor1, 12);
sensors.setResolution(sensor2, 12);
}
void loop() {
// Запрос температуры от всех датчиков
sensors.requestTemperatures();
// Чтение температуры с каждого датчика
float temp1 = sensors.getTempC(sensor1);
float temp2 = sensors.getTempC(sensor2);
if(millis() >= tempReadTimer + tempReadDuration) {
// Отправляем значение температуры молока в Nextion
Serial.print("Main.MilkT.txt=\"");
Serial.print(String(temp1*10));
Serial.print("\"");
Serial.write(0xFF);
Serial.write(0xFF);
Serial.write(0xFF);
// Отправляем значение температуры воды в Nextion
Serial.print("Main.WaterT.txt=\"");
Serial.print(String(temp2*10));
Serial.print("\"");
Serial.write(0xFF);
Serial.write(0xFF);
Serial.write(0xFF);
// Обновляем таймер
tempReadTimer = millis();
}
if (Serial.available() > 0)
{
// Что то пришло на вход
// Считываем данные из порта
String code = Serial.readString();
if(code == "HeaterOn") {
// Включаем порт нагревателя
digitalWrite(HEATER_PIN, HIGH);
// Выключаем порт охладителя
digitalWrite(COOLER_PIN, LOW);
}
else if(code == "HeaterOff") {
// Выключаем порт нагревателя
digitalWrite(HEATER_PIN, LOW);
}
else if(code == "CoolerOn") {
// Включаем порт нагревателя
digitalWrite(COOLER_PIN, HIGH);
// Выключаем порт охладителя
digitalWrite(HEATER_PIN, LOW);
}
else if(code == "CoolerOff") {
// Выключаем порт нагревателя
digitalWrite(COOLER_PIN, LOW);
}
}
}
В текущем виде он не передает значения температур. В мониторе порта видно
Main.MilkT.txt=""���Main.WaterT.txt=""���
Но стоит убрать код обработки команд
if(code == "HeaterOn") {// Включаем порт нагревателя
digitalWrite(HEATER_PIN, HIGH);
// Выключаем порт охладителя
digitalWrite(COOLER_PIN, LOW);
}
else if(code == "HeaterOff") {
// Выключаем порт нагревателя
digitalWrite(HEATER_PIN, LOW);
}
else if(code == "CoolerOn") {
// Включаем порт нагревателя
digitalWrite(COOLER_PIN, HIGH);
// Выключаем порт охладителя
digitalWrite(HEATER_PIN, LOW);
}
else if(code == "CoolerOff") {
// Выключаем порт нагревателя
digitalWrite(COOLER_PIN, LOW);
}
то температура начинает передаватся нормально
Main.MilkT.txt="201.88"���Main.WaterT.txt="207.50"
Подскажите пожалуйста, где я ошибаюсь. Что я делаю не так.
UPD. Проблема решена. в копию кода не попало еще одно присоединение библиотеки. и оно жрало память. В общем не хватало памяти.