LCD и датчик температуры DS1820

vworld
vworld аватар
Offline
Зарегистрирован: 26.09.2011

а ведь попадалась инфа о том, что к датчику следует обращаться не чаще раз в 750 млсек. ну вот и предположил поставить паузу...

Заключительный вопрос - справится библиотека сама если на улице будет менее 0 вывести "-" или нужно самому обрабатывать такой вывод?

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Библиотека возвращает signed int - должно все работать.

А вместо паузы в скетче примера вывод в последовательный порт, видимо...

step962
Offline
Зарегистрирован: 23.05.2011

vworld пишет:

а ведь попадалась инфа о том, что к датчику следует обращаться не чаще раз в 750 млсек. ну вот и предположил поставить паузу...

Даташит по этому вопросу сообщает следующее:

Table 2. Thermometer Resolution Configuration
R1 R0 RESOLUTION   MAX CONVERSION
             (BITS)              TIME
 0   0         9               93.75 ms (tCONV/8)
 0   1       10             187.5 ms (tCONV/4)
 1   0       11             375 ms (tCONV/2) 
 1   1       12             750 ms (tCONV)

vworld
vworld аватар
Offline
Зарегистрирован: 26.09.2011

Подскажите пожалуйста по регистру сдвига...

т.к. хотелось бы сэкономить цифровые, а LCD занимает 6 цифровых, решил попробовать использовать регистр сдвига 74HC595

нашел готовый пример на удивление все заработало по нему, НО что же мне делать с выводом кириллических символов?

Раньше для кириллицы изспользовал библиотеку LiquidCrystalRus а вот как сейчас быть?
 

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Я пользуюсь программулиной lcdHd44780.exe для подготовки русских фраз. Не нужно создавать дополнительного кода для преобразований, она просто кодирует символы под индикатор. Вот, возмите: home.alexfisher.ru/prog/lcdHd44760.zip

vworld
vworld аватар
Offline
Зарегистрирован: 26.09.2011

ок...попробую разобраться

Нужно вывести "Градусов" - прога переделала в [9]={0xA1, 0x70, 0x61, 0xE3, 0x79, 0x63, 0x6F, 0xB3, '\0'}; //Градусов

Как такое вывести в замен lcd.print('Градусов');

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Я так делаю:

const char mes[9]={161, 112, 97, 227, 121, 99, 111, 179, '\0'}; //Градусов
...
lcd.print(mes);

 

vworld
vworld аватар
Offline
Зарегистрирован: 26.09.2011

не пропускает компилятор такую конструкцию :(

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

У меня пропускает:

/*
  LiquidCrystal Library - Hello World
 
 Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
 library works with all LCD displays that are compatible with the 
 Hitachi HD44780 driver. There are many of them out there, and you
 can usually tell them by the 16-pin interface.
 
 This sketch prints "Hello World!" to the LCD
 and shows the time.
 
  The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)
 
 Library originally added 18 Apr 2008
 by David A. Mellis
 library modified 5 Jul 2009
 by Limor Fried (http://www.ladyada.net)
 example added 9 Jul 2009
 by Tom Igoe
 modified 22 Nov 2010
 by Tom Igoe
 
 This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/LiquidCrystal
 */

// include the library code:
#include <LiquidCrystal.h>

const char mes[9]={161, 112, 97, 227, 121, 99, 111, 179, '\0'};

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print(mes);
}

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(millis()/1000);
}

Binary sketch size: 2516 bytes (of a 30720 byte maximum)
Может Вы пытаетесь не в том месте сонстанту объявить?

vworld
vworld аватар
Offline
Зарегистрирован: 26.09.2011

такой код и у меня пропускает, но я же не могу показать

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

потому как я регистр сдвига использую

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

И что? Иницилизуйте по-своему. Главное - объявления всех констант поставить перед объявлением переменных.

Хоть бы написали, что компилятор пишет, когда "не пропускает".

vworld
vworld аватар
Offline
Зарегистрирован: 26.09.2011

кусок кода

#include <LCD3Wire.h> 
#include <DallasTemperature.h>
#include <LiquidCrystalRus.h>

