Usporný provoz čidel vs. I2C
Napsal: 31 led 2018, 09:34
Ahoj,
mohl by mi prosím někdo poradit - mám problém s kodem pro usporné napájení čidel.
Jde mi o to že chci pomocí přerušení napájení snížit spotřebu čidel komunikujíccíh pres I2C. Princip není nic nového - digitálním pinem chci spínat tranzistor - tranzistorem chci spinat konvertor 5V -> 3,3V který napají čidlo (BME280).
Problém je že pokud použiju čidlo (s příslušným kodem) DS18B20 tak mi to funguje presne jak chci. Pokud tam dam BME280 nebo jakekoliv které komunikuje pres I2C tak to přestane fungovat. Tipuju tedy na problem v programu... Jednoduchou metodou jsem se dopracoval k tomu že pokud zakomentuju
if (!bme.begin(BME280_ADRESA)) {
Serial.println("BME280 senzor nenalezen, zkontrolujte zapojeni!");
while (1);
}
tak mi to začne fungovat - teda funguje mi spínání digitálního pinu (poznám podle LEDky na konvertoru napětí).
Můžete mi někdo poradit co s tím?
Díky
Celý kod je tady:
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define BME280_ADRESA (0x76)
Adafruit_BME280 bme;
int vystup = 12;
void setup() {
pinMode(vystup, OUTPUT);
Serial.begin(9600);
if (!bme.begin(BME280_ADRESA)) {
Serial.println("BME280 senzor nenalezen, zkontrolujte zapojeni!");
while (1);
}
}
void loop() {
digitalWrite(vystup, HIGH);
Serial.print("Teplota: ");
Serial.print(bme.readTemperature());
Serial.println(" stupnu Celsia.");
Serial.print("Relativni vlhkost: ");
Serial.println(" %");
Serial.print("Tlak: ");
Serial.print(bme.readPressure() / 100.0F);
Serial.println(" hPa.");
Serial.println();
delay(2000);
digitalWrite(vystup, LOW);
delay(10000);
}
mohl by mi prosím někdo poradit - mám problém s kodem pro usporné napájení čidel.
Jde mi o to že chci pomocí přerušení napájení snížit spotřebu čidel komunikujíccíh pres I2C. Princip není nic nového - digitálním pinem chci spínat tranzistor - tranzistorem chci spinat konvertor 5V -> 3,3V který napají čidlo (BME280).
Problém je že pokud použiju čidlo (s příslušným kodem) DS18B20 tak mi to funguje presne jak chci. Pokud tam dam BME280 nebo jakekoliv které komunikuje pres I2C tak to přestane fungovat. Tipuju tedy na problem v programu... Jednoduchou metodou jsem se dopracoval k tomu že pokud zakomentuju
if (!bme.begin(BME280_ADRESA)) {
Serial.println("BME280 senzor nenalezen, zkontrolujte zapojeni!");
while (1);
}
tak mi to začne fungovat - teda funguje mi spínání digitálního pinu (poznám podle LEDky na konvertoru napětí).
Můžete mi někdo poradit co s tím?
Díky
Celý kod je tady:
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define BME280_ADRESA (0x76)
Adafruit_BME280 bme;
int vystup = 12;
void setup() {
pinMode(vystup, OUTPUT);
Serial.begin(9600);
if (!bme.begin(BME280_ADRESA)) {
Serial.println("BME280 senzor nenalezen, zkontrolujte zapojeni!");
while (1);
}
}
void loop() {
digitalWrite(vystup, HIGH);
Serial.print("Teplota: ");
Serial.print(bme.readTemperature());
Serial.println(" stupnu Celsia.");
Serial.print("Relativni vlhkost: ");
Serial.println(" %");
Serial.print("Tlak: ");
Serial.print(bme.readPressure() / 100.0F);
Serial.println(" hPa.");
Serial.println();
delay(2000);
digitalWrite(vystup, LOW);
delay(10000);
}