Arduino Yun, sto sperimentando un po di sensori sulla stessa basetta e tutto funzionava magnificamente finche’ non ho aggiunto l’ultimo BMP280 (Gravity), quest’ultimo funziona e mi restituisce i valori di pressione, altitudine e temp. ma subito dopo il suo avvio si blocca il DHT22, che smette di mandate i dati.
Il BMP280 è un I2C il DHT22 no. Non capisco l’interferenza
Non c’è un flusso continuo di dati, in pratica attivo delle chiamate via ssh (da terminale remoto o cell) sullo YUN che è in rete ovviamente, il ciclo void-loop attende e verifica i comandi che io mando e poi partono delle chiamate ai vari sensori, led, rele.
Premetto che singolarmente con i relativi sketch, i sensori, funzionano entrambi, quindi si esclude problema hardware e forse anche problema di connessione.
Posto anche il codice, quello decommentato è la parte relativa al BMP280.
//#include <Wire.h>
//#include "DFRobot_BMP280.h"
#include <Ultrasonic.h>
#include <Console.h>
#include "DHT.h"
#define DHTPIN 2 // what pin we're connected to DHT
#define DHTTYPE DHT22 // DHT 22 (AM2302)
// Definizione dei pin
int ledverde = 10;
int ledgiallo = 11;
int ledrosso = 12;
int buzzerPin = 9;
int rele1 = 7;
int rele2 = 8;
//DFRobot_BMP280 bmp; // Initialize BMP280 sensors
DHT dht(DHTPIN, DHTTYPE); // Initialize DHT sensor for normal 16mhz Arduino
Ultrasonic ultrasonic(5, 6); //(trig, echo)
String name;
void setup() {
// Initialize Console and wait for port to open:
//bmp.begin();
dht.begin();
Bridge.begin();
Console.begin();
// Wait for Console port to connect
while (!Console);
pinMode(ledrosso, OUTPUT);
pinMode(ledgiallo, OUTPUT);
pinMode(ledverde, OUTPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(rele1, OUTPUT);
pinMode(rele2, OUTPUT);
digitalWrite(rele1, HIGH);
digitalWrite(rele2, HIGH);
Console.println("Console operativa...");
meteo();
//meteo2();
statoled();
statorele();
}
void meteo(){
// Wait a few seconds between measurements.
dht.begin();
delay(500);
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius
float t = dht.readTemperature();
// Read temperature as Fahrenheit
float f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Console.println("Failed to read from DHT sensor!");
return;
}
// Compute heat index
// Must send in temp in Fahrenheit!
float hi = dht.computeHeatIndex(f, h);
//Console.println("\n");
Console.println("╔╦╗╔═╗╔╦╗╔═╗╔═╗");
Console.println("║║║║╣ ║ ║╣ ║ ║");
Console.println("╩ ╩╚═╝ ╩ ╚═╝╚═╝");
Console.println("--------------------");
Console.print("Humidity: ");
Console.print(h);
Console.println(" %");
Console.print("Temperature DHT: ");
Console.print(t);
Console.println(" *C ");
Console.print("Heat index: ");
Console.print(hi);
Console.println(" *F");
Console.print("Distance in cm: ");
Console.println(ultrasonic.distanceRead());
Console.println("--------------------");
}
/*void meteo2(){
bmp.begin();
delay(500);
Console.println("╔╦╗╔═╗╔╦╗╔═╗╔═╗");
Console.println("║║║║╣ ║ ║╣ ║ ║");
Console.println("╩ ╩╚═╝ ╩ ╚═╝╚═╝");
Console.println("--------------------");
Console.print("Temperature: ");
Console.print(bmp.readTemperatureValue());
Console.println(" Pressure: ");
Console.print(bmp.readPressureValue());
Console.println(" Altitude:");
Console.println(bmp.readAltitudeValue());
}
*/
void statoled(){ //funzione che stampa lo stato dei led: accesi
// o spenti
Console.println("╔═╗╔╦╗╔═╗╔╦╗╔═╗ ╦ ╔═╗╔╦╗");
Console.println("╚═╗ ║ ╠═╣ ║ ║ ║ ║ ║╣ ║║");
Console.println("╚═╝ ╩ ╩ ╩ ╩ ╚═╝ ╩═╝╚═╝═╩╝");
Console.println("---------------");
Console.print("LED Verde - ");
Console.println(digitalRead(10));
Console.print("LED Giallo - ");
Console.println(digitalRead(11));
Console.print("LED Rosso - ");
Console.println(digitalRead(12));
Console.println("---------------");
}
void statorele(){ //funzione che stampa lo stato dei led: accesi
// o spenti
Console.println("╔═╗╔╦╗╔═╗╔╦╗╔═╗ ╦═╗╔═╗╦ ╔═╗");
Console.println("╚═╗ ║ ╠═╣ ║ ║ ║ ╠╦╝║╣ ║ ║╣ ");
Console.println("╚═╝ ╩ ╩ ╩ ╩ ╚═╝ ╩╚═╚═╝╩═╝╚═╝");
if (digitalRead(7) == 0) {Console.println("Rele1 - 1");} else { Console.println("Rele 1 - 0");}
if (digitalRead(8) == 0) {Console.println("Rele2 - 1");} else { Console.println("Rele 2 - 0");}
Console.println("---------------");
Console.println("Attendo istruzioni...");
}
void suono_on(){ //suono accensione LED
tone(buzzerPin, 5000, 100);
delay(300);
noTone(buzzerPin);
}
void suono_off(){ //suono spegnimento LED
tone(buzzerPin, 100, 100);
delay(300);
noTone(buzzerPin);
}
void suono_err(){ //suono messaggio errore
tone(buzzerPin, 50, 400);
delay(500);
noTone(buzzerPin);
}
void suono_stato(){ //suono statoLEDl
tone(buzzerPin, 70000, 100);
delay(150);
tone(buzzerPin, 70000, 100);
delay(150);
noTone(buzzerPin);
}
void loop() {
if (Console.available() > 0) {
char c = Console.read(); // read the next char received
// look for the newline character, this is the last character in the string
if (c == '\n') {
//print text with the name received
Console.print(name);
Console.print("\n");
bool check_name = false;
if (name == "ledrossoon") digitalWrite(ledrosso,HIGH), check_name = true, suono_on();
if (name == "ledverdeon") digitalWrite(ledverde,HIGH), check_name = true,suono_on() ;
if (name == "ledgialloon") digitalWrite(ledgiallo,HIGH), check_name = true,suono_on();
if (name == "rele1on") digitalWrite(rele1,LOW), check_name = true,suono_on();
if (name == "rele2on") digitalWrite(rele2,LOW), check_name = true,suono_on();
if (name == "ledrossooff") digitalWrite(ledrosso,LOW), check_name = true,suono_off();
if (name == "ledverdeoff") digitalWrite(ledverde,LOW), check_name = true,suono_off();
if (name == "ledgiallooff") digitalWrite(ledgiallo,LOW), check_name = true,suono_off();
if (name == "rele1off") digitalWrite(rele1,HIGH), check_name = true,suono_off();
if (name == "rele2off") digitalWrite(rele2,HIGH), check_name = true,suono_off();
if (name == "statoled") statoled(), check_name = true, suono_stato();
if (name == "statorele") statorele(), check_name = true, suono_stato();
if (name == "stato") statoled(),statorele(), check_name = true, suono_stato();
if (name == "spegnitutto") digitalWrite(ledrosso,LOW), digitalWrite(ledverde,LOW),
digitalWrite(ledgiallo,LOW),digitalWrite(rele1,HIGH), digitalWrite(rele2,HIGH), check_name = true,suono_off();
if (name == "meteo") meteo(), check_name = true, suono_stato();
// if (name == "meteo2") meteo2(), check_name = true, suono_stato();
if (check_name == 0) Console.println("Error !"), suono_err(); //controllo errore nel comando
name = ""; // clear the name string
} else { // if the buffer is empty Cosole.read() returns -1
name += c; // append the read char from Console to the name string
}
} else {
delay(100);
}
}