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. Библиотеки все Адафрутовские. Как и следовало ожидать, всё прекрасно работает вместе.
адуино нано, в мониторе всё нормально , работает как и должно, экран не реагирует(неужели не понятен смысл слов, т.е. вообще ничего нет на нём). В скетче убирал всё что относится к датчику, типа инициализации и алгоритма рассчёта.
проблема вот в этом
if (count >= varC) { fl = true; count = 0; noTone(p); }есть идеи почему?
Конечно есть. На 3 пин дисплей подключен, а Вы на него Tone/noTone!
Спасибо, большое. Совсем забыл что р это 3 пин, просто отключил его давно чтобы не шумел пока экран настраиваю, а в коде не иенял ничего.