Több ds18b20-at szeretnék használni néha-néha felváltva, de nem akarom mindíg újraírni a kódot.
Próbáltam megoldani, de sajnos nem sikerül.
Mi benne a hiba?
Kód: Egész kijelölése
#include <LiquidCrystal.h>
#include <OneWire.h>
#include <DallasTemperature.h>
int KEP [] = {0 , 0 , 0 , 0 ,0 , 0 , 0 , 0 ,0 ,0 } ; // a kiiarndo hofokok tombje
int KEP1 [] = {0 , 0 , 0 , 0 ,0 , 0 , 0 , 0, 0 } ; // a csatlakoztatott eszkozok tombje
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal lcd(10, 9, 4, 5, 6, 7); // képernyő beállítás, lábak kiválasztása
// OneWire címek hozzárendelése.
DeviceAddress Egy = { 0x28, 0x9C, 0xD5, 0xD0, 0x04, 0x00, 0x00, 0xC1};
DeviceAddress Ketto = { 0x28, 0xF4, 0x04, 0xD0, 0x04, 0x00, 0x00, 0x30 };
DeviceAddress Harom = {0x28, 0xCC, 0x9B, 0xD0, 0x04, 0x00, 0x00, 0xA4 } ;
DeviceAddress Negy = { 0x28, 0xCA, 0x91, 0xD0, 0x04, 0x00, 0x00, 0xAB };
DeviceAddress Ot = { 0x28, 0xCD, 0x3F, 0xD0, 0x04, 0x00, 0x00, 0xBF};
DeviceAddress Hat = { 0x28, 0x53, 0x0D, 0xD0, 0x04, 0x00, 0x00, 0x1A};
DeviceAddress Het = { 0x28, 0xEE, 0x4A, 0xD0, 0x04, 0x00, 0x00, 0xEF };
DeviceAddress Nyolc = { 0x28, 0x6D, 0x4F, 0xD0, 0x04, 0x00, 0x00, 0x8E};
DeviceAddress Kilenc = { 0x28, 0x67, 0x3E, 0xD0, 0x04, 0x00, 0x00, 0xE1};
DeviceAddress Tiz = { 0x28, 0x9C, 0xE4, 0xD0, 0x04, 0x00, 0x00, 0x88};
void setup() {
Serial.begin(9600); // a soros (USB) porton kiküldött adatok
lcd.begin(16, 2); // lcd beállítása 2 soros 16 karaktereshez
sensors.begin(); // sensorok inicializálása
KEP1[0]= sensors.setResolution(Egy , 10); // ha 0-at ad vissza nincs eszköz, ha 1-et van eszköz
KEP1[1]= sensors.setResolution(Ketto , 10);
KEP1[2]= sensors.setResolution(Harom , 10);
KEP1[3]= sensors.setResolution(Negy , 10);
KEP1[4]= sensors.setResolution(Ot , 10);
KEP1[5]= sensors.setResolution(Hat , 10);
KEP1[6]= sensors.setResolution(Het , 10);
KEP1[7]= sensors.setResolution(Nyolc , 10);
KEP1[8]= sensors.setResolution(Kilenc , 10);
KEP1[9]= sensors.setResolution(Tiz , 10);
}
void kiiras () {
lcd.clear();
lcd.setCursor(0,0);
lcd. print(KEP[1]);
lcd.setCursor(3,0);
lcd. print(KEP[2]);
lcd.setCursor(7,0);
lcd. print(KEP[3]);
lcd.setCursor(10,0);
lcd. print(KEP[4]);
lcd.setCursor(13,0);
lcd. print(KEP[5]);
lcd.setCursor(0,1);
lcd. print(KEP[6]);
lcd.setCursor(3,1);
lcd. print(KEP[7]);
lcd.setCursor(7,1);
lcd. print(KEP[8]);
lcd.setCursor(10,1);
lcd. print(KEP[9]);
lcd.setCursor(13,1);
lcd. print(KEP[10]);
}
void loop (){
sensors.requestTemperatures();
KEP[0]=DS_olvasas(Egy,0);
KEP[1]=DS_olvasas(Ketto,1) ;
KEP[2] =DS_olvasas(Harom,2);
KEP[3]= DS_olvasas(Negy,3) ;
KEP[4]= DS_olvasas(Ot,4);
KEP[5]=DS_olvasas(Hat,5);
KEP[6]=DS_olvasas(Het,6);
KEP[7]=DS_olvasas(Nyolc,7) ;
KEP[8]=DS_olvasas(Kilenc,8);
KEP[9]=DS_olvasas(Tiz,9);
kiiras();
}
float DS_olvasas (DeviceAddress cim, int tilt) { //tilt: az eszköz sorszáma
float hofok = 0;
if (KEP1[tilt]==1) { //csak a létező eszközöket [code]olvassuk be
delay(1000);
float meres = sensors.getTempC(cim);
hofok=meres;
return hofok;}
}
