milion81 pisze: ↑czw kwie 11, 2019 11:26 am
Witam, chce zrobić odczyt z 10 DSów, każdy na osobnym pinie bo na jednym są zakłamania (opóźnienia) w odczycie, czy można prosić o gotowy kod
Przetestuj to:: Masz 10DS na 10 GPIO, Ściemniacz RGB i kilka przekaźników. Oczywiście na Arduino Mega.
Kod: Zaznacz cały
#include <SPI.h>
#include <Ethernet.h>
#include <SuplaDevice.h>
#include <OneWire.h>
#include <DallasTemperature.h> // Biblioteki
#define ONE_WIRE_1 32 // Definicje pinów wejscia jako 32, 41 ...
#define ONE_WIRE_2 33
#define ONE_WIRE_3 34
#define ONE_WIRE_4 35
#define ONE_WIRE_5 36
#define ONE_WIRE_6 37
#define ONE_WIRE_7 38
#define ONE_WIRE_8 39
#define ONE_WIRE_9 40
#define ONE_WIRE_10 41
OneWire oneWire_temp1(ONE_WIRE_1);
OneWire oneWire_temp2(ONE_WIRE_2);
OneWire oneWire_temp3(ONE_WIRE_3);
OneWire oneWire_temp4(ONE_WIRE_4);
OneWire oneWire_temp5(ONE_WIRE_5);
OneWire oneWire_temp6(ONE_WIRE_6);
OneWire oneWire_temp7(ONE_WIRE_7);
OneWire oneWire_temp8(ONE_WIRE_8);
OneWire oneWire_temp9(ONE_WIRE_9);
OneWire oneWire_temp10(ONE_WIRE_10);
DallasTemperature temp1(&oneWire_temp1);
DallasTemperature temp2(&oneWire_temp2);
DallasTemperature temp3(&oneWire_temp3);
DallasTemperature temp4(&oneWire_temp4);
DallasTemperature temp5(&oneWire_temp5);
DallasTemperature temp6(&oneWire_temp6);
DallasTemperature temp7(&oneWire_temp7);
DallasTemperature temp8(&oneWire_temp8);
DallasTemperature temp9(&oneWire_temp9);
DallasTemperature temp10(&oneWire_temp10);
#define RED_PIN 44
#define GREEN_PIN 45
#define BLUE_PIN 46
#define BRIGHTNESS_PIN 7
#define COLOR_BRIGHTNESS_PIN 8
unsigned char _red = 0;
unsigned char _green = 255;
unsigned char _blue = 0;
unsigned char _color_brightness = 0;
unsigned char _brightness = 0;
void get_rgbw_value(int channelNumber, unsigned char *red, unsigned char *green, unsigned char *blue, unsigned char *color_brightness, unsigned char *brightness) {
*brightness = _brightness;
*color_brightness= _color_brightness;
*red = _red;
*green = _green;
*blue = _blue;
}
void set_rgbw() {
analogWrite(BRIGHTNESS_PIN, (_brightness * 255) / 100);
analogWrite(COLOR_BRIGHTNESS_PIN, (_color_brightness * 255) / 100);
analogWrite(RED_PIN, _red);
analogWrite(GREEN_PIN, _green);
analogWrite(BLUE_PIN, _blue);
}
void set_rgbw_value(int channelNumber, unsigned char red, unsigned char green, unsigned char blue, unsigned char color_brightness, unsigned char brightness) {
_brightness = brightness;
_color_brightness= color_brightness;
_red = red;
_green = green;
_blue = blue;
set_rgbw();
}
// DS18B20 Sensor read implementation
double get_temperature(int channelNumber, double last_val) {
double t = -275;
switch(channelNumber)
{
case 1:
temp1.requestTemperatures();
t = temp1.getTempCByIndex(0);
Serial.println(t);
break;
case 2:
temp2.requestTemperatures();
t = temp2.getTempCByIndex(0);
Serial.println(t);
break;
case 3:
temp3.requestTemperatures();
t = temp3.getTempCByIndex(0);
Serial.println(t);
break;
case 4:
temp4.requestTemperatures();
t = temp4.getTempCByIndex(0);
Serial.println(t);
break;
case 5:
temp5.requestTemperatures();
t = temp5.getTempCByIndex(0);
Serial.println(t);
break;
case 6:
temp6.requestTemperatures();
t = temp6.getTempCByIndex(0);
Serial.println(t);
break;
case 7:
temp7.requestTemperatures();
t = temp7.getTempCByIndex(0);
Serial.println(t);
break;
case 8:
temp8.requestTemperatures();
t = temp8.getTempCByIndex(0);
Serial.println(t);
break;
case 9:
temp9.requestTemperatures();
t = temp9.getTempCByIndex(0);
Serial.println(t);
break;
case 10:
temp10.requestTemperatures();
t = temp10.getTempCByIndex(0);
Serial.println(t);
break;
}
return t;
}
void setup() {
Serial.begin(9600);
set_rgbw();
// Set RGBW callbacks
SuplaDevice.setRGBWCallbacks(&get_rgbw_value, &set_rgbw_value);
// Inicjalizacja DS18B20
temp1.begin();
temp2.begin();
temp3.begin();
temp4.begin();
temp5.begin();
temp6.begin();
temp7.begin();
temp8.begin();
temp9.begin();
temp10.begin();
SuplaDevice.setTemperatureCallback(&get_temperature);
// Podmień poniższy GUID
char GUID[SUPLA_GUID_SIZE] = {........................................................................................};
// z tym, który odczytasz pod adresem https://www.supla.org/arduino/get-guid
// Adres MAC
uint8_t mac[6] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05};
/*
* Jeżeli urządzenie było już wcześniej zarejestrowane na cloud.supla.org,
* a chcesz zniemić kolejność lub ilość kanałów,
* to musisz wcześniej usunąć to urządzenie z cloud.supla.org.
* W innym przypadku otrzymasz błąd konfliktu kanałów "Channel conflict!".
*/
//KANAŁ0 - Kontroler RGB i ściemniacz (RGBW)
SuplaDevice.addRgbControllerAndDimmer();
// CHANNEL1,...10 DS
SuplaDevice.addDS18B20Thermometer();
SuplaDevice.addDS18B20Thermometer();
SuplaDevice.addDS18B20Thermometer();
SuplaDevice.addDS18B20Thermometer();
SuplaDevice.addDS18B20Thermometer();
SuplaDevice.addDS18B20Thermometer();
SuplaDevice.addDS18B20Thermometer();
SuplaDevice.addDS18B20Thermometer();
SuplaDevice.addDS18B20Thermometer();
SuplaDevice.addDS18B20Thermometer();
// CHANNEL11...18 - RELAY
SuplaDevice.addRelay(22, true); // Pompa grzejniki
SuplaDevice.addRelay(23, true); // Pompa podłogówka
SuplaDevice.addRelay(24, true); // Pompa CWU
SuplaDevice.addRelay(25, true); //
SuplaDevice.addRelay(26, true); //
SuplaDevice.addRelay(27, true); //
SuplaDevice.addRelay(28, true); //
SuplaDevice.addRelay(29, true); //
/*
* SuplaDevice - inicjalizacja.
* Adres serwera, identyfikator lokalizacji i hasło lokalizacji odczytasz z https://cloud.supla.org
* Jeżeli nie masz jeszcze konta możesz je założyć pod adresem https://cloud.supla.org/account/create
* SUPLA i SUPLA CLOUD są bezpłatne
*
*/
SuplaDevice.begin(GUID, // Globalny unikalny identyfikator urządzenia
mac, // Adres MAC
"192.168.1.46", // Adres serwera SUPLA
1, // Identyfikator lokalizacji
"xxxx"); // Hasło lokalizacji
}
void loop() {
SuplaDevice.iterate();
}