Подключение двух датчиков температуры с выводом на олед дисплей

NVV
Offline
Зарегистрирован: 03.01.2017
Arduino: 1.6.14 Hourly Build 2016/11/25 05:33 (Windows 10), Плата:"Arduino/Genuino Uno"

C:\Users\victo\AppData\Local\Temp\arduino_modified_sketch_148886\sketch_jan13a.ino: In function 'void loop()':

C:\Users\victo\AppData\Local\Temp\arduino_modified_sketch_148886\sketch_jan13a.ino:35:42: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

     myOLED.print("NTVGTHFNEHF", CENTER, 0);           // Выводим надпись "Русский язык"

                                          ^

C:\Users\victo\AppData\Local\Temp\arduino_modified_sketch_148886\sketch_jan13a.ino:36:35: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

     myOLED.print("EKBWF", LEFT, 10);           // Выводим надпись "Русский язык"

                                   ^

sketch_jan13a:38: error: expression cannot be used as a function

     myOLED.print(String(temp1/16()),RIGHT, 10); // Выводим текущее значение температуры датчика, округленное до десятых

                                  ^

C:\Users\victo\AppData\Local\Temp\arduino_modified_sketch_148886\sketch_jan13a.ino:41:33: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

     myOLED.print("LJV", LEFT, 40);           // Выводим надпись "Русский язык"

                                 ^

sketch_jan13a:43: error: expression cannot be used as a function

     myOLED.print(String(temp2/16()),RIGHT, 40); // Выводим текущее значение температуры датчика, округленное до десятых

                                  ^

Несколько библиотек найдено для "OLED_I2C.h"
 Используется: C:\Users\victo\OneDrive\Документы\Arduino\libraries\OLED_I2C
Не используется: C:\Users\victo\Desktop\arduino-nightly\libraries\OLED_I2C
exit status 1
expression cannot be used as a function

Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"

 

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

myOLED.print(String(temp1/16()),RIGHT, 10)

Посмотрите в примерах к библиотеке, как правильно выводить значения переменных, String мне кажется там лишним, скорее будет что то вроде: myOLED.print(temp1/16.0) или myOLED.print(temp1/16.0 ,RIGHT, 10). Здесь только догадки.

NVV
Offline
Зарегистрирован: 03.01.2017

День добрый ща попробую.А так вы были правы.

NVV
Offline
Зарегистрирован: 03.01.2017

Попробовал не прокатывает там же ошибка.

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

Сбросьте полный скетч, при котором все надписи читались и ошибок не выдавалось. В том который сейчас, мы что то упустили.

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

Вот в таком виде компилируется?

// Видеообзоры и уроки работы с ARDUINO на YouTube-канале IOMOIO: <a href="https://www.youtube.com/channel/UCmNXABaTjX_iKH28TTJpiqA" title="https://www.youtube.com/channel/UCmNXABaTjX_iKH28TTJpiqA" rel="nofollow">https://www.youtube.com/channel/UCmNXABaTjX_iKH28TTJpiqA</a>

//#include <OneWire.h>                  // Подключаем библиотеку для взаимодействия с устройствами, работающими на шине и по протоколу 1-Wire
//#include <DallasTemperature.h>        // Подключаем библиотеку с функциями для работы с DS18B20 (запросы, считывание и преобразование возвращаемых данных)

#include <OLED_I2C.h>                 // Подключаем библиотеку OLED_I2C для работы со шрифтами и графикой
OLED  myOLED(A4, A5, A4);             // Определяем пины I2C интерфейса: UNO и NANO -- SDA - пин A4, SCL - пин A5; MEGA -- SDA - пин 20, SCL - пин 21
extern uint8_t RusFont[];                           // Подключаем русский шрифт
extern uint8_t SmallFont[];                         // Подключаем латинский шрифтом


//#define ONE_WIRE_BUS 2                // Указываем пин подключения data-вывода датчика температуры
//#define term_power 4                  // Указываем пин подключения питания датчика температуры

//OneWire oneWire(ONE_WIRE_BUS);        // Сообщаем библиотеке об устройстве, работающем по протоколу 1-Wire
//DallasTemperature sensors(&oneWire);  // Связываем функции библиотеки DallasTemperature с нашим 1-Wire устройством (DS18B20)

extern uint8_t BigNumbers[];          // Подключаем шрифт

void setup(void)
{
  myOLED.begin();                     // Инициализируем библиотеку OLED_I2C
 // pinMode(term_power, OUTPUT);        // Определяем пин подключения питания датчика температуры
}