const int mes[9]={161, 112, 97, 227, 121, 99, 111, 179, '\0'}; //Градусов

// Arduino pins
#define LCD_LINES 2  // number of lines in your display
#define DOUT_PIN  6  // Dout pin
#define STR_PIN   5  // Strobe pin
#define CLK_PIN   4  // Clock pin


//create object to control an LCD.  
LCD3Wire lcd = LCD3Wire(LCD_LINES, DOUT_PIN, STR_PIN, CLK_PIN); 
DallasTemperature tempSensor1; 
// You may instantiate as many copies as you require.

char * floatToString(char * outstr, float value, int places, int minwidth, bool rightjustify);

void setup(void) {
  // initialize
    lcd.init();
    tempSensor1.begin(7); // Data wire is plugged into pin 12 on the Arduino
}

void loop(void) {
  float temp;
  char buff[10];
    switch(tempSensor1.isValid())
   {
       case 1:
           Serial.println("Invalid CRC");
                 tempSensor1.reset(); // Attempts to redetect IC
           return;
       case 2:
           Serial.println("Not a valid device");
                 tempSensor1.reset(); // Attempts to redetect IC
           return;
   }
   temp = (tempSensor1.getTemperature());
   lcd.cursorTo(2,0); 
   lcd.printIn(floatToString(buff,temp,3,0,false));
   lcd.print(0xDF);// degree sign
   //const char mes[9]={161, 112, 97, 227, 121, 99, 111, 179, '\0'}; //Градусов
   lcd.print(mes);


}

Компилятор ругается

sketch_feb29a.cpp: In function 'void loop()':
sketch_feb29a:46: error: invalid conversion from 'const int*' to 'int'
sketch_feb29a:46: error: initializing argument 1 of 'void LCD3Wire::print(int)'

 

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

У меня, к сожалению, нет библиотеки LCD3Wire, но на первый взгляд, функция класса определена только как ::print(int), а определения ::print(char*) нет.Вы перед этим строковую конструкцию выводите через printIn. Попробуйте поставить

lcd.printIn(mes);

 

vworld
vworld аватар
Offline
Зарегистрирован: 26.09.2011

не помогло :(

а библиотеку LCD3Wire брал тут

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Посмотрел. Только там не printIn, а println :)

Определено как println(char value[]) - то есть все должно пройти. Проверте свой скетч, похоже, у Вас вместо маленькой L большая i в имени функции.

И поменяйте const int на const char

vworld
vworld аватар
Offline
Зарегистрирован: 26.09.2011

И поменяйте const int на const char - поменял

lcd.println(mes); - вывожу так

Хотя касательно букв I и l например есть такая строка

lcd.printIn(floatToString(buff,temp,3,0,false));

и в ней 100% используется I

ругается компилятор


sketch_feb29a.cpp: In function 'void loop()':
sketch_feb29a:45: error: 'class LCD3Wire' has no member named 'println'

 

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

 

#<>.h
class LCD3Wire {
public:
LCD3Wire(int lcd_lines, int dat_pin, int str_pin, int clk_pin);
void commandWrite(int value);
void init();
void print(int value);
void printIn(char value[]);

#<>.c
void LCD3Wire::printIn(char msg[]) {
unsigned int i;
for (i=0;i < strlen(msg);i++){
print(msg[i]);
}
}

Я валяюсь... В библиотеке действительно буква i !!!

Попробую у себя - отпишусь.

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Попробовал.

работает, если определить

char mes[9]={161, 112, 97, 227, 121, 99, 111, 179, '\0'}; //Градусов

  lcd.printIn(mes);

Компилятор константы определяет в программной памяти - а это другой подход. Если у Вас много сообщений, то оперативки может нехватить, Вам нужно будет располагать сообщения или в программной памяти, или в еепром, в оперативке держать только 1 буферную переменную. Ну или подправить библиотеку, чтобы она понимала вывод данных прямо из программной памяти.

Кстати, и так не ругается :) :

  lcd.printIn({161, 112, 97, 227, 121, 99, 111, 179, '\0'});

 

vworld
vworld аватар
Offline
Зарегистрирован: 26.09.2011

По Вашему варианту все равно у меня не заработало, НО заработало вот так...

