из двух один (ежа с ужом)

a-d@okbnp.ru
Offline
Зарегистрирован: 13.03.2019

 

a-d@okbnp.ru
Offline
Зарегистрирован: 13.03.2019

 

a-d@okbnp.ru
Offline
Зарегистрирован: 13.03.2019

Все собрано на Ардуине уно. Скетч с BME  выводит в монитор порта нормально. Скетч с датчиком углекилого газа с kSeries K_30 выводит на экран Олед тоже нормально. Не могу с BME вывести на ОЛЕД вместе с kSeries K_30.  Помогите кому не трудно.

kalapanga
Offline
Зарегистрирован: 23.10.2016

Ну если I2C адреса у BME и у дисплея не одинаковые с какого-нибудь перепугу, то чего бы им вместе и не работать? Адреса проверить можно скетчем "i2c scanner" (гуглится). Если адреса разные, то рассказывайте как всё подключили, показывайте скетч и описывайте - как оно не работает.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Так, а Ваш-то объединённый ёжуж где? Чего не показываете?

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

ЕвгенийП пишет:

Так, а Ваш-то объединённый ёжуж где? 

Убеполз, на псевдоподиях.))))

a-d@okbnp.ru
Offline
Зарегистрирован: 13.03.2019
Адреса разные
I2C scanner. Scanning ...
Found address: 60 (0x3C)
Found address: 118 (0x76)
Done.
Found 2 device(s).
Какой  лучше скетч взять за основу?
Пока опасаюсь здесь выкладывать результаты моей селекции, из, извиняюсь, попы, торчат иголки с грибами и сухими листьями
KindMan
Offline
Зарегистрирован: 19.12.2018

a-d@okbnp.ru пишет:

Пока опасаюсь здесь выкладывать результаты моей селекции, из, извиняюсь, попы, торчат иголки с грибами и сухими листьями


Глаза боятся, а руки делают. Пока вы не выложите попытки, помощи не дождетесь.
Я предпологаю ошибки в инициализации wire. Второй раз, библиотекой.

a-d@okbnp.ru
Offline
Зарегистрирован: 13.03.2019

 

a-d@okbnp.ru
Offline
Зарегистрирован: 13.03.2019

В таком виде загружается,  на олед выводится только  Co2 ppm =  без данных датчика со2. В мониторе порта данные с датчика BME280 выводится.

Не знаю какие данные вывести myOLED.print ( ??????)

Слишком много print  в скетче с датчиком BME280 )))

kalapanga
Offline
Зарегистрирован: 23.10.2016

Функция printBME... лишняя. Из неё строку 67 в начало перед сетап. 69-70 в сетап, например в case где датчик успешно обнаружен. 72 чтение датчика ставите рядом с чтением со2 например после строки 50. На дисплей выводите temp, hum, pres перед строкой 56. Строку 58-59 выкинуть. Если на время отладки нужен вывод данных bme в сериал, вставите Serial.print там же где будете выводить соответствующие данные на дисплей.

Главное, что данные на дисплей всяко должны выводиться между clrscr и update.

a-d@okbnp.ru
Offline
Зарегистрирован: 13.03.2019

Огромное спасибо!

Только памяти теперь не хватает.