//float temperature() {                            // Измеряем температуру 10 секунд
  //digitalWrite(term_power, HIGH);                // Включаем питание датчика температуры
  //delay(200);                                    // Задержка перед первым измерением 
  //sensors.requestTemperatures();                 // Запрос на измерение температуры (1-й ошибочный)
  //delay(650);                                    // Задержка перед поторным измерением
  //sensors.requestTemperatures();                 // Запрос на измерение температуры (повторный)
  //float t = float(sensors.getTempCByIndex(0));   // Получаем значение температуры
  //digitalWrite(term_power, LOW);                 // Отключаем питание датчика температуры
  //delay(1400);                                   // Задержка, чтобы датчик не нагревался от частых измерений
  //return(t);                                     // Возвращаем значение температуры в место вызова функци
}
void loop(void)
{
    myOLED.clrScr();                                // Стираем все с экрана
    myOLED.setFont(RusFont);                            // Инициализируем русский шрифт
    myOLED.print("EKBWF", LEFT, 0);           // Выводим надпись "Русский язык"
    //myOLED.setFont(BigNumbers);                     // Инициализируем шрифт
    //myOLED.print(String(temperature()),RIGHT, 0); // Выводим текущее значение температуры датчика, округленное до десятых
    myOLED.setFont(RusFont);                            // Инициализируем русский шрифт
    myOLED.print("LJV", LEFT, 40);           // Выводим надпись "Русский язык"
    //myOLED.setFont(BigNumbers);                     // Инициализируем шрифт
    //myOLED.print(String(temperature()),RIGHT, 40); // Выводим текущее значение температуры датчика, округленное до десятых
    myOLED.update();                                // Обновляем информацию на дисплее
} 

Это код из третьего поста, насколько понимаю, там все работало кроме вывода правильной температуры.

И сбрось скетчи примеров из библиотеки (все), попробую понять.

NVV
Offline
Зарегистрирован: 03.01.2017

Все верно только вот // этого в том коде не было.Щас приеду и сразу скину .А на этом коде температуура считывалась с одного из двух датчиков и выводило на значение Улица и Дом температуру с одного датчика.А ваш скеч я поубирал // и вывелись надписи температура Улица и Дом только без показателей.Так как когда с этих строчек убирал // то ошибка......?

NVV
Offline
Зарегистрирован: 03.01.2017

Вы уж меня извените что я вас достаю....

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

NVV пишет:
Все верно только вот // этого в том коде не было.
    А ваш скеч я поубирал // и вывелись надписи температура Улица и Дом только без показателей.Так как когда с этих строчек убирал // то ошибка......?

// -  знак комментария, данная строка не обрабатывается компилятором. Оставил только вывод буквенной информации на дисплей. Осталось научиться выводить переменные.
По второму абзацу, подробнее и понятнее, с "этих" мне ничего не говорит. В коде есть номера строк, ссылайтесь на них.

NVV
Offline
Зарегистрирован: 03.01.2017

44 и 48 строки // убрать то ошибка

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

NVV пишет:
44 и 48 строки // убрать то ошибка

Если про код из 106 поста, то она и должна быть, т.к. функция к которой мы обращаемся тоже отсутствует.
Жду примеры из библиотеки, смысл на кофейной гуще гадать?

NVV
Offline
Зарегистрирован: 03.01.2017

пример из библеотеки Олед любой?

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

NVV пишет:

пример из библеотеки Олед любой?

Если не сможете определить, где работа с переменными, то скидывайте все.

NVV
Offline
Зарегистрирован: 03.01.2017

ну вот два примера цифры счет

NVV
Offline
Зарегистрирован: 03.01.2017
// OLED_I2C_NumberFonts
// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved
// web: http://www.RinkyDinkElectronics.com/
//
// A quick demo of how to use my OLED_I2C library.
//
// To use the hardware I2C (TWI) interface of the Arduino you must connect
// the pins as follows:
//
// Arduino Uno/2009:
// ----------------------
// Display:  SDA pin   -> Arduino Analog 4 or the dedicated SDA pin
//           SCL pin   -> Arduino Analog 5 or the dedicated SCL pin
//
// Arduino Leonardo:
// ----------------------
// Display:  SDA pin   -> Arduino Digital 2 or the dedicated SDA pin
//           SCL pin   -> Arduino Digital 3 or the dedicated SCL pin
//
// Arduino Mega:
// ----------------------
// Display:  SDA pin   -> Arduino Digital 20 (SDA) or the dedicated SDA pin
//           SCL pin   -> Arduino Digital 21 (SCL) or the dedicated SCL pin
//
// Arduino Due:
// ----------------------
// Display:  SDA pin   -> Arduino Digital 20 (SDA) or the dedicated SDA1 (Digital 70) pin
//           SCL pin   -> Arduino Digital 21 (SCL) or the dedicated SCL1 (Digital 71) pin
//
// The internal pull-up resistors will be activated when using the 
// hardware I2C interfaces.
//
// You can connect the OLED display to any available pin but if you use 
// any other than what is described above the library will fall back to
// a software-based, TWI-like protocol which will require exclusive access 
// to the pins used, and you will also have to use appropriate, external
// pull-up resistors on the data and clock signals.
//

