«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 залит вот этот скетч:
float val; void setup() { Serial.begin(57600); } void loop() { if (Serial.available() > 0) { val = Serial.parseFloat(); Serial.println(val); //delay(1000); } }Мега передает всего одно значение 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