из двух один (ежа с ужом)
- Войдите на сайт для отправки комментариев
Чт, 14/03/2019 - 15:52
/* BME280 I2C Test.ino This code shows how to record data from the BME280 environmental sensor using I2C interface. This file is an example file, part of the Arduino BME280 library. GNU General Public License Written: Dec 30 2015. Last Updated: Oct 07 2017. Connecting the BME280 Sensor: Sensor -> Board ----------------------------- Vin (Voltage In) -> 3.3V Gnd (Ground) -> Gnd SDA (Serial Data) -> A4 on Uno/Pro-Mini, 20 on Mega2560/Due, 2 Leonardo/Pro-Micro SCK (Serial Clock) -> A5 on Uno/Pro-Mini, 21 on Mega2560/Due, 3 Leonardo/Pro-Micro */ #include <BME280I2C.h> #include <Wire.h> #define SERIAL_BAUD 115200 BME280I2C bme; // Default : forced mode, standby time = 1000 ms // Oversampling = pressure ×1, temperature ×1, humidity ×1, filter off, ////////////////////////////////////////////////////////////////// void setup() { Serial.begin(SERIAL_BAUD); while(!Serial) {} // Wait Wire.begin(); while(!bme.begin()) { Serial.println("Could not find BME280 sensor!"); delay(1000); } // bme.chipID(); // Deprecated. See chipModel(). switch(bme.chipModel()) { case BME280::ChipModel_BME280: Serial.println("Found BME280 sensor! Success."); break; case BME280::ChipModel_BMP280: Serial.println("Found BMP280 sensor! No Humidity available."); break; default: Serial.println("Found UNKNOWN sensor! Error!"); } } ////////////////////////////////////////////////////////////////// void loop() { printBME280Data(&Serial); delay(500); } ////////////////////////////////////////////////////////////////// void printBME280Data ( Stream* client ) { float temp(NAN), hum(NAN), pres(NAN); BME280::TempUnit tempUnit(BME280::TempUnit_Celsius); BME280::PresUnit presUnit(BME280::PresUnit_Pa); bme.read(pres, temp, hum, tempUnit, presUnit); client->print("T: "); client->print(temp); client->print("°"+ String(tempUnit == BME280::TempUnit_Celsius ? 'C' :'F')); client->print("\t\tH: "); client->print(hum); client->print("% RH"); client->print("\t\tP "); client->print(pres); client->println(" Pa"); delay(1000); }
Все собрано на Ардуине уно. Скетч с BME выводит в монитор порта нормально. Скетч с датчиком углекилого газа с kSeries K_30 выводит на экран Олед тоже нормально. Не могу с BME вывести на ОЛЕД вместе с kSeries K_30. Помогите кому не трудно.
Ну если I2C адреса у BME и у дисплея не одинаковые с какого-нибудь перепугу, то чего бы им вместе и не работать? Адреса проверить можно скетчем "i2c scanner" (гуглится). Если адреса разные, то рассказывайте как всё подключили, показывайте скетч и описывайте - как оно не работает.
Так, а Ваш-то объединённый ёжуж где? Чего не показываете?
Так, а Ваш-то объединённый ёжуж где?
Убеполз, на псевдоподиях.))))
Глаза боятся, а руки делают. Пока вы не выложите попытки, помощи не дождетесь.
Я предпологаю ошибки в инициализации wire. Второй раз, библиотекой.
В таком виде загружается, на олед выводится только Co2 ppm = без данных датчика со2. В мониторе порта данные с датчика BME280 выводится.
Не знаю какие данные вывести myOLED.print ( ??????)
Слишком много print в скетче с датчиком BME280 )))
Функция printBME... лишняя. Из неё строку 67 в начало перед сетап. 69-70 в сетап, например в case где датчик успешно обнаружен. 72 чтение датчика ставите рядом с чтением со2 например после строки 50. На дисплей выводите temp, hum, pres перед строкой 56. Строку 58-59 выкинуть. Если на время отладки нужен вывод данных bme в сериал, вставите Serial.print там же где будете выводить соответствующие данные на дисплей.
Главное, что данные на дисплей всяко должны выводиться между clrscr и update.
Огромное спасибо!
Только памяти теперь не хватает.
Может что-то кастрировать можно?
Например, уменьшить количество подключаемых библиотек.
Либо заменить библиотеки на менее ресурсоемкие. Например, использовать библиотеку экрана, не требующую буфера.
Сорри, что-то с портом стало, ребенок макетку уронил, другие скетчи тоже не грузятся
Опыты продолжаютя ,на зверушку уже можно смотреть без слез.
Порт заработал , скетч грузится. но на олед выводитя только текст
Co2 ppm = ,
Pa,
% RH
Вместо данных с датчика какой-то мусор
расположение LEFT, 1 - менял на другие значения без результата.
Serial
.print ниже строчкой выводит данные с датчиков на монитор порта без проблем
Т.е. у вас не работают строки, которые вы выводите таким образом -
? myOLED.print(String (temp),RIGHT, 30);
да, а следом
Serial.print(temp) - выводит без проблем в монитор порта
А попробуйте вывести цифры используя printNumF
myOLED.printNumI(6,CENTER,32); выводит на олед цифру 6 в центр экрана
printNumF тоже
myOLED.printNumI(6,CENTER,32); выводит на олед цифру 6 в центр экрана
printNumF тоже
надо у ДедаСемена попросить картинку "чотаржу"
Я имел ввиду, попробуйте выводить показания с датчиков этой функцией.
держы
Вот это
myOLED.printNumI(6,CENTER,32); выводит на олед цифру 6 в центр экрана
printNumF тоже
Ни на что не наводит?
Написали попробуй цифры, я и подумал что сейчас на экране цифр не было, только буквы и символы.
вечером отпишусь с переменными.
myOLED.printNumF(String(co2),2,0,1); //print value
String не нравится этой функции, как я понял
Простите, вам нужно азы хотя бы подтянуть, что такое строки, числа… просто наугад вставлять куски кода, совсем не понимая как это работает, это не правильно.
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) - для десятичной системы.