#include <OLED_I2C.h>

OLED  myOLED(SDA, SCL, 8);

extern uint8_t SmallFont[];
extern uint8_t MediumNumbers[];
extern uint8_t BigNumbers[];

void setup()
{
  myOLED.begin();
  myOLED.setFont(SmallFont);
}

void loop()
{
  for (int i=0; i<=10000; i++)
  {
    myOLED.setFont(MediumNumbers);
    myOLED.printNumF(float(i)/3, 2, RIGHT, 0);
    myOLED.setFont(BigNumbers);
    myOLED.printNumI(i, RIGHT, 40);
    myOLED.update();
  }
  
  myOLED.setFont(SmallFont);
  myOLED.print("|", LEFT, 24);
  myOLED.print("|", RIGHT, 24);
  myOLED.update();
  delay(500);
  for (int i=0; i<19; i++)
  {
    myOLED.print("\\", 7+(i*6), 24);
    myOLED.update();
    delay(250);
  }
  myOLED.clrScr();
}

 

NVV
Offline
Зарегистрирован: 03.01.2017

и бегущая строка олед

NVV
Offline
Зарегистрирован: 03.01.2017
// OLED_I2C_Scrolling_Text
// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved
// web: http://www.RinkyDinkElectronics.com/
//
// A quick demo of how to use my OLED_I2C library.
//
// To use the hardware I2C (TWI) interface of the Arduino you must connect
// the pins as follows:
//
// Arduino Uno/2009:
// ----------------------
// Display:  SDA pin   -> Arduino Analog 4 or the dedicated SDA pin
//           SCL pin   -> Arduino Analog 5 or the dedicated SCL pin
//
// Arduino Leonardo:
// ----------------------
// Display:  SDA pin   -> Arduino Digital 2 or the dedicated SDA pin
//           SCL pin   -> Arduino Digital 3 or the dedicated SCL pin
//
// Arduino Mega:
// ----------------------
// Display:  SDA pin   -> Arduino Digital 20 (SDA) or the dedicated SDA pin
//           SCL pin   -> Arduino Digital 21 (SCL) or the dedicated SCL pin
//
// Arduino Due:
// ----------------------
// Display:  SDA pin   -> Arduino Digital 20 (SDA) or the dedicated SDA1 (Digital 70) pin
//           SCL pin   -> Arduino Digital 21 (SCL) or the dedicated SCL1 (Digital 71) pin
//
// The internal pull-up resistors will be activated when using the 
// hardware I2C interfaces.
//
// You can connect the OLED display to any available pin but if you use 
// any other than what is described above the library will fall back to
// a software-based, TWI-like protocol which will require exclusive access 
// to the pins used, and you will also have to use appropriate, external
// pull-up resistors on the data and clock signals.
//

#include <OLED_I2C.h>

OLED  myOLED(SDA, SCL, 8);

extern uint8_t SmallFont[];

void setup()
{
  myOLED.begin();
  myOLED.setFont(SmallFont);
  randomSeed(analogRead(0));
}

void loop()
{
  int y = random(0, 56);
  for (int i=128; i>=-(34*6); i--)
  {
    myOLED.print("OLED_I2C Scrolling Text Demo ", i, y);
    myOLED.update();
    delay(50);
  }
}

 

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

myOLED.printNumF(float (i) /3, 2, RIGHT, 0);

Теоретически у вас должно быть типа: myOLED.printNumF(float (temp1) /16.0, 2, RIGHT, 0);
Два крайних значения в скобках место вывода информации, 2 - третья справа скорее всего число знаков после запятой.
Попробуйте теперь заменить строки со стрингами на такой формат.
 

