SPI + l2c
- Войдите на сайт для отправки комментариев
Втр, 27/06/2017 - 01:44
Здравствуйте, имеется bmp280 и экранчик 5110, bmp280 подключён через l2c, а экран по SPI. По отдельности работают, а если совместить, то экранчик никак не реагирует.
скетч
#include <Wire.h> #include <SPI.h> #include <Adafruit_Sensor.h> #include <Adafruit_BMP280.h> float alt[51]; float tim[51]; float Altitude; int samples = 40; int maxsamples = 50; int p = 3; int dur = 150; int dur2 = dur * 2; int count; float varC; float varioDebug; #include <Adafruit_GFX.h> #include <Adafruit_PCD8544.h> int valN = 0; Adafruit_PCD8544 display = Adafruit_PCD8544(5, 4, 3); #define BMP_SCK 13 #define BMP_MISO 12 #define BMP_MOSI 11 #define BMP_CS 10 boolean fl = true; Adafruit_BMP280 bme; // I2C void setup() { Serial.begin(9600); Serial.println(F("BMP280 test")); if (!bme.begin()) { Serial.println(F("Could not find a valid BMP280 sensor, check wiring!")); while (1); } display.begin(); display.setContrast(50); } void loop() { float tempo = millis(); float vario = 0; float N1 = 0; float N2 = 0; float N3 = 0; float D1 = 0; float D2 = 0; Altitude = bme.readAltitude(1022.65); for (int cc = 1; cc <= maxsamples; cc++) { // усреднитель alt[(cc - 1)] = alt[cc]; tim[(cc - 1)] = tim[cc]; } alt[maxsamples] = Altitude; tim[maxsamples] = tempo; float stime = tim[maxsamples - samples]; for (int cc = (maxsamples - samples); cc < maxsamples; cc++) { N1 += (tim[cc] - stime) * alt[cc]; N2 += (tim[cc] - stime); N3 += (alt[cc]); D1 += (tim[cc] - stime) * (tim[cc] - stime); D2 += (tim[cc] - stime); } vario = 1000 * ((samples * N1) - N2 * N3) / (samples * D1 - D2 * D2); vario = constrain(vario,-10,10); varioDebug = map(analogRead(2), 0, 1023, -25, 25); varioDebug = varioDebug * 0.1; Serial.println ("$"); Serial.println (vario, 1); Serial.println (";"); varC = 20 - vario *2; if (count >= varC) { fl = true; count = 0; noTone(p); } if ((vario > 0.5) && (vario < 10) && fl ) { tone(p,(800 + vario * 10),dur2 - vario * 50); //delay(dur2 - vario * 15); //noTone(p); fl = false; } else if (vario < -2) { tone(p, 200, 200); } display.clearDisplay(); // display.drawLine(0, 20, 10, 20, BLACK); // display.drawLine(42, 20, 15, val, BLACK); display.setTextSize(2); display.setTextColor(BLACK); display.setCursor(0,0); display.println("25"); display.display(); delay(25); count++; }
Судя по коду, он и не должен реагировать.
Странный какой-то I2C в 26-29 строках получается.((((
это просто мусор, раньше на spi было
спасибо, очень понятно. Может скажите в чём дело раз судя по коду ничего и не должно работать?
спасибо, очень понятно. Может скажите в чём дело раз судя по коду ничего и не должно работать?
Описывайте ситуацию точнее. Ну что значит дисплей не реагирует? На нём вообще ничего не отображается? Тогда проверяйте схему подключения, сравнивайте Ваш скетч с тем, что раньше работало, проверьте пример из библиотеки дисплейной. Если же не выводится измеряемая величина, то конкретно в приведённом скетче нет ни единой строчки которая бы это делала.
всё написано уже, никакой реакции, убираю из скетча датчик и экран начинает работать.
всё написано уже, никакой реакции, убираю из скетча датчик и экран начинает работать.
Вам то понятно, мы то не понимаем как вы "убираете из скетча датчик"? Что комментируете в коде?
Чтобы было больше ответов предлагаю:
1. Отформатировать текст, в Arduino IDE это сочетание клавиш Ctrl+T
2. Убрать из кода неиспользуемое, я тоже повелся сначала на BMP_SCK 13 и прочее..
А пока меня смутило вот что:
Хотелось бы видеть сообщения компилятора. Мало того что у вас куча библиотек, так еще и такие массивы float.
К стати плата то какая? MEGA еще пойдет а на 328 чипе NANO UNO и иже с ними уже думаю не поятнут ваш скутч.
Да я бы и всю эту "усреднительную" арифметику для начала выкинул! Чтобы весь скетч состоял только из измерения и его вывода на экран. Но нам же уже всё описали - гадайте! Ни какая ардуина используется, ни схемы подключения. Есть на экране эти его "25" или нет. Есть что-нибудь в выводе в сериал или нет. В конце концов окажется, что отвалилась какая-нибудь сопля... И кстати, если автор темы в монитор порта не заглядывал, то возможно программа просто висит в цикле, не найдя датчика - вот и "никакой реакции"!
p.s. Не поленился и проверил совместную работу экранчика 5110 на аппаратном SPI и датчика BME280 (BMP280 у меня нет) на I2C c Arduino UNO. Библиотеки все Адафрутовские. Как и следовало ожидать, всё прекрасно работает вместе.
адуино нано, в мониторе всё нормально , работает как и должно, экран не реагирует(неужели не понятен смысл слов, т.е. вообще ничего нет на нём). В скетче убирал всё что относится к датчику, типа инициализации и алгоритма рассчёта.
проблема вот в этом
есть идеи почему?
Конечно есть. На 3 пин дисплей подключен, а Вы на него Tone/noTone!
Спасибо, большое. Совсем забыл что р это 3 пин, просто отключил его давно чтобы не шумел пока экран настраиваю, а в коде не иенял ничего.