const int mes[9]={161, 112, 97, 227, 121, 99, 111, 179, '\0'}; //Градусов

   for(int i = 0;i<9;i++){

   lcd.print(mes[i]);}

НО выводит - Градусов || дополнительный значек ||

Чудеса...

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Вы выводите это в цикле, следовательно, i<8, потому что '\0' выводить не надо. Сделайте лучше:

for (int i=0; mes[i]>0; i++) lcd.print(mes[i]);

А вообще, LCD3Wire какой-то ущербный по сравнению со штатным. Штатный является наследником класса Print с переопределенным методом write, поэтому спокойно может выводить все, что угодно. Надо было всего по-своему переопределить метод write (через внешний регистр) и все. А тут - новый класс, но сырой.

vworld
vworld аватар
Offline
Зарегистрирован: 26.09.2011
for (int i=0; mes[i]>0; i++) lcd.print(mes[i]);

По такому варианту все работает как надо

 А вообще, LCD3Wire какой-то ущербный по сравнению со штатным - подскажите пожалуйста, что есть штатный? и если его правильней использовать, то могу и попробовать штатный...

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Штатный - я имел ввиду LiquidCrystal, но эту библиотеку нужно править под "3 провода" - переписывать метод write и править инициализацию.

Другой вариант - воспользоваться методом с "робокрафта" куча устройств по 5 проводам (там и ввод и вывод через внешние регистры, поэтому 5 проводов, а не 3)

vworld
vworld аватар
Offline
Зарегистрирован: 26.09.2011

Нашел библиотеку LCD3wires посвежее