NVV
Offline
Зарегистрирован: 03.01.2017
 Serial.println(temp1/16.0);
    myOLED.clrScr();                                // Стираем все с экрана
    myOLED.setFont(RusFont);                            // Инициализируем русский шрифт
    myOLED.print("NTVGTHFNEHF", CENTER, 0);           // Выводим надпись "Русский язык"
    myOLED.print("EKBWF", LEFT, 10);           // Выводим надпись "Русский язык"
    myOLED.setFont(BigNumbers);                     // Инициализируем шрифт
    myOLED.printNumF(float (temp1) /16.0, 2, RIGHT, 10); // Выводим текущее значение температуры датчика, округленное до десятых
    Serial.println(temp2/16.0);
    myOLED.setFont(RusFont);                            // Инициализируем русский шрифт
    myOLED.print("LJV", LEFT, 40);           // Выводим надпись "Русский язык"
    myOLED.setFont(BigNumbers);                     // Инициализируем шрифт
    myOLED.printNumF(float (temp2) /16.0, 2, RIGHT, 40);    // Выводим текущее значение температуры датчика, округленное до десятых
    myOLED.update();                                // Обновляем информацию на дисплее

 

NVV
Offline
Зарегистрирован: 03.01.2017

Сделал так теперь вторая скобка выделяется снизу

NVV
Offline
Зарегистрирован: 03.01.2017

Убрал скобку и теперь все работает две температуры

NVV
Offline
Зарегистрирован: 03.01.2017

просто писец какой то у меня просто нет слов как я вам благодарен

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

Вот и победили.))))

NVV
Offline
Зарегистрирован: 03.01.2017
#include <OneWire.h>
#include <OLED_I2C.h>
OLED  myOLED(A4, A5, A4);             // Определяем пины I2C интерфейса: UNO и NANO -- SDA - пин A4, SCL - пин A5; MEGA -- SDA - пин 20, SCL - пин 21
extern uint8_t RusFont[];                           // Подключаем русский шрифт
extern uint8_t SmallFont[];                         // Подключаем латинский шрифтом
extern uint8_t RusFont[];                           // Подключаем русский шрифт
extern uint8_t SmallFont[];                         // Подключаем латинский шрифтом  
OneWire  ds(2);
byte addr1[8]={0x28,0xFF,0x5C,0xB6,0x84,0x16,0x04,0xBF};
byte addr2[8]={0x28,0xFF,0x15,0x32,0x44,0x16,0x03,0xA2};

volatile int temp1,temp2;
extern uint8_t BigNumbers[];          // Подключаем шрифт

void setup(void)
{
myOLED.begin();
    Serial.begin(9600);
WDTCSR=(1<<WDCE)|(1<<WDE); //установить биты WDCE WDE (что б разрешить запись в другие биты
WDTCSR=(1<<WDIE)| (1<<WDP2)|(1<<WDP1); // разрешение прерывания + выдержка 1 секунда
// (55 страница <a href="<a href="<a href="http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf" rel="nofollow">http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf</a>" rel="nofollow"><a href="http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf" rel="nofollow">http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf</a></a>" rel="nofollow">даташита</a>)
// снять все ремарки если нужно поменять разрешение
  ds.reset(); // сброс шины
  ds.select(addr2); //выставить адрес
  ds.write(0x4E); // разрешение записать конфиг
  ds.write(0x7F); // Th контроль температуры макс 128грд
  ds.write(0xFF); //Tl контроль температуры мин -128грд
  ds.write(0x60); // 0x60 12-бит разрешение, 0x00 -9бит разрешение
}

void loop(void)
{
    Serial.println(temp1/16.0);
    myOLED.clrScr();                                // Стираем все с экрана
    myOLED.setFont(RusFont);                            // Инициализируем русский шрифт
    myOLED.print("NTVGTHFNEHF", CENTER, 0);           // Выводим надпись "Русский язык"
    myOLED.print("EKBWF", LEFT, 10);           // Выводим надпись "Русский язык"
    myOLED.setFont(BigNumbers);                     // Инициализируем шрифт
    myOLED.printNumF(float (temp1) /16.0, 2, RIGHT, 10); // Выводим текущее значение температуры датчика, округленное до десятых
    Serial.println(temp2/16.0);
    myOLED.setFont(RusFont);                            // Инициализируем русский шрифт
    myOLED.print("LJV", LEFT, 40);           // Выводим надпись "Русский язык"
    myOLED.setFont(BigNumbers);                     // Инициализируем шрифт
    myOLED.printNumF(float (temp2) /16.0, 2, RIGHT, 40);    // Выводим текущее значение температуры датчика, округленное до десятых
    myOLED.update();                                // Обновляем информацию на дисплее
} 

 
ISR (WDT_vect){ //вектор прерывания WD
static boolean n=0; // флаг работы: запрос температуры или её чтение
n=!n;
if (n) {ds.reset();  // сброс шины
        ds.write(0xCC);//обращение ко всем датчикам
        ds.write(0x44);// начать преобразование (без паразитного питания)  
       }
else   {ds.reset();
        ds.select(addr1);    
        ds.write(0xBE); // Read Scratchpad (чтение регистров)  
        temp1 =  ds.read() | (ds.read()<<8); //прочитаны 2 байта       
        // получение с 2-го датчика
        ds.reset();
        ds.select(addr2);    
        ds.write(0xBE); // Read Scratchpad (чтение регистров)  
        temp2 =  ds.read() | (ds.read()<<8); //прочитаны 2 байта  
       }
}
 
 
  
 

 

