Arduino Uno i2c vs ds18b20
- Войдите на сайт для отправки комментариев
Сб, 08/07/2017 - 19:02
При попытке считать температуру с ds18b20 отправить данные по i2c не получается.
Датчик не читается, данные не отправляются.
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
String inString;
char inChar;
#define ONE_WIRE_BUS 9
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress Thermometer1 = {0x28, 0x13, 0x98, 0xD7, 0x02, 0x00, 0x00, 0x5D };
DeviceAddress Thermometer2 = {0x28, 0xFF, 0x57, 0xA3, 0x81, 0x16, 0x03, 0xC0 };
void setup() {
Wire.begin(8);
Wire.onReceive(receiveEvent);//Вызывается когда есть данные от мастера
Wire.onRequest(requestEvent);//Вызывается когда есть запрос от мастера
delay(1000);
sensors.begin();
sensors.setResolution(Thermometer1, 10);
sensors.setResolution(Thermometer2, 10);
Serial.begin(9600);
}
void printTemperature(DeviceAddress deviceAddress) {
float tempC = sensors.getTempC(deviceAddress);
Serial.println(tempC);
}
void loop() {
}
void receiveEvent() {
while (Wire.available() ){
inChar = Wire.read();
inString += inChar;
}
}
void requestEvent() {
if (inChar == '#') {
if (inString=="da1#") {
Serial.println("Sensor1");
//sensors.requestTemperatures();
//printTemperature(Thermometer1);
Wire.write("Privet");
}
inString="";
inChar="";
}
}
//sensors.requestTemperatures(); //printTemperature(Thermometer1);
Если раскоментировать эти две строки, то не работает ни Serial.println("Sensor1"); ниWire.write("Privet");
Как я понимаю, причина скорее всего в задержках, работах таймеров.
Стабильно работает вот так, но я не уверен что это правильное решение, подскажите, объсните пожалуйста.
#include <Wire.h> #include <OneWire.h> #include <DallasTemperature.h> String inString; char inChar; String tempC; int qwe = 0; #define ONE_WIRE_BUS 2 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); DeviceAddress Thermometer1 = {0x28, 0x13, 0x98, 0xD7, 0x02, 0x00, 0x00, 0x5D }; DeviceAddress Thermometer2 = {0x28, 0xFF, 0x57, 0xA3, 0x81, 0x16, 0x03, 0xC0 }; void setup() { Wire.begin(8); Wire.onReceive(receiveEvent);//Вызывается когда есть данные от мастера Wire.onRequest(requestEvent);//Вызывается когда есть запрос от мастера sensors.begin(); sensors.setResolution(Thermometer1, 10); sensors.setResolution(Thermometer2, 10); Serial.begin(9600); } void loop() { if (qwe==1){ qwe=0; sensors.requestTemperatures(); tempC = String(sensors.getTempC(Thermometer1)); }else if (qwe==2){ qwe=0; sensors.requestTemperatures(); tempC = String(sensors.getTempC(Thermometer2)); } } void receiveEvent() { while (Wire.available() ){ inChar = Wire.read(); inString += inChar; } } void requestEvent() { if (inChar == '#') { if (inString=="da1#") { qwe=1; Serial.println("Sensor1"); Wire.write(tempC.c_str()); } else if (inString=="da2#") { qwe=2; Serial.println("Sensor2"); Wire.write(tempC.c_str()); }else{ Serial.println("Error"); //char*text="error"; //String data="123456"; //Potentiometer = analogRead(0); //String data = String(Potentiometer, DEC); //Wire.write(data.c_str()); Wire.write("Err"); } inString=""; inChar=""; } }