но пример из статьи не заработал ну и мой код, который вчера "пытали" перестал работать :(

сижу вот пытаюсь понять в чем дело

Покопался - не сумел разобраться, НО нашел еще одну статью

Т.к. в программирование не силен, немного подправил и пример из этой статьи работает + еще у него есть автоскролл и т.п.

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

vworld пишет:

Нашел библиотеку LCD3wires посвежее

но пример из статьи не заработал ну и мой код, который вчера "пытали" перестал работать :(

сижу вот пытаюсь понять в чем дело

Покопался - не сумел разобраться, НО нашел еще одну статью

Т.к. в программирование не силен, немного подправил и пример из этой статьи работает + еще у него есть автоскролл и т.п.

Очень интересная библа! Спасибо! Поковыряюсь на досуге. Особенно понравилось использование старшего бита сдвигового регистра в качестве "enable" (минус 1 провод) и прямая работа с портами (FastIO)

vworld
vworld аватар
Offline
Зарегистрирован: 26.09.2011

AlexFisher пишет:

Очень интересная библа! Спасибо! Поковыряюсь на досуге. Особенно понравилось использование старшего бита сдвигового регистра в качестве "enable" (минус 1 провод) и прямая работа с портами (FastIO)

а можно немного "простым" языком прокомментировать? а то я из Вашего текста совсем ничего не понял, что же вкусного такого в библиотеке

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

vworld пишет:

а можно немного "простым" языком прокомментировать? а то я из Вашего текста совсем ничего не понял, что же вкусного такого в библиотеке

:)

"Простым" языком:

1. Понравилось, как автор извернулся с резистором и диодом и сэкономил одну ногу андурино

2. "Ногами дергает" через специальную библиотеку, которая работает быстрее

3. В библиотеках все подробно расписано и есть примеры.

Библиотеку взял из первоисточника (вчера обновилась) bitbucket.org/fmalpartida/new-liquidcrystal/downloads/LiquidCrystal_v1.2.0.zip

vworld
vworld аватар
Offline
Зарегистрирован: 26.09.2011

честно говоря все равно не уловил из Ваших пояснений :(

А по поводу библиотеки - мы несколкьо о разных говорим с Вами...я использую исключительно LiquidCrystal_SR_LCD3 и она тут более "полная", чем в предложеной Вами ссылке.

Сделал таки скетч с использованием LiquidCrystal_SR_LCD3 и снова уперса в те же  "грабли" - кириллические символы :(

Сейчас вывод делаю так

lcd.setCursor ( 0, 0 );
    lcd.print(F("Temperature"));
    lcd.setCursor ( 0, 2 );
    lcd.print(sensors.getTempCByIndex(0));

 

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Ну ясно. Я тоже на библиотеку через эту статью набрел - она там как первоисточник указана. Я не стал вчитываться в статью - просмотрел по диагонали и ушел на первоисточник.

vworld
vworld аватар
Offline
Зарегистрирован: 26.09.2011

как мне преодалеть

lcd.print(F("Temperature"));

в кириллическое "Температура" - пробовал поэксперементировать с программой, которые Вы мне как то указывали - не получилось :(

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

А что за функция F() ?

vworld
vworld аватар
Offline
Зарегистрирован: 26.09.2011

не знаю :( но в примере была, и я решил не умничить и применить ее...попробовал без нее - тоже все работает

только вот как все же кирилличе5ские вывести - пока не нашел...

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Пришла грандиозная идея (не хихикайте), но на заре русских кодировок мы этим способом пользовались. Кстати, и в знакогенераторе индикатора закодированы только символы, "подобных" которым нет в англиском языке.

То есть 

lcd.print("TEMnEPATyPA")

прокатит :)

Ну а из дельных советов, попробуйте

lcd.print({161, 112, 97, 227, 121, 99, 111, 179, '\0'}); //Температура

или

lcd.print(F("Температура"));

 

vworld
vworld аватар
Offline
Зарегистрирован: 26.09.2011

Цитата:
Ну а из дельных советов, попробуйте
1 lcd.print({161, 112, 97, 227, 121, 99, 111, 179, '\0'}); //Температура

компилятор ругается...

Цитата:
или
1 lcd.print(F("Температура"));

нет - так тоже не работает...

И еще я не могу уловить...про библиотеку LiquidCrystal в описание видел, что она умеет работать по 4битам...но не получилось завести через регистр сдвига, пока только с библиотекой LiquidCrystal_SR_LCD3 все работает, НО без кириллицы

aidas
Offline
Зарегистрирован: 07.03.2012
 #include <OneWire.h>
 #include <DallasTemperature.h>
 #include <LiquidCrystal.h>

LiquidCrystal lcd(7, 9, 11, 12, 8, 10);
  // Data wire is plugged into pin 3 on the Arduino
 #define ONE_WIRE_BUS 3

 // Setup a oneWire instance to communicate with any OneWire devices
 OneWire oneWire(ONE_WIRE_BUS);

 // Pass our oneWire reference to Dallas Temperature. 
 DallasTemperature sensors(&oneWire);

 DeviceAddress Thermometer1 = { 0x28, 0x5A, 0xE6, 0x9A, 0x03, 0x00, 0x00, 0XA7 };  // код сенсора   
 DeviceAddress Thermometer2 = { 0x28, 0x37, 0xB7, 0x9A, 0x03, 0x00, 0x00, 0x76 };  // код сенсора 
 DeviceAddress Thermometer3 = { 0x28, 0x8A, 0xBB, 0x9A, 0x03, 0x00, 0x00, 0x1A };  // код сенсора
 DeviceAddress Thermometer4 = { 0x28, 0xD4, 0xDB, 0x9A, 0x03, 0x00, 0x00, 0x36 };  // код сенсора


 void setup(void)
 {
 
 sensors.begin();
 
 sensors.setResolution(Thermometer1, 10);
 sensors.setResolution(Thermometer2, 10);
 sensors.setResolution(Thermometer3, 10);
 sensors.setResolution(Thermometer4, 10);
 
 lcd.begin(20,4); // columns, rows. 20x4
 lcd.clear(); 
 }

 void printTemperature(DeviceAddress deviceAddress)
 {
 float tempC = sensors.getTempC(deviceAddress);
 if (tempC == -127.00) {
 lcd.print("Error");
 } else {
 lcd.print((tempC),0);
  }
 }

 void loop(void)
 { 
 delay(2000);
 sensors.requestTemperatures();
 lcd.setCursor(0,0);
  lcd.print("1:");
 printTemperature(Thermometer1);
 
 lcd.setCursor(12,0);
  lcd.print("2:");
 printTemperature(Thermometer2);
 
 lcd.setCursor(0,2);
  lcd.print("3:");
 printTemperature(Thermometer3);
 
 lcd.setCursor(12,2);
  lcd.print("4:");
 printTemperature(Thermometer4);
 }

 

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

vworld пишет:

Цитата:
Ну а из дельных советов, попробуйте
1 lcd.print({161, 112, 97, 227, 121, 99, 111, 179, '\0'}); //Температура

компилятор ругается...

Цитата:
или
1 lcd.print(F("Температура"));

нет - так тоже не работает...

И еще я не могу уловить...про библиотеку LiquidCrystal в описание видел, что она умеет работать по 4битам...но не получилось завести через регистр сдвига, пока только с библиотекой LiquidCrystal_SR_LCD3 все работает, НО без кириллицы

Ну, ругается, потому что inline array не понимает :(

Можно так (все равно сообщения нужно где-то пачкой хранить):

    char mes[]={161, 112, 97, 227, 121, 99, 111, 179, '\0'};
    lcd.print(mes); //Температура

Или так:

    lcd.print('\161\112\97\227\121\99\111\179\0'); //Температура

 Еще Вам может помочь подпрогрпмма конвертации символа, но ее нужно встраивать в print или использовать отдельно в цикле. Приводит к "расточительству" примерно 200 байт. По мне, лучше все константы определить в программе уже конвертированными (с переводом в ремарке). Вот ссылка: www.microchip.su/showpost.php

chaytan
Offline
Зарегистрирован: 02.02.2012

сразу незнал куда запоститься, в тему к часам или в тему к температуре, но поскольку трабла с температурой значит сюда решил.

есть вот такой скетч, найден гдето на бескрайних просторах сети...

#include <LiquidCrystal.h> 
 #include <DallasTemperature.h>    
 #include <OneWire.h> 
 #include <WProgram.h> 
 #include <Wire.h> 
 #include <DS1307.h> 

 #define temp 10    //DS18B20 назначаем вход для датчика,в данном случае 10 

 OneWire oneWire(temp);             
 DallasTemperature sensors(&oneWire); 
 float tempext = 0; 


 int rtc[7]; 


 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // выставляем выхода для ЖКИ 

 void setup() 
 { 
   sensors.begin();   // запуск датчика OneWire, в данном случае только один DS18B20 
   lcd.print("DS18B20 test"); 

 // Раскомментируйте эти строки, если вы хотите установить время на старте 
  
//   RTC.stop(); 
//   RTC.set(DS1307_SEC,0); 
//   RTC.set(DS1307_MIN,52); 
//   RTC.set(DS1307_HR,01); 
//   RTC.set(DS1307_DOW,6); 
//   RTC.set(DS1307_DATE,14); 
//   RTC.set(DS1307_MTH,03); 
//   RTC.set(DS1307_YR,12); 
//   RTC.start(); 
  
   
   lcd.begin(20, 4);    // указываем сколь строк и символов 
    pinMode(9, OUTPUT);  
  analogWrite(9, 50);   // устанавливаем ШИМ выход   
   lcd.print("hello world"); 
   delay(1000); 
   lcd.clear(); 
 } 

 char* dayOfWeek[] = {"xxx", "Fri", "Sat", "Sun", "Mon", "Tue", "Wed", "Thu"};  //  дни недели 

 void loop() 
 { 
     sensors.requestTemperatures();    //запрос на чтение значений всех датчиков  повешинных на Arduino. в этом случае только один DS18B20 
     tempext=sensors.getTempCByIndex(0); 
     
   RTC.get(rtc,true); 

   lcd.setCursor(3,0); 
   printDigits(rtc[2],':'); 
   printDigits(rtc[1],':'); 
   printDigits(rtc[0],' '); 

   lcd.print(dayOfWeek[rtc[3]]); 

   lcd.setCursor(5,1); 
   printDigits(rtc[4],'/'); 
   printDigits(rtc[5],'/'); 
   printDigits(rtc[6],' '); 
   
          lcd.setCursor(4, 2); 
          lcd.print(tempext); 
          lcd.setCursor(0, 2); 
          lcd.print("Tem:"); 
             
    if(tempext > 30)                        //  Можем высвечивать сообщения о превышении температуры, в данном случае выдаёт при 30 градусах, 
                                               //также можно поддерживать температуру дороботать очень легко 
                                                 
    { 
   lcd.setCursor(0, 3); 
        lcd.print(" ALARME !!!!!! ");        // Пишем что хотим читать 
        delay(3000); 
        lcd.setCursor(0, 3); 
        lcd.print("                    "); 
         
   } 

   
   delay(100); 
 } 

 void printDigits(int digits, char delimiter) 
 { 
   if(digits < 10) { 
     lcd.print('0'); 
   } 
   lcd.print(digits,DEC); 
   lcd.print(delimiter); 
 }

суть здесь вопроса вот в чем. как-бы к часам притензий нет, температуру показывает, но вот последняя явно градусов на 7-8 выше чем реальная в помещении и вчастности у датчика.

чем это может быть вызвано??? датчик подключен по трехпроводной линии. 

vworld
vworld аватар
Offline
Зарегистрирован: 26.09.2011

AlexFisher пишет:

Можно так (все равно сообщения нужно где-то пачкой хранить):

    char mes[]={161, 112, 97, 227, 121, 99, 111, 179, '\0'};
    lcd.print(mes); //Температура

Вот так работает...спасибо огромное

Цитата:

Или так:

    lcd.print('\161\112\97\227\121\99\111\179\0'); //Температура

А так не захотело работать...ну и ладно, главное, что по первому варианту заработало...премного благодарен

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

vworld пишет:

Цитата:

Или так:

    lcd.print('\161\112\97\227\121\99\111\179\0'); //Температура

А так не захотело работать...ну и ладно, главное, что по первому варианту заработало...премного благодарен

Наверо так не работает, потому что в этом случае данные находятся в программной области, а не в памяти переменных. Если параметр в функцию передается "ByRef", то есть по ссылке, то обязательно должен лежать в переменной, а если "ByVal" - по значению, то должно быть без разницы. Нужно смотреть определение функции.

vworld
vworld аватар
Offline
Зарегистрирован: 26.09.2011

to AlexFisher - да ладно давай замнем...ведь работает по первому варианту - я доволен вполне..

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Да это понятно, просто описание "граблей" должно быть по возможности подробным, чтобы другие могли их вовремя узнать в лицо и не наступать :)

vworld
vworld аватар
Offline
Зарегистрирован: 26.09.2011

Я бы лучше порекомендовал бы в некий FAQ или тому подобное включить твою софтинку - lcdHd44780.exe

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Это не моя софтина, я ее где-то накопал на Казусе, кажется, но софтина полезная, конечно.

dronsoft
Offline
Зарегистрирован: 02.06.2011

Нашел код у меня заработал с датчиком ds1820. Теперь охота сделать фунционал на определенную температуру

#include <LiquidCrystalRus.h>
#include <OneWire.h>
#include <OneWireTempSensor.h>

LiquidCrystalRus lcd(12, 11, 5, 4, 3, 2);
OneWireTempSensor sensors(8); 
int numdevs;
int value;
int temp;
byte newChar[8] = {
  B11000,
  B11000,
  B00110,
  B01001,
  B01000,
  B01001,
  B00110,
  B00000
};

void setup() 
{
  lcd.createChar(0, newChar); 
  lcd.begin(16, 2);  
  numdevs = sensors.getDevices(); 
}

void loop() {
  value = (int) sensors.getTempC(0);
if (value != 85)
{
    if (value < 10)
    {
      temp = value/10;
    }
    else
    {
      temp = value;
    }
}
lcd.setCursor(0,0);
lcd.print("Tемпература=");
lcd.setCursor(12,0);
lcd.print(temp);
lcd.setCursor(14,0);
lcd.write(0);
}
Andrew.vodny
Andrew.vodny аватар
Offline
Зарегистрирован: 02.02.2018

не нашел на форуме, как изменить формат вывода показаний с датчика. Хочу убрать 100е и 10е 

 

bwn
Offline
Зарегистрирован: 25.08.2014

lcd.print(temp,0);