«0» в Serial, не ясного происхождения.
- Войдите на сайт для отправки комментариев
Пт, 18/01/2019 - 18:18
Добрый день! Постараюсь объяснить, сразу понятно))), и так на Мега 2560 залит вот этот скетч:
#include <memorysaver.h> #include <UTFT.h> // подключаем библиотеку UTFT #include <SPI.h> // подключаем библиотеку SPI для общения с SD-картой по шине SPI #include <SdFat.h> // подключаем библиотеку SdFat для работы с SD-картой #include <UTFT_SdRaw.h> // подключаем библиотеку UTFT_SdRaw для вывода изображений с SD-карты на дисплей #include <OneWire.h> // Инициализация библиотеки шины OneWire. #include <DallasTemperature.h> // Инициализация библиотеки термодатчиков. #define SD_CHIP_SELECT SS // определяем константу SD_CHIP_SELECT которой присваиваем номер вывода Arduino подключённого к линии выбора CS шины SPI SD-карты (номер используемый по умолчанию хранится в константе SS) extern uint8_t SmallFont[]; // подключаем маленький шрифт extern uint8_t BigFont[]; // подключаем большой шрифт extern uint8_t SevenSegNumFontPlusPlus[]; // подключаем цифровой шрифт UTFT myGLCD(TFT32MEGA, 38,39,40,41); // тип дисплея 3,2 MEGA (480x320 chip ILI9481) SdFat mySD; // объявляем объект mySD класса библиотеки SdFat для работы с его функциями и методами UTFT_SdRaw myFiles(&myGLCD); // объявляем объект myFiles класса библиотеки UTFT_tinyFAT с передачей ссылки на объект myGLCD класса библиотеки UTFT #define ONE_WIRE_BUS 10 // Подключение цифрового вывода датчика к 10-му пину Ардуино. OneWire oneWire(ONE_WIRE_BUS); // Запуск интерфейса OneWire для подключения OneWire устройств. DallasTemperature sensors(&oneWire); // Указание, что устройством oneWire является термодатчик от Dallas Temperature. //const int relPin = 3; // Реле включения насоса. float TempUP; int TempDown; int Test; void setup() { sensors.begin(); //Serial.begin(9600); Serial1.begin(57600); //Serial2.begin(9600); // pinMode (relPin,OUTPUT); myGLCD.InitLCD (); // инициируем дисплей (по умолчанию горизонтальная ориентация) myGLCD.clrScr (); // стираем всю информацию с дисплея // myGLCD.setFont (BigFont); // устанавливаем большой шрифт // myGLCD.setColor(VGA_BLUE); // устанавливаем синий цвет текста // myGLCD.print ("BigFont", CENTER, 100); // выводим текст "BigFont" на дисплей // myGLCD.print("Temperatura", CENTER, 100); if (!mySD.begin(SD_CHIP_SELECT)) { myGLCD.setFont(BigFont); // устанавливаем большой шрифт myGLCD.setColor(VGA_RED); // устанавливаем цвет текста myGLCD.print("SD CADR - ERROR", CENTER, 150); } // while(!mySD.begin(SD_CHIP_SELECT)){} myFiles.load(0,0,480,320,"test.raw"); } void loop(){ sensors.requestTemperatures(); // Команда опроса температуры. Serial1.println(121); //Serial2.println(122); TempUP = sensors.getTempCByIndex(0); TempDown = sensors.getTempCByIndex(1); Test = sensors.getTempCByIndex(2); if (!mySD.begin(SD_CHIP_SELECT)) // При отключении SD-CARD, выводится сообщение об ошибке, исчезает после наладки { myGLCD.setFont(BigFont); myGLCD.setColor(VGA_RED); myGLCD.print("SD CADR - ERROR", CENTER, 150); if (mySD.begin(SD_CHIP_SELECT)); { myGLCD.clrScr (); myFiles.load(0,0,480,320,"test.raw"); } } if (sensors.getTempCByIndex(0) <= -100) // Аварийная остановка, после обрыва датчика температы подачи и возврат в норму после наладки { myFiles.load(0,0,480,320,"TempAlert.raw"); while(sensors.getTempCByIndex(0) < -100){} if (sensors.getTempCByIndex(0) > -100) { myGLCD.clrScr (); myFiles.load(0,0,480,320,"test.raw"); } } if (TempUP > 10 | TempUP < 25 ) { myGLCD.setColor(0,0,255); } if (TempUP >= 25) { // digitalWrite(relPin,HIGH); myGLCD.setColor(255,255,0); } if (TempUP >= 75) { myGLCD.setColor(0,255,0); } if (TempUP >= 90 | sensors.getTempCByIndex(0) <= 10 ) { myGLCD.setColor(255,0,0); } myGLCD.setFont(SevenSegNumFontPlusPlus); myGLCD.printNumF(TempUP,1,55,75); myGLCD.printNumI(TempDown,295,75); myGLCD.printNumI(TempUP,55,175); }
не туда нажал и так продолжим, Мега Mega соединена с UNO по UART, на UNO залит вот этот скетч:
Мега передает всего одно значение Serial1.Println(121) UNO его благополучно принимает и выводит в монитор. Теперь самое главное к MEGE подключено 3 датчика температуры. DS18b20, значение которые выводятся на TFT, когда я объявлю float TempUP, и показываю значения на экране с 1 знаком после запятой myGLCD.printNumF(TempUP,1,55,75); все хорошо экран показывает температуру. В Мониторе порта принимающей UNO значение 121… когда я подключаю второй датчик температуры и показываю его значение на экране…. myGLCD.printNumF(TempDown,295,75); то значения отображаются на экране нормально. Но в мониторе порта принимаю UNO появляется какой то загадочный «0» т.е монитор пишет следующее: 121-0-121-0-121-0 ну и до бесконечности…. Если вывод на экран одного из датчиков температуры перевести из myGLCD.printNumF в myGLCD.printNumI. то в Мониторе порта, благополучно отображается только 121… а если подключить 3 датчика и вывести из на TFT то уже не важно в каком виде выводить в целом или дробном TFT, в мониторе принимающей УНО. Этот загадочный 0 есть всегда, 121-0-121-0-121-0… и тд) как от этого избавиться?
67 строку посмотри, а?
Мега передает всего одно значение Serial1.Println(121) UNO его благополучно принимает и выводит в монитор, там как раз об этой строке
Похоже идет переполнение RAM, вот глюки и вылезают. Скорее всего стек переполняется. Слишком много на бедную Мегу нагрузили.
Подключение дополниетельного датчика и работа с FLoat требует дополнительной памяти. Надо скетч оптимизировать по потребляемой RAM
при прошивке пишет что паямти использовано 15% первой и 12% второй))) т
Похоже идет переполнение RAM, вот глюки и вылезают. Скорее всего стек переполняется. Слишком много на бедную Мегу нагрузили.
Подключение дополниетельного датчика и работа с FLoat требует дополнительной памяти. Надо скетч оптимизировать по потребляемой RAM
Да там программы две строки в два ряда. ТС - поставьте эщо сериал.принт
я думаю для тебя не составить труда дать совет по этой программе в две строки))) ты же проффи)))
я думаю для тебя не составить труда дать совет по этой программе в две строки))) ты же проффи)))
Не - после 90-х меня "на слабо" не возьмешь. А нахрена мне это? Добавляй Serial.print() и отслеживай переменные, двоешник!
Подключение дополниетельного датчика и работа с FLoat требует дополнительной памяти. Надо скетч оптимизировать по потребляемой RAM
Да там программы две строки в два ряда. ТС - поставьте эщо сериал.принт
Уважаемый, если вы посмотрите на начало скетча, то увидете там подключение большого количества толстых библиотек.
А что касается "там программы две строки в два ряда", так и одной строкой можно всю память отожрать.
Уважаемый, если вы посмотрите на начало скетча, то увидете там подключение большого количества толстых библиотек.
А что касается "там программы две строки в два ряда", так и одной строкой можно всю память отожрать.
Да...а Извините, но не привык что п/п пишут идиоты....
ты по делу можешь сказать, или слюни лить только можешь?))) то на строку посмотри, то код тебе маленький, ты внимательно прочитал все что я написал???))) куда, какие переменные отслеживать?))) какой Serial.print...?))) там все просто было, прописал Serial.setTimeout(). На 2 секунды и все… у принимающей УНО, и все прошло… т.к,у Serial.parseInt() если дольше 1 секунды ни чего не приходит возвращает значение 0… сопляк.
Модератор: предлагаю убавить эмоций.
при прошивке пишет что паямти использовано 15% первой и 12% второй))) т
Так это статической, а при работе память еще динамически выделяется под разные нужды, вот ее и не хватает.
Попробуйте, например, один из шрифтов не использовать.
Или, лучше, уберите пока работу с SD cards