Необходимо вывести температуру DS18B20 и положение РЕЛЕ на TFT 2.4 дисплей (ХЕЛП)
- Войдите на сайт для отправки комментариев
Пт, 18/03/2016 - 03:49
#include <OneWire.h>
OneWire ds(10); // подключен к 10 пину (резистор на 4.7к обязателен)
void setup(void) {
Serial.begin(9600);
pinMode(3, OUTPUT);
// ВКЛ насос
digitalWrite(13, HIGH);
}
void loop(void) {
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
if ( !ds.search(addr)) {
Serial.println("No more addresses.");
Serial.println();
ds.reset_search();
delay(250);
return;
}
Serial.print("ROM =");
for( i = 0; i < 8; i++) {
Serial.write(' ');
Serial.print(addr[i], HEX);
}
if (OneWire::crc8(addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return;
}
Serial.println();
// the first ROM byte indicates which chip
switch (addr[0]) {
case 0x10:
Serial.println(" Chip = DS18S20"); // or old DS1820
type_s = 1;
break;
case 0x28:
Serial.println(" Chip = DS18B20");
type_s = 0;
break;
case 0x22:
Serial.println(" Chip = DS1822");
type_s = 0;
break;
default:
Serial.println("Device is not a DS18x20 family device.");
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44, 1); // начало коммуникации
delay(1000);
present = ds.reset();
ds.select(addr);
ds.write(0xBE); // читаем значение
Serial.print(" Data = ");
Serial.print(present, HEX);
Serial.print(" ");
for ( i = 0; i < 9; i++) { // смотрим 9 байтов
data[i] = ds.read();
Serial.print(data[i], HEX);
Serial.print(" ");
}
Serial.print(" CRC=");
Serial.print(OneWire::crc8(data, 8), HEX);
Serial.println();
// Преобразуем получненный данные в температуру
// Используем int16_t тип, т.к. он равен 16 битам
// даже при компиляции под 32-х битный процессор
int16_t raw = (data[1] << 8) | data[0];
if (type_s) {
raw = raw << 3;
if (data[7] == 0x10) {
raw = (raw & 0xFFF0) + 12 - data[6];
}
} else {
byte cfg = (data[4] & 0x60);
if (cfg == 0x00) raw = raw & ~7;
else if (cfg == 0x20) raw = raw & ~3;
else if (cfg == 0x40) raw = raw & ~1;
}
celsius = (float)raw / 16.0;
fahrenheit = celsius * 1.8 + 32.0;
Serial.print(" Temperature = ");
Serial.print(celsius);
Serial.print(" Celsius, ");
Serial.print(fahrenheit);
Serial.println(" Fahrenheit");
// Если температура достигает температуры кипения (с погрешностью), отключаем кипятильник
if (celsius > 40)
{
digitalWrite(13, LOW);
}
if (celsius < 40)
{ digitalWrite(13, HIGH);
}
}
Изучаете ваш дисплей, учитесь выводить на него значение переменных, выводите значение celsius и состояние 13 пина. Все.
Спасибо , разобрался !
Но, осталась проблемка с затиранием старых значений температуры ! т.е налаживаются по верх старых....
Полностью дисплей обновлять функцией tft.fillScreen(BLACK); не вариант (((( Может есть вариант , просто обновить участок ?
Код сырой программы (TFT+ds18b20)
Молодец! На LCD просто печатают в нужные знакоместа пробелы.
Не совсем понял о чем вы говорите !
По моему вопрос был как избежать накладывания значений старых температур и новых !?
Не совсем понял о чем вы говорите !
По моему вопрос был как избежать накладывания значений старых температур и новых !?
У меня tft не было, может отличаться. На lcd подобную проблему решают методом вывода пробелов, а потом печати новых значений на эти места.
В том то и проблемма испробовал уже 2 разных метода ... результат тот же (((
Спасибо !
То есть конструкция вида
tft.setTextSize(3); tft.setTextColor(CYAN); tft.setCursor(280, 56); tft.print(" "); tft.setCursor(280, 56); tft.print(Temp);не срабатывает ??
Так не сработает. В tft.setTextColor(color1, color2) задай два аргумента: первый цвет текста, второй цвет фона. Если вызвать с одним аргументом, то фон прозрачный и текст накладывается на предыдущий
Проверить не на чем, но уверен, что Вы абсолютно правы. Тогда примерно так
Огроменное спасибо Araris и Julian Gardna.... Все работает в точности как написали ....
Я то не учь не допер , сразу ....
Я сам не допер сразу. Ни в одном примере этого нет, на форуме нашел.
=) Сейчас бы еще нормально русифицировать это дело , последняя задача.
Я библиотеками от адафрута пользуюсь и SWTFT как драйвер дисплея. Там с кирилицей все нормально. Смотри примеры к SWTFT.
Это да, спасибо ! Тут разобрался без труда , случайно нет ли описаниля библиотеки для тач-скрина ....
Идея в том что бы создать несколько подменю и добавить возможность менять уставки с дисплея ....
Вот и загвоздочка, с ЕЕРОМ разобрался , а вот вывести все это на отдельную подменюшку никак .
dovgiy_nikolay, пожалуйста! С тачскрином я сам не разобрался, к сожалению, меню для меня мрак полный. Мое одноранговое меню на диплей 1602 заняло 80% программной и 60% оперативной памяти на Ардуино Уно, подменю даже не рассматривал тогда. Так что сам с удовольствием почитаю на эту тему.
Я библиотеками от адафрута пользуюсь и SWTFT как драйвер дисплея. Там с кирилицей все нормально. Смотри примеры к SWTFT.
А интересно было бы посмотреть начало Вашей программы до секции "void loop()"
Я когда искал библиотеку для своего 2.4", "SWIFT" тоже пытался использовать, но ничего не получилось с такой ошибкой:
Arduino: 1.6.8 Hourly Build 2016/02/19 10:33 (Windows XP), Плата:"Arduino/Genuino Uno" C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp: In member function 'void Adafruit_GFX::drawChar(int16_t, int16_t, unsigned char, uint16_t, uint16_t, uint8_t)': C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:566:14: warning: unused variable 'xa' [-Wunused-variable] xa = pgm_read_byte(&glyph->xAdvance); ^ C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp: In member function 'boolean Adafruit_GFX_Button::contains(int16_t, int16_t)': C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:931:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if ((x < (_x - _w/2)) || (x > (_x + _w/2))) return false; ^ C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:931:43: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if ((x < (_x - _w/2)) || (x > (_x + _w/2))) return false; ^ C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:932:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if ((y < (_y - _h/2)) || (y > (_y + _h/2))) return false; ^ C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:932:43: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if ((y < (_y - _h/2)) || (y > (_y + _h/2))) return false; ^ C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp: In member function 'void Adafruit_GFX::drawBitmap(int16_t, int16_t, const uint8_t*, int16_t, int16_t, uint16_t)': C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:392:27: warning: 'byte' may be used uninitialized in this function [-Wmaybe-uninitialized] if(i & 7) byte <<= 1; ^ C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp: In member function 'void Adafruit_GFX::drawBitmap(int16_t, int16_t, const uint8_t*, int16_t, int16_t, uint16_t, uint16_t)': C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:410:27: warning: 'byte' may be used uninitialized in this function [-Wmaybe-uninitialized] if(i & 7) byte <<= 1; ^ C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp: In member function 'void Adafruit_GFX::drawBitmap(int16_t, int16_t, uint8_t*, int16_t, int16_t, uint16_t)': C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:427:27: warning: 'byte' may be used uninitialized in this function [-Wmaybe-uninitialized] if(i & 7) byte <<= 1; ^ C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp: In member function 'void Adafruit_GFX::drawBitmap(int16_t, int16_t, uint8_t*, int16_t, int16_t, uint16_t, uint16_t)': C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:443:27: warning: 'byte' may be used uninitialized in this function [-Wmaybe-uninitialized] if(i & 7) byte <<= 1; ^ C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp: In member function 'void Adafruit_GFX::drawXBitmap(int16_t, int16_t, const uint8_t*, int16_t, int16_t, uint16_t)': C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:462:27: warning: 'byte' may be used uninitialized in this function [-Wmaybe-uninitialized] if(i & 7) byte >>= 1; ^ C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp: In member function 'void Adafruit_GFX::drawChar(int16_t, int16_t, unsigned char, uint16_t, uint16_t, uint8_t)': C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:600:9: warning: 'bits' may be used uninitialized in this function [-Wmaybe-uninitialized] if(bits & 0x80) { ^ C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:604:47: warning: 'yo16' may be used uninitialized in this function [-Wmaybe-uninitialized] fillRect(x+(xo16+xx)*size, y+(yo16+yy)*size, size, size, color); ^ C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:570:14: warning: 'xo16' may be used uninitialized in this function [-Wmaybe-uninitialized] int16_t xo16, yo16; ^ C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\SWTFT-Shield\SWTFT.cpp: In member function 'void SWTFT::drawLine3Byte(int16_t, int16_t, int16_t, int16_t, uint8_t, uint8_t, uint8_t)': C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\SWTFT-Shield\SWTFT.cpp:629:16: error: 'swap' was not declared in this scope swap(x0, y0); ^ C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\SWTFT-Shield\SWTFT.cpp:634:16: error: 'swap' was not declared in this scope swap(x0, x1); ^ exit status 1 Ошибка компиляции. Неверная библиотека найдена в C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Arduino_TouchScreen: C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Arduino_TouchScreen Неверная библиотека найдена в C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\TFT-Shield-Example-Code-master: C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\TFT-Shield-Example-Code-master Неверная библиотека найдена в C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Arduino_TouchScreen: C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\Arduino_TouchScreen Неверная библиотека найдена в C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\TFT-Shield-Example-Code-master: C:\Documents and Settings\Администратор\Мои документы\Arduino\libraries\TFT-Shield-Example-Code-master This report would have more information with "Show verbose output during compilation" option enabled in File -> Preferences.#include <Adafruit_GFX.h> // Libreria de graficos #include <Adafruit_TFTLCD.h> // Libreria de LCD #include <OneWire.h> #include <DallasTemperature.h> #define LCD_CS A3 // Chip Select - Pin analogico 3 #define LCD_CD A2 // Command/Data - Pin Analogico 2 #define LCD_WR A1 // LCD Write - Pin Analogico 1 #define LCD_RD A0 // LCD Read - Pin Analogico 0 #define LCD_RESET A4 // LCD Reset - Pin Analogico 4 #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF // Instancia del LCD Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); #define ONE_WIRE_BUS 11 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); void setup() { pinMode(13, OUTPUT); tft.begin(0x9341); tft.fillScreen(BLACK); tft.setRotation(1); sensors.begin(); } void loop(){ sensors.requestTemperatures(); tft.setCursor(0, 30); tft.setTextColor(YELLOW,BLACK); tft.setTextSize(3); tft.print(utf8rus("ОТОПЛЕНИЕ C -> ")); tft.print(sensors.getTempCByIndex(1),0); tft.setCursor(0, 60); tft.setTextColor(YELLOW,BLACK); tft.setTextSize(3); tft.print(utf8rus("КОТЕЛ C -> ")); tft.print(sensors.getTempCByIndex(3),0); if (sensors.getTempCByIndex(3) > 25) { digitalWrite(13, HIGH); tft.setTextSize(3); tft.drawRoundRect(12, 160, 290, 60, 30, GREEN); tft.setTextColor(GREEN,BLACK); tft.setCursor(22, 180); tft.print(utf8rus(" ДВИГАТЕЛЬ ВКЛ ")); } else if (sensors.getTempCByIndex(3) < 25) { digitalWrite(13, LOW); tft.setTextSize(3); tft.drawRoundRect(12, 160, 290, 60, 30, RED); tft.setTextColor(RED,BLACK); tft.setCursor(32, 180); tft.print(utf8rus("ДВИГАТЕЛЬ ВЫКЛ")); } tft.setCursor(0, 90); tft.setTextSize(3); tft.setTextColor(YELLOW,BLACK); tft.print(utf8rus("ДОМ C -> ")); tft.print(sensors.getTempCByIndex(0),0); tft.drawLine(0, 25, 320, 25, GREEN); tft.drawLine(0, 115, 320, 115, GREEN); tft.drawLine(0, 115, 320, 115, GREEN); tft.drawLine(0, 140, 320, 140, GREEN); tft.setCursor(15, 5); tft.setTextSize(2); tft.setTextColor(WHITE); tft.print(utf8rus("ТЕМПЕРАТУРА КОТЛА И ДОМА")); tft.setCursor(45, 120); tft.setTextSize(2); tft.setTextColor(WHITE); tft.print(utf8rus("ПОЛОЖЕНИЕ ДВИГАТЕЛЯ")); }Что подключено :
1) Три датчика ds18b20
* На 11й пин ардуино
2) Реле
* Пока одна релюха подлючена к 13 пину
Как результат выполнения скетча .... Увы пока без коментариев , дорабатываю меню .
И да, внутри используется доп библлиотека для рус языка (utf8rus)
ссылка на библиотеку и рус шрифт :
https://drive.google.com/open?id=0B5CI0lkASPtvQXFiUEN6QWF1MXM
Красиво! Но я бы лично еще и цифры в ряд выстроил у правой стороны, наряду с "Отоплением" и каждую строчку взял бы в красивую рамочку как "Положение двигателя" . А почему именно "положение", а не "состояние"? И почему "Двигатель"? Я так понял у тебя над котлом стоит маленькая турбинка, которая гоняет по системе воду, помогает конвекции. Так этот насос как-то называется... не помню. У нас его называют "Турбина" ))))))
И - ага! SWIFT у тебя-таки тоже не пошёл судя из того что ты заюзал Adafruit_TFTLCD.h Значит дело не в компе или ХР... Спасибо.
Buzzer2010, я сейчас сам решил проверить, и у меня не откомпилировался работающий ранее код. На версии 1.5 кажется работало, а теперь
Изменены опции сборки, пересобираем все C:\Users\Керровитарр\Documents\Arduino\libraries\SWTFT-Shield\SWTFT.cpp: In member function 'void SWTFT::drawLine3Byte(int16_t, int16_t, int16_t, int16_t, uint8_t, uint8_t, uint8_t)': C:\Users\Керровитарр\Documents\Arduino\libraries\SWTFT-Shield\SWTFT.cpp:629:16: error: 'swap' was not declared in this scope swap(x0, y0); ^ C:\Users\Керровитарр\Documents\Arduino\libraries\SWTFT-Shield\SWTFT.cpp:634:16: error: 'swap' was not declared in this scope swap(x0, x1); ^ exit status 1 Ошибка компиляции.А сам код вот он
#include <Adafruit_GFX.h> // Core graphics library #include "SWTFT.h" // Hardware-specific library #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF SWTFT tft; int time=3600; void setup(void) { tft.reset(); uint16_t identifier = tft.readID(); tft.begin(identifier); tft.fillScreen(BLACK); } void loop(void) { int disp = time - millis()/1000; int h = disp/3600; int m = disp/60 - h*60; int s = disp - m*60 - h*3600; tft.setCursor(5, 100); tft.setTextColor(WHITE, BLACK); tft.setTextSize(5); if (h < 10) tft.print("0"); tft.print(h); tft.print(":"); if (m < 10) tft.print("0"); tft.print(m); tft.print(":"); if (s < 10) tft.print("0"); tft.print(s); }dovgiy_nikolay, Ваша ссылка на библиотеку просит регистрации:
Требуется разрешение
Хотите просмотреть файл? Свяжитесь с его владельцем или войдите в аккаунт с правом доступа. Подробнее…
Поправьте, пожалуйста! Мне бы пригодились рабочие библиотеки для этого дисплея.
Рабочие библиотеки лежат на гитхабе и у Вас тоже, думаю, лежали или до сих пор лежат. Там дело не в библиотеке, а в способе инициализации дисплея.
Если у Вас такой же китайский шилд как у меня - с SD-ридерм и тачем, то тогда вот как надо запускать этот дисплей:
И дальше уже выводите на экран то что хотели... Всё!
Buzzer2010, спасибо, но не получилось. Та жеошибка SWTFT.cpp:634:16: error: 'swap' was not declared in this scope, т.е. переменная в библиотеке не объявлена (а как тогда на предыдущих версиях компилировалось?). А дисплейчик у меня внешне такой же. От mcufriend, на чипе spfd5408.
Buzzer2010, спасибо, но не получилось. Та жеошибка SWTFT.cpp:634:16: error: 'swap' was not declared in this scope, т.е. переменная в библиотеке не объявлена (а как тогда на предыдущих версиях компилировалось?). А дисплейчик у меня внешне такой же. От mcufriend, на чипе spfd5408.
А причем тут вообще "SWIFT" ? Вы же видели что в тексте программы, автор уже не использует эту библиотеку и даже перешёл на руссифицированый шрифт от "Adafruit" !
Поменяйте начало программы, что касается графики, на вот такие строки:
// Объявляем библиотеки #include <Adafruit_GFX.h> #include <Adafruit_TFTLCD.h> #include <TouchScreen.h> // Инициализируем дисплей Adafruit_TFTLCD tft(A3, A2, A1, A0, A4); void setup(void) { tft.begin(0x9341); .......................................И только тогда - пробуйте!
https://drive.google.com/file/d/0B5CI0lkASPtvQXFiUEN6QWF1MXM/view?usp=sh...
Ну как я и писал ниже что проэкт еще дорабатывать буду ...
и ДА, у меня эта библиотека тоже не пошла . Надоело ковырятся , просто заменил на рабоую .
Впереди еще меню есть , так что сейчас просто задачу решил с организацией вывода данных ...
Теперь пытаюсь разобратся как написать меню и прочертить тренды .
https://drive.google.com/file/d/0B5CI0lkASPtvQXFiUEN6QWF1MXM/view?usp=sh...
А как, если не секрет, Вы прицепили три датчика к одной ноге ардуино?
#define ONE_WIRE_BUS 11OneWire oneWire(ONE_WIRE_BUS);DallasTemperature sensors(&oneWire)voidsetup()25{30sensors.begin();// Инициализация сенсоров31}voidloop(){3334sensors.requestTemperatures();3536tft.setCursor(0, 30);37tft.setTextColor(YELLOW,BLACK);38tft.setTextSize(3);39tft.print(utf8rus("ОТОПЛЕНИЕ C -> "));40tft.print(sensors.getTempCByIndex(1),0);Вывод сенсоров на ТФТ дисплей4142tft.setCursor(0, 60);43tft.setTextColor(YELLOW,BLACK);44tft.setTextSize(3);45tft.print(utf8rus("КОТЕЛ C -> "));46tft.print(sensors.getTempCByIndex(3),0);Вывод сенсоров на ТФТ дисплей
67tft.setCursor(0, 90);68tft.setTextSize(3);69tft.setTextColor(YELLOW,BLACK);70tft.print(utf8rus("ДОМ C -> "));71tft.print(sensors.getTempCByIndex(0),0);Можно задать чтение через ИД сенсора , но я подумал и счел это глупой идеей ... Так как можно использовать это
sensors.getTempCByIndex .... Как подлючил механически смотрите фото ниже .Где ножки садим ваши датчики .
Красный --- +
Оранжевый --- Сигнал
Черный --- Минус .
Перемычка между Оранжевым и Красным это резистор 4.7 кОМ
Но у меня получилось 4.9 , так как на работе небыло подходяшего , пришлось паять кишку .
А если можно - схематически )))
Но у меня получилось 4.9 , так как на работе небыло подходяшего , пришлось паять кишку .
Резистор от 2К до 10К, чем меньше, тем сильнее нагружен пин, но и меньше шанс на помехи.
ну при 3.9К херню на выходе получал )))
Чет непонятное происходило с датчиком )
Спасибо за подсказку, на метиостание проверю как буду лепить ее )
Так. Всё теперь понятно. Осталось только разобраться как программно с одной ноги читать сразу три показания...
СПАСИБО!
Смотри выше .... бы можешь и 10 поставить .... не суть )))
Смотри выше .... бы можешь и 10 поставить .... не суть )))
Да ладно! О.о Так зачем тогда выдумали ардуины меги с 54-мя выводами или сколько там их у нее.. ))))
неее, ну я образно говоря ))) Не совсеми шылдами прокатит такой фокус )))
А интересно можно ли зацепить на эту "плату расширения" датчик температуры и фоторезистор например?
Не, с температурными датчиками это очень удачная идея как раз, потому что я уже стал гадать куда бы мне приделать эту ардуину, а то программирование программированием, а практического применения - ноль. А вот, кстати, очень было бы полезно приделть пару датчиков к моему автомобилю. Например для управления воздушной заслонкой карбюратора, а то "местная" автоматика не выдерживает никакой критики уже. Только я слышал что в автомобиле жуткие помехи по питанию идут и надо с этим как-то бороться.
Незнаю правельно ли я понял , но как я понял эту строку !
после *реквестет сенсор* идет sensors.getTempCByIndex (0) это и будет твой первый датчик !
т.е он якобы читает подряд все что приходит на вход 11пина и сортирует сам т.д по адресам
ток как эта хрень происходит для меня пока тоже мрак !
Т.е сканирует все - сравнение адресов - вывод по индексам !
sensors.getTempCByIndex (0)
sensors.getTempCByIndex (1)
sensors.getTempCByIndex (3)
и т.д
Дальше нюансы библиотеки , туда я не лез )
Все что могу сказать .... Я пили этот код
#include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 9 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); DeviceAddress Thermometer1 = { 0x28, 0x00, 0x54, 0xB6, 0x04, 0x00, 0x00, 0x92 }; // адрес датчика DS18B20 280054B604000092 DeviceAddress Thermometer2 = { 0x28, 0x9E, 0x95, 0xB5, 0x04, 0x00, 0x00, 0x57 }; void setup() { sensors.begin(); sensors.setResolution(Thermometer1, 10); sensors.setResolution(Thermometer2, 10); Serial.begin(9600); } void printTemperature(DeviceAddress deviceAddress) { float tempC = sensors.getTempC(deviceAddress); Serial.println(tempC); } void loop() { sensors.requestTemperatures(); Serial.print("Sensor1 "); printTemperature(Thermometer1); Serial.print("Sensor2 "); printTemperature(Thermometer2); }Тогда есть только дин способ - практический )))) Ждём тогда когда ты установишь всю эту конструкцию на свой котёл и что будет )))
Так. Всё теперь понятно. Осталось только разобраться как программно с одной ноги читать сразу три показания...
СПАСИБО!
Простенько
Схема работает , лампочки 220в 100ват подлючал через реле ))) Включаются и тухнут по достижению температуры .... мне то что, только насос переключать ) Не ракеты запускать из дому =D
Так. Всё теперь понятно. Осталось только разобраться как программно с одной ноги читать сразу три показания...
СПАСИБО!
Простенько
Незнаю правельно ли я понял , но как я понял эту строку !
после *реквестет сенсор* идет sensors.getTempCByIndex (0) это и будет твой первый датчик !
т.е он якобы читает подряд все что приходит на вход 11пина и сортирует сам т.д по адресам
ток как эта хрень происходит для меня пока тоже мрак !
Т.е сканирует все - сравнение адресов - вывод по индексам !
sensors.getTempCByIndex (0)
sensors.getTempCByIndex (1)
sensors.getTempCByIndex (3)
и т.д
Дальше нюансы библиотеки , туда я не лез )
Вот где собака порылась:
Да , спасибо за заметку)))
.... А дисплейчик у меня внешне такой же. От mcufriend, на чипе spfd5408.
А можно поинтересоваться - как Вы определили какой чип на вашем дисплее? Очень актуально!
С помощью этого скетча читаем ID контроллера, далее ищем в гугле
код моего 0x7783, этот же код нужно писать при инициализации дислея.
Так не сработает. В tft.setTextColor(color1, color2) задай два аргумента: первый цвет текста, второй цвет фона. Если вызвать с одним аргументом, то фон прозрачный и текст накладывается на предыдущий
Спасибо Вам за Ваш пост. Долго я искал как решить вывод значений с датчиков на экран.