NVV
Offline
Зарегистрирован: 03.01.2017

В 124 посте рабочий скетч может вам пригодиться

NVV
Offline
Зарегистрирован: 03.01.2017

Блин еще раз извените меня может благодаря вам чему нибудь научусь

NVV
Offline
Зарегистрирован: 03.01.2017

Это в дом а второй комплект когда придет буду в машину делать с добавлением блютуз

NVV
Offline
Зарегистрирован: 03.01.2017

Вот ссылка на столик которы делал все сам из дерева посмотрите оцените работа подсветки по блютуз

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

NVV пишет:

В 124 посте рабочий скетч может вам пригодиться

Тщательно прочитайте раздел "Программирование", поизгаляйтесь над своей библиотекой, заставьте температуру бегать по экрану, мигать и что в голову придет. Попробуйте ознакомившись с функциями переделать это на миллис, в той теме есть пример функции, научится можно только так.

NVV
Offline
Зарегистрирован: 03.01.2017

Только текст с телефона принемает только английский и теперь там еще температура и влажность пробегает

NVV
Offline
Зарегистрирован: 03.01.2017

Хорошо почитаю еще раз спасибо.

NVV
Offline
Зарегистрирован: 03.01.2017
NVV
Offline
Зарегистрирован: 03.01.2017

вот она посмотрите и оцените пожалуйста

NVV
Offline
Зарегистрирован: 03.01.2017

Ну как вам?

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

Симпатично, какая то пленка полупрозрачная на столешнице?

NVV
Offline
Зарегистрирован: 03.01.2017

нет столешка двойная и в нутри столещки установлен дисплей и вся подсветка

NVV
Offline
Зарегистрирован: 03.01.2017

А вот как выглядит то что вы сделали

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

NVV пишет:

нет столешка двойная и в нутри столещки установлен дисплей и вся подсветка

Так не понял, как именно верх сделан, когда выключено фактура чисто деревянная.

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

NVV пишет:

А вот как выглядит то что вы сделали

Сотые градуса наверно лишние, попробуйте изменить до десятых или целых.

NVV
Offline
Зарегистрирован: 03.01.2017

да ни чего не видно чисто дерево,столик сам весь сборка и фрезировка морилка и лакировка вся моя ну зимой в домашних условиях все же есть косяки))))в обработке

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

NVV пишет:

да ни чего не видно чисто дерево,столик сам весь сборка и фрезировка морилка и лакировка вся моя ну зимой в домашних условиях все же есть косяки))))в обработке

Так и не пойму, как через дерево светит. Или какой то тонкий шпон?

NVV
Offline
Зарегистрирован: 03.01.2017

в тех местах где установлен дисплей дерево выбрано фрезером до толщины где то 3-4 мм так же чисто для посветки и для точек высверлены дырочки вставлены светодиодвы

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

Круто, не думал, что такой слой пробить можно.

NVV
Offline
Зарегистрирован: 03.01.2017

яркость стоит на дисплее 10  из 15 извиняюсь где дисплей может и 2мм так как его было плохо видно.а щас норм да и вроде не очень хрупко в том месте самое главное не бить тяжолым.тоесть аккуратно))))

NVV
Offline
Зарегистрирован: 03.01.2017

как мне фото сюда кинуть?

NVV
Offline
Зарегистрирован: 03.01.2017

че то не получается добавить

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

пробую закинуть но грузиться................................жду

NVV
Offline
Зарегистрирован: 03.01.2017

не загружается проходит время а потом опять предлогает выбрать файл