Restart Aplikacji po dodaniu czujników ds18b20
-
- Posty: 114
- Rejestracja: pn cze 18, 2018 5:38 pm
Witam mam taki problem, dodałem do mojego programu czujniki temp. ds18b20 aplikacja po chwili zalogowania widzi je, chwię działa reaguje na wszystkie przyciski, lecz po chwili następuje restart i cała procedura łączenia trwa na nowo, przy okazji mam jeszcze pytanie jak zrobić (jaki kanał stworzyć do czujnika zamknięcia bramy garażowej)
Wrzuć kod
-
- Posty: 114
- Rejestracja: pn cze 18, 2018 5:38 pm
Kod: Zaznacz cały
#include <SPI.h>
#include <Ethernet.h>
#include <SuplaDevice.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define BTN_COUNT 20
OneWire oneWire(41);
DallasTemperature sensors(&oneWire);
DeviceAddress DS18B20_1 = { 0x28, 0xAA, 0x28, 0xB, 0x12, 0x13, 0x2, 0xDF }; // termometr szafa sterownicza
DeviceAddress DS18B20_2 = { 0x28, 0xAA, 0x52, 0x8, 0x12, 0x13, 0x2, 0x87 }; // termometr garaż
DeviceAddress DS18B20_3 = { 0x28, 0xF9, 0x4B, 0x55, 0x1A, 0x13, 0x1, 0xFD }; // termometr front
DeviceAddress DS18B20_4 = { 0x28, 0xFF, 0x99, 0x4B, 0x60, 0x17, 0x4, 0x3E }; // termometr
DeviceAddress DS18B20_5 = { 0x28, 0xFF, 0x82, 0x52, 0x60, 0x17, 0x4, 0x99 }; // termometr
DeviceAddress DS18B20_6 = { 0x28, 0xFF, 0x76, 0x52, 0x60, 0x17, 0x4, 0x20 }; // termometr
// DS18B20 Sensor read implementation
double get_temperature(int channelNumber, double last_val) {
double t = -275;
if ( sensors.getDeviceCount() > 0 )
{
sensors.requestTemperatures();
switch(channelNumber)
{
case 0:
t = sensors.getTempC(DS18B20_1);
break;
case 1:
t = sensors.getTempC(DS18B20_2);
break;
case 2:
t = sensors.getTempC(DS18B20_3);
break;
case 3:
t = sensors.getTempC(DS18B20_4);
break;
case 4:
t = sensors.getTempC(DS18B20_5);
break;
case 5:
t = sensors.getTempC(DS18B20_6);
break;
};
};
return t;
}
typedef struct {
int pin;
int relay_pin;
int channel;
char last_val;
unsigned long last_time;
} _btn_t;
_btn_t btn[BTN_COUNT];
void supla_timer() {
char v;
unsigned long now = millis();
for(int a=0;a<BTN_COUNT;a++)
if (btn[a].pin > 0) {
v = digitalRead(btn[a].pin);
if (v != btn[a].last_val && now - btn[a].last_time ) {
btn[a].last_val = v;
btn[a].last_time = now;
if (v==0)
{
if ( digitalRead(btn[a].relay_pin) > 0 ) {
SuplaDevice.relayOff(btn[a].channel);
} else {
SuplaDevice.relayOn(btn[a].channel, 0);
}
}
}
}
}
void supla_btn_init() {
for(int a=0;a<BTN_COUNT;a++)
if (btn[a].pin > 0) {
pinMode(btn[a].pin, INPUT_PULLUP);
btn[a].last_val = digitalRead(btn[a].pin);
btn[a].last_time = millis();
}
}
void setup() {
Serial.begin(9600);
// Init DS18B20 library
sensors.begin();
// Set temperature callback
SuplaDevice.setTemperatureCallback(&get_temperature);
// Replace the falowing GUID
char GUID[SUPLA_GUID_SIZE] = {GUID};
// with GUID that you can retrieve from https://www.supla.org/arduino/get-guid
// Ethernet MAC address
uint8_t mac[6] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05};
SuplaDevice.addDS18B20Thermometer(); // kanał 0 termometr szafa sterownicza
SuplaDevice.addDS18B20Thermometer(); // kanał 1 termometr garaż
SuplaDevice.addDS18B20Thermometer(); // kanał 2 termometr front
SuplaDevice.addDS18B20Thermometer(); // kanał 3 termometr
SuplaDevice.addDS18B20Thermometer(); // kanał 4 termometr
SuplaDevice.addDS18B20Thermometer(); // kanał 5 termometr
SuplaDevice.addRollerShutterRelays(0, 1, true); // kanal 6 testowy
SuplaDevice.addRelay(2); // kanal 7 lampa front k12
SuplaDevice.addRelay(3); // kanal 8 lampa taras k11
SuplaDevice.addRelay(4); // kanal 9 lampa kotłownia k14
SuplaDevice.addRelay(5); // kanal 10 kinkiety salon k15
SuplaDevice.addRelay(6); // kanal 11 lampa piwnica k16
SuplaDevice.addRelay(7,true); // kanal 12 lampa płot k01
SuplaDevice.addRelay(8); // kanal 13 kuchnia Led k17
SuplaDevice.addRelay(21); // kanal 14 salon led k21
SuplaDevice.addRelay(11,true); // kanal 15 girlanda k02
SuplaDevice.addRelay(12); // kanal 16 brama wjazd otworz kdc11
SuplaDevice.addRelay(13); // kanal 17 brama wjazd zamknij kdc12
SuplaDevice.addRelay(14); // kanal 18 akwarium k22
SuplaDevice.addRelay(15); // kanal 19 brama wjazd 2 otworz
SuplaDevice.addRelay(16); // kanal 20 brama wjazd 2 zamknij kdc14
SuplaDevice.addRelay(17); // kanal 21 gniazdo salon 1 (lampa)
SuplaDevice.addRelay(18); // kanal 22 gniazdo salon 2 (choinka ) k24
SuplaDevice.addRelay(42); // kanal 23 taras led k25
SuplaDevice.addRelay(28); // kanal 24 brama garaz kdc22
SuplaDevice.addRelay(39); // kanal 25 furtka kdc21
SuplaDevice.addRelay(40,true); // kanal 26 lampy zewnetrzne k03
SuplaDevice.begin(GUID, // Global Unique Identifier
mac, // Ethernet MAC address
"svr10.supla.org", // SUPLA server address
----, // Location ID
"----"); // Location Password
memset(btn, 19, sizeof(btn));
btn[0].pin = 20; // przycisk front s2
btn[0].relay_pin = 2; // przekaznik front k12
btn[0].channel = 7; // numer kanału
btn[1].pin = 19; // przycisk lampa taras s1
btn[1].relay_pin = 3; // przekaznik lampa taras k11
btn[1].channel = 8; // numer kanału
btn[2].pin = 43 ; // przycisk lampa kotłownia s18
btn[2].relay_pin = 4; // przekaznik lampa kotłownia k14
btn[2].channel = 9; // numer kanału
btn[3].pin = 22 ; // przycisk kinkiety salon s7
btn[3].relay_pin = 5; // przekaznik kinkiety salon k15
btn[3].channel = 10; // numer kanału
btn[4].pin = 44 ; // przycisk piwnica s17
btn[4].relay_pin = 6; // przekaznik lampa piwnica k16
btn[4].channel = 11; // numer kanału
btn[5].pin =9 ; // przycisk lampa płot s4
btn[5].relay_pin = 7; // przekaznik lampa plot k01
btn[5].channel = 12; // numer kanału
btn[6].pin =23 ; // przycisk kuchnia led s8
btn[6].relay_pin = 8; // przekaznik kuchnia led k17
btn[6].channel = 13; // numer kanału
btn[7].pin =24 ; // przycisk salon led s9
btn[7].relay_pin = 21; // przekaznik salon led k21
btn[7].channel = 14; // numer kanału
btn[8].pin =46 ; // przycisk girlanda s6
btn[8].relay_pin = 11; // przekaznik girlanda k02
btn[8].channel = 15; // numer kanału
btn[9].pin =0 ; // przycisk brama
btn[9].relay_pin = 0; // przekaznik brama wirtualny
btn[9].channel =16 ; // numer kanału
btn[10].pin =0 ; // przycisk brama
btn[10].relay_pin = 0; // przekaznik brama wirtualny
btn[10].channel = 17; // numer kanału
btn[11].pin =29 ; // przycisk akwarium s11
btn[11].relay_pin =14 ; // przekaznik akwarium k22
btn[11].channel = 18; // numer kanału
btn[12].pin =0 ; // przycisk brama
btn[12].relay_pin = 0; // przekaznik brama wirtualny
btn[12].channel =19 ; // numer kanału
btn[13].pin =0 ; // przycisk brama
btn[13].relay_pin = 0; // przekaznik brama wirtualny
btn[13].channel = 20; // numer kanału
btn[14].pin =48 ; // przycisk gniazdo salon 1 (lampa)s12
btn[14].relay_pin = 17; // przekaznik gniazdo salon 1(lampa) k23
btn[14].channel = 21; // numer kanału
btn[15].pin =47 ; // przycisk gniazdo salon 2 (choinka )s13
btn[15].relay_pin = 18; // przekaznik gniazdo salon 2( choinka) k24
btn[15].channel = 22; // numer kanału
btn[16].pin =49 ; // przycisk taras led s14
btn[16].relay_pin = 42; // przekaznik taras led k25
btn[16].channel = 23; // numer kanału
btn[17].pin =0 ; // przycisk brama garaz wirtualny
btn[17].relay_pin = 0; // przekaznik brama garaz wirtualny
btn[17].channel = 24; // numer kanału
btn[18].pin =45 ; // przycisk furtki
btn[18].relay_pin = 39; // przekaznik furtka kdc21
btn[18].channel = 25; // numer kanału
btn[19].pin =25 ; // przycisk lampy zewnatrz s10
btn[19].relay_pin = 40; // przekaznik lampy zewnetrzne k03
btn[19].channel = 26; // numer kanału
supla_btn_init();
SuplaDevice.setTimerFuncImpl(&supla_timer);
}
void loop() {
SuplaDevice.iterate();
}
-
- Posty: 114
- Rejestracja: pn cze 18, 2018 5:38 pm
Zauważyłem, że aplikacja nie restaruje się gdy nie używam żadnego przycisku w aplikacji. Po dłuższym nie użytkowaniu wystarczy niekiedy włączyć jeden odbionik i następuje restart, gdy nic nie robię termometry trzymają wartości.
TEORIA jest wtedy gdy wszystko wiemy i nic nie działa
PRAKTYKA jest wtedy gdy wszystko działa a my nie wiemy dlaczego
My łączymy teorię z praktyką czyli nic nie działa i nikt nie wie dlaczego
PRAKTYKA jest wtedy gdy wszystko działa a my nie wiemy dlaczego
My łączymy teorię z praktyką czyli nic nie działa i nikt nie wie dlaczego
Fakt - nie zwróciłem uwagi na ten "szczegół"...
TEORIA jest wtedy gdy wszystko wiemy i nic nie działa
PRAKTYKA jest wtedy gdy wszystko działa a my nie wiemy dlaczego
My łączymy teorię z praktyką czyli nic nie działa i nikt nie wie dlaczego
PRAKTYKA jest wtedy gdy wszystko działa a my nie wiemy dlaczego
My łączymy teorię z praktyką czyli nic nie działa i nikt nie wie dlaczego
-
- Posty: 114
- Rejestracja: pn cze 18, 2018 5:38 pm
czy problem mogą robić dodane termometry, lecz fizycznie nie podłączone ?
Dodałem 6 czujek ds18b20 z czego narazie podłączonych miałem tylko 3 reszta narazie czeka na podłączenie a są wrzucone do programu, żeby nie przestawiać znowu póżniej kanałów w cloudzie ich narazie nie konfigurowałem
Sam program bez obsługi termometrów się nie restartował.
Dodałem 6 czujek ds18b20 z czego narazie podłączonych miałem tylko 3 reszta narazie czeka na podłączenie a są wrzucone do programu, żeby nie przestawiać znowu póżniej kanałów w cloudzie ich narazie nie konfigurowałem
Sam program bez obsługi termometrów się nie restartował.
Może blokujesz procesor zbyt długi czas przy odczycie. To powoduje brak czasu na obsługę Ethernetu.