Скетч использует 16752 байт (51%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 1786 байт (87%) динамической памяти, оставляя 262 байт для локальных переменных. Максимум: 2048 байт.
Недостаточно памяти, программа может работать нестабильно.
avrdude: ser_open(): can't set com-state for "\\.\COM4"
Произошла ошибка при загрузке скетча
 
Может что-то кастрировать можно?
a-d@okbnp.ru
Offline
Зарегистрирован: 13.03.2019
andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

a-d@okbnp.ru пишет:

Может что-то кастрировать можно?

Может, и можно.

Например, уменьшить количество подключаемых библиотек.

Либо заменить библиотеки на менее ресурсоемкие. Например, использовать библиотеку экрана, не требующую буфера.

a-d@okbnp.ru
Offline
Зарегистрирован: 13.03.2019

Сорри, что-то с портом стало, ребенок макетку уронил, другие скетчи тоже не грузятся

a-d@okbnp.ru
Offline
Зарегистрирован: 13.03.2019

Опыты продолжаютя ,на зверушку уже можно смотреть без слез.

Порт заработал , скетч грузится. но на олед выводитя только текст Co2 ppm = ,Pa, % RH

Вместо данных с датчика какой-то мусор

расположение LEFT, 1 - менял на другие значения без результата.

  Serial.print ниже строчкой выводит  данные с датчиков на монитор порта без проблем

a-d@okbnp.ru
Offline
Зарегистрирован: 13.03.2019

 

a-d@okbnp.ru
Offline
Зарегистрирован: 13.03.2019
KindMan
Offline
Зарегистрирован: 19.12.2018

Т.е. у вас не работают строки, которые вы выводите таким образом -
? myOLED.print(String (temp),RIGHT, 30);

a-d@okbnp.ru
Offline
Зарегистрирован: 13.03.2019

да, а следом 

Serial.print(temp) - выводит без проблем в монитор порта

a-d@okbnp.ru
Offline
Зарегистрирован: 13.03.2019
 myOLED.print(String(co2),LEFT,1);   в исходящем скетче выводила на олед- сейчас нет
 Serial.print(co2) - сейчас выводит в монитор порта
KindMan
Offline
Зарегистрирован: 19.12.2018

А попробуйте вывести цифры используя printNumF

a-d@okbnp.ru
Offline
Зарегистрирован: 13.03.2019

myOLED.printNumI(6,CENTER,32);  выводит на олед цифру 6 в центр экрана

printNumF тоже

 
KindMan
Offline
Зарегистрирован: 19.12.2018

a-d@okbnp.ru пишет:

myOLED.printNumI(6,CENTER,32);  выводит на олед цифру 6 в центр экрана

printNumF тоже

 

надо у ДедаСемена попросить картинку "чотаржу"

Я имел ввиду, попробуйте выводить показания с датчиков этой функцией.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

держы

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Вот это 

a-d@okbnp.ru пишет:

myOLED.printNumI(6,CENTER,32);  выводит на олед цифру 6 в центр экрана

printNumF тоже

 

Ни на что не наводит? 

a-d@okbnp.ru
Offline
Зарегистрирован: 13.03.2019

Написали попробуй цифры, я и подумал что сейчас на экране цифр  не было,  только буквы и символы.

вечером отпишусь с переменными.

a-d@okbnp.ru
Offline
Зарегистрирован: 13.03.2019

myOLED.printNumF(String(co2),2,0,1); //print value

String не нравится этой функции, как я понял

 

K30_example_good5:66: error: no matching function for call to 'OLED::printNumF(String, int, int, int)'
 
  myOLED.printNumF(String(co2),2,0,1); //print value
 
                                    ^
 
In file included from C:\Program Files (x86)\Arduino\Arduino\K30_example_good5\K30_example_good5.ino:10:0:
 
C:\Program Files (x86)\Arduino\Arduino\libraries\OLED_I2C/OLED_I2C.h:116:8: note: candidate: void OLED::printNumF(double, byte, int, int, char, int, char)
 
   void printNumF(double num, byte dec, int x, int y, char divider='.', int length=0, char filler=' ');
 
        ^
 
C:\Program Files (x86)\Arduino\Arduino\libraries\OLED_I2C/OLED_I2C.h:116:8: note:   no known conversion for argument 1 from 'String' to 'double'
 
exit status 1
no matching function for call to 'OLED::printNumF(String, int, int, int)'
 
KindMan
Offline
Зарегистрирован: 19.12.2018

Простите, вам нужно азы хотя бы подтянуть, что такое строки, числа… просто наугад вставлять куски кода, совсем не понимая как это работает, это не правильно.
printNumF(num, dec, x, y[, divider[, length[, filler]]]);
Распечатать число с плавающей точкой в указанных координатах в буфере экрана.
Можно использовать как литералы LEFT, CENTER и RIGHT, так и числовые координаты, чтобы выровнять строку с числом на экране.
Внимание: Числа с плавающей точкой имеют погрешность при округлении и могут давать неверные результаты при сравнении. Используйте на свой страх и риск.
Параметры:
num: Число для вывода на экран
Dec: количество цифр после запятой (в дробной части) (допустимые значения 1-5). Число 0 не поддерживается, для этого используйте printNumI ()
x: координата верхнего левого угла первой цифры/знака по горизонтали
y: координата верхнего левого угла первой цифры/знака по вертикали
divider: <необязательный параметр> Одиночный символ для использования в качестве десятичной точки. По умолчанию '.'
length: <необязательный параметр> минимальное количество цифр / символов (включая знак) для отображения на экране
filler: <необязательный параметр> Символ для заполнения, чтобы получить минимальную длину.Символ будет вставлен перед номером, но после знака. Умолчанию '' " (пробел).
Пример: myOLED.printNumF(num, 3, CENTER,0); // Печать значения переменной "num" с 3-мя знаками после запятой по центру в верхней части (в буфере экрана)
Примечания: Поддерживаемые диапазон зависит от количества цифр в дробной части.
Диапазон приблизительный +/- 2 * (10 в степени 9) - для десятичной системы.