Добрый день! Постараюсь объяснить, сразу понятно))), и так на Мега 2560 залит вот этот скетч: Код (C++): #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 залит вот этот скетч: Код (C++): 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… и тд) как от этого избавиться?
да, понимает все нормально, после точки пишет 0 и все) проблему решил, прописав на УНО- Serial.setTimeout(). 2 секунды, на ожидание числа на входном потоке, видимо скетч обрабатывался уже более 1 секунды, а описании Serial.parseFloat();, если дольше одной секунды ни чего не приходит то он возвращает 0 причем в этот же порт в обратном направлении вот он и вылазил))), хорошо что обратил внимание на это в описании Serial.parseFloat(); иначе до сих пор ломал бы голову,
видимо это всем известно))) и учитывают сразу этот момент))) я пока еще совсем нубас в этом деле))) что то мои знания в программировании игр на С# тут вооооообще ни как не пригодились)))) чувствую себя ламер-ландухом