Sterownik Arduino + Blynk według robert4you - kontynuacja
- robert4you
- 80%
- Posty: 432
- Rejestracja: 2016-04-01, 10:24
Re: Sterownik Arduino + Blynk według robert4you - kontynuacja
Miło widzieć takie wpisy.
Wysłane z mojego SM-G950F przy użyciu Tapatalka
Wysłane z mojego SM-G950F przy użyciu Tapatalka
==================================================
Moja wersja sterownika forumowego - sterowanie kolumny telefonem:
http://www.bimber.info/forum/viewtopic.php?f=11&t=6419
UWAG: Potrzebujesz sterownika lub termometru , napisz PW !!!
Moja wersja sterownika forumowego - sterowanie kolumny telefonem:
http://www.bimber.info/forum/viewtopic.php?f=11&t=6419
UWAG: Potrzebujesz sterownika lub termometru , napisz PW !!!
Re: Sterownik Arduino + Blynk według robert4you - kontynuacja
Zojsan czy możesz pomóc z WifiManagerem w kodzie od Roberta ? Twój kod jest mocno rozbudowany nie na moje siły
Oto kod o który mi chodzi :
Wysłane z mojego SM-G950F przy użyciu Tapatalka
[/quote]
Oto kod o który mi chodzi :
Kod: Zaznacz cały
/*
ZAPISY DO BLYNK
V1 led1 OK
V2 zapamiętaj temperaturę dnia
V3 temperatura dnia
V4 grzałka 2
V5 grzałka 3
V11 led2 EZ
V12 led3 AWARIA
V13 led4 KONIEC
V20 SSR_time
V25 EZ_time
V30 praca
V50 zbiornik
V51 bufor
V52 10p
V53 OLM
V54 UFO
V55 woda
*/
TaskHandle_t Task1;
//#define BLYNK_PRINT Serial
#include <DallasTemperature.h>
#include <OneWire.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <WiFi.h>
#define EZPin 12 // EZ
#define RelayPin 14 // grzałka 1
#define RelayPin2 4 // grzałka 2
#define RelayPin3 25 // grzałka 3
#define ONE_WIRE_BUS 5 // temperatura
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
int SSR_time=0;
int EZ_time=0;
int EZ_time2=0;
unsigned long windowStartTime=0;
unsigned long windowStartTime1=0;
char auth[] =zzzO";
char ssid[] = "zzz";
char pass[] = "zzzb";
WidgetLED led1(V1);//ok
WidgetLED led2(V11);// EZ
WidgetLED led3(V12);//awaria
WidgetLED led4(V13);//koniec
BlynkTimer timer;
float temp_zbiornik = 0;
float temp_bufor = 0;
float temp_10p = 0;
float temp_OLM = 0;
float temp_UFO = 0;
float temp_woda = 0;
float temp_dnia = 80;
int grzalka_2=0;
int grzalka_3=0;
int koniec=0;
int awaria=0;
int praca=0;
int x=0;
int skok=0; // skok na 10p
int EZ=0; // stan EZ
int EZstop;
int a=0;
int b=0;
int c=0;
//**************************************************
BLYNK_WRITE(V20)
{
SSR_time = param.asInt();
}
//***************************************************
BLYNK_WRITE(V25)
{
EZ_time = param.asInt();
}
//**************************************************
BLYNK_WRITE(V30)
{
praca = param.asInt();
}
//*******************************************************
BLYNK_WRITE(V2)
{
c = param.asInt();
if (c==1){Blynk.setProperty(2,"color","#66ff33");Blynk.setProperty(2,"offLabel",temp_10p);temp_dnia=(temp_10p+0.125);}
}
//*******************************************************
BLYNK_WRITE(V4)
{
grzalka_2 = param.asInt();
}
//*******************************************************
BLYNK_WRITE(V5)
{
grzalka_3 = param.asInt();
}
//*******************************************************
void blinkLedWidget() //co 1 sek
{
sensors.requestTemperatures();
temp_zbiornik = sensors.getTempCByIndex(0);
temp_bufor = sensors.getTempCByIndex(1);
temp_10p = sensors.getTempCByIndex(2);
temp_OLM = sensors.getTempCByIndex(3);
temp_UFO = sensors.getTempCByIndex(4);
temp_woda = sensors.getTempCByIndex(5);
Blynk.virtualWrite(50,temp_zbiornik);
Blynk.virtualWrite(51,temp_bufor);
Blynk.virtualWrite(52,temp_10p);
Blynk.virtualWrite(53,temp_OLM);
Blynk.virtualWrite(54,temp_UFO);
Blynk.virtualWrite(55,temp_woda);
Blynk.virtualWrite(26,SSR_time);
Blynk.virtualWrite(11,EZ);
Blynk.virtualWrite(30,praca);
if(praca==0){Blynk.setProperty(30,"color","#D3435C");}
if(praca==1){Blynk.setProperty(30,"color","#66ff33");}
//*******************Słabe chłodzenie****************************
if(temp_UFO>=60)
{
praca=0;
led3.on();
if(a<3)
{
Blynk.notify("AWARIA!UFO za gorące!!!STOP!");
a++;
}
}
if(temp_woda>=60)
{
praca=0;
led3.on();
if(b<3)
{
Blynk.notify("AWARIA!Woda za gorąca!!! STOP!");
b++;
}
}
if(temp_UFO<58&&temp_woda<60&&awaria==0){led3.off();}
if(temp_UFO<58){a=0;}
if(temp_woda<58){b=0;}
//******************Błąd temperatury**************************************
if
(
(temp_zbiornik<=0)||(temp_zbiornik>=110)
||(temp_bufor<=0)||(temp_bufor>=110)
||(temp_10p<=0)||(temp_10p>=110)
||(temp_OLM<=0)||(temp_OLM>=110)
||(temp_UFO<=0)||(temp_UFO>=110)
||(temp_woda<=0)||(temp_woda>=110)
)
{
awaria=1;
praca=0;
}
if(awaria==1&&x==0)
{
led3.on();
Blynk.notify("AWARIA! Błąd pomiaru temperatury!!!");
x=1;
}
//****KONIEC PROCESU**************************************************************
if((temp_zbiornik>=98)&&(temp_bufor>=96)&&(praca==1)&&(koniec==0))
{
koniec=1;
praca=0;
digitalWrite(RelayPin, LOW);Blynk.virtualWrite(10,0);led4.on();
Blynk.notify("KONIEC! Temperatura bufora osiągnięta!!!");
}
if (led1.getValue())
{
led1.off();
//Serial.println("LED on V1: off");
}
else
{
led1.on();
//Serial.println("LED on V1: on");
}
}
void setup()
{
xTaskCreatePinnedToCore(Task1code,"Task1",10000,NULL,0,&Task1,0);
Blynk.begin(auth, ssid, pass);
pinMode(RelayPin, OUTPUT);
pinMode(RelayPin2, OUTPUT);
pinMode(RelayPin3, OUTPUT);
pinMode(EZPin, OUTPUT);
digitalWrite(RelayPin, LOW);
digitalWrite(RelayPin2, LOW);
digitalWrite(RelayPin3, LOW);
digitalWrite(EZPin, LOW);
sensors.setResolution(12);
sensors.begin();
//sensors.setWaitForConversion(false);
timer.setInterval(1000L, blinkLedWidget);
windowStartTime = millis();
windowStartTime1 = millis();
led1.off();
led2.off();
led3.off();
led4.off();
Blynk.virtualWrite(30,0);
Blynk.setProperty(30,"color","#D3435C");
Blynk.virtualWrite(20,0);
Blynk.virtualWrite(25,0);
Blynk.virtualWrite(4,0);
Blynk.virtualWrite(5,0);
Blynk.setProperty(2,"offLabel","USTAW ALARM");
}
void loop()
{
Blynk.run();
timer.run();
//**************skok na 10 półce*******************
if(temp_10p>temp_dnia&&EZ_time>0&&EZstop==0){digitalWrite(EZPin, LOW); EZstop=1; Blynk.notify("10p skok temperatury! Odbiór STOP!");}
if(temp_10p<=(temp_dnia-0.1)&&EZstop==1){EZstop=0; EZ_time -=5;Blynk.notify("KOREKTA 5% ODBIÓR START!");Blynk.virtualWrite(25,EZ_time);}
//*************sterowanie grzałek dodatkowych
if(grzalka_2==1&&praca==1&&koniec==0&&awaria==0){digitalWrite(RelayPin2,HIGH);}
else {digitalWrite(RelayPin2,LOW);}
if(grzalka_3==1&&praca==1&&koniec==0&&awaria==0){digitalWrite(RelayPin3,HIGH);}
else {digitalWrite(RelayPin3,LOW);}
}
void Task1code( void * pvParameters )
{
// polecenia wykonywane jak w funkcji setup()
pinMode(RelayPin, OUTPUT);
pinMode(EZPin, OUTPUT);
digitalWrite(RelayPin, LOW);
digitalWrite(EZPin, LOW);
windowStartTime = millis();
windowStartTime1 = millis();
for(;;)
{
// polecenia wykonywane jak w funkcji loop()
//*****PWM*********************************
if ((millis() - windowStartTime) >1000)
{
windowStartTime += 1000;
}
if ((SSR_time*10) < (millis() - windowStartTime))
{
digitalWrite(RelayPin, LOW);
}
else
{
if (koniec==0 && awaria==0 && praca==1)
{
digitalWrite(RelayPin, HIGH);
}
}
//***************EZ**********************************
if ((millis() - windowStartTime1) >5000)
{
windowStartTime1 += 5000;
}
if ((EZ_time*50) < (millis() - windowStartTime1))
{
digitalWrite(EZPin, LOW);EZ=0;
}
else
{
if (koniec==0 && awaria==0 && praca==1 && EZstop==0)
{
digitalWrite(EZPin, HIGH);EZ=255;
}
}
}
}
Wysłane z mojego SM-G950F przy użyciu Tapatalka
[/quote]
Re: Sterownik Arduino + Blynk według robert4you - kontynuacja
Pewnie...
Podeślę ci...
Podeślę ci...
Re: Sterownik Arduino + Blynk według robert4you - kontynuacja
andras pisze: ↑2021-02-17, 19:05Zojsan czy możesz pomóc z WifiManagerem w kodzie od Roberta ? Twój kod jest mocno rozbudowany nie na moje siły
Oto kod o który mi chodzi :
Kod: Zaznacz cały
/* ZAPISY DO BLYNK V1 led1 OK V2 zapamiętaj temperaturę dnia V3 temperatura dnia V4 grzałka 2 V5 grzałka 3 V11 led2 EZ V12 led3 AWARIA V13 led4 KONIEC V20 SSR_time V25 EZ_time V30 praca V50 zbiornik V51 bufor V52 10p V53 OLM V54 UFO V55 woda */ TaskHandle_t Task1; //#define BLYNK_PRINT Serial #include <DallasTemperature.h> #include <OneWire.h> #include <WiFiClient.h> #include <BlynkSimpleEsp32.h> #include <WiFi.h> #define EZPin 12 // EZ #define RelayPin 14 // grzałka 1 #define RelayPin2 4 // grzałka 2 #define RelayPin3 25 // grzałka 3 #define ONE_WIRE_BUS 5 // temperatura OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); int SSR_time=0; int EZ_time=0; int EZ_time2=0; unsigned long windowStartTime=0; unsigned long windowStartTime1=0; char auth[] =zzzO"; char ssid[] = "zzz"; char pass[] = "zzzb"; WidgetLED led1(V1);//ok WidgetLED led2(V11);// EZ WidgetLED led3(V12);//awaria WidgetLED led4(V13);//koniec BlynkTimer timer; float temp_zbiornik = 0; float temp_bufor = 0; float temp_10p = 0; float temp_OLM = 0; float temp_UFO = 0; float temp_woda = 0; float temp_dnia = 80; int grzalka_2=0; int grzalka_3=0; int koniec=0; int awaria=0; int praca=0; int x=0; int skok=0; // skok na 10p int EZ=0; // stan EZ int EZstop; int a=0; int b=0; int c=0; //************************************************** BLYNK_WRITE(V20) { SSR_time = param.asInt(); } //*************************************************** BLYNK_WRITE(V25) { EZ_time = param.asInt(); } //************************************************** BLYNK_WRITE(V30) { praca = param.asInt(); } //******************************************************* BLYNK_WRITE(V2) { c = param.asInt(); if (c==1){Blynk.setProperty(2,"color","#66ff33");Blynk.setProperty(2,"offLabel",temp_10p);temp_dnia=(temp_10p+0.125);} } //******************************************************* BLYNK_WRITE(V4) { grzalka_2 = param.asInt(); } //******************************************************* BLYNK_WRITE(V5) { grzalka_3 = param.asInt(); } //******************************************************* void blinkLedWidget() //co 1 sek { sensors.requestTemperatures(); temp_zbiornik = sensors.getTempCByIndex(0); temp_bufor = sensors.getTempCByIndex(1); temp_10p = sensors.getTempCByIndex(2); temp_OLM = sensors.getTempCByIndex(3); temp_UFO = sensors.getTempCByIndex(4); temp_woda = sensors.getTempCByIndex(5); Blynk.virtualWrite(50,temp_zbiornik); Blynk.virtualWrite(51,temp_bufor); Blynk.virtualWrite(52,temp_10p); Blynk.virtualWrite(53,temp_OLM); Blynk.virtualWrite(54,temp_UFO); Blynk.virtualWrite(55,temp_woda); Blynk.virtualWrite(26,SSR_time); Blynk.virtualWrite(11,EZ); Blynk.virtualWrite(30,praca); if(praca==0){Blynk.setProperty(30,"color","#D3435C");} if(praca==1){Blynk.setProperty(30,"color","#66ff33");} //*******************Słabe chłodzenie**************************** if(temp_UFO>=60) { praca=0; led3.on(); if(a<3) { Blynk.notify("AWARIA!UFO za gorące!!!STOP!"); a++; } } if(temp_woda>=60) { praca=0; led3.on(); if(b<3) { Blynk.notify("AWARIA!Woda za gorąca!!! STOP!"); b++; } } if(temp_UFO<58&&temp_woda<60&&awaria==0){led3.off();} if(temp_UFO<58){a=0;} if(temp_woda<58){b=0;} //******************Błąd temperatury************************************** if ( (temp_zbiornik<=0)||(temp_zbiornik>=110) ||(temp_bufor<=0)||(temp_bufor>=110) ||(temp_10p<=0)||(temp_10p>=110) ||(temp_OLM<=0)||(temp_OLM>=110) ||(temp_UFO<=0)||(temp_UFO>=110) ||(temp_woda<=0)||(temp_woda>=110) ) { awaria=1; praca=0; } if(awaria==1&&x==0) { led3.on(); Blynk.notify("AWARIA! Błąd pomiaru temperatury!!!"); x=1; } //****KONIEC PROCESU************************************************************** if((temp_zbiornik>=98)&&(temp_bufor>=96)&&(praca==1)&&(koniec==0)) { koniec=1; praca=0; digitalWrite(RelayPin, LOW);Blynk.virtualWrite(10,0);led4.on(); Blynk.notify("KONIEC! Temperatura bufora osiągnięta!!!"); } if (led1.getValue()) { led1.off(); //Serial.println("LED on V1: off"); } else { led1.on(); //Serial.println("LED on V1: on"); } } void setup() { xTaskCreatePinnedToCore(Task1code,"Task1",10000,NULL,0,&Task1,0); Blynk.begin(auth, ssid, pass); pinMode(RelayPin, OUTPUT); pinMode(RelayPin2, OUTPUT); pinMode(RelayPin3, OUTPUT); pinMode(EZPin, OUTPUT); digitalWrite(RelayPin, LOW); digitalWrite(RelayPin2, LOW); digitalWrite(RelayPin3, LOW); digitalWrite(EZPin, LOW); sensors.setResolution(12); sensors.begin(); //sensors.setWaitForConversion(false); timer.setInterval(1000L, blinkLedWidget); windowStartTime = millis(); windowStartTime1 = millis(); led1.off(); led2.off(); led3.off(); led4.off(); Blynk.virtualWrite(30,0); Blynk.setProperty(30,"color","#D3435C"); Blynk.virtualWrite(20,0); Blynk.virtualWrite(25,0); Blynk.virtualWrite(4,0); Blynk.virtualWrite(5,0); Blynk.setProperty(2,"offLabel","USTAW ALARM"); } void loop() { Blynk.run(); timer.run(); //**************skok na 10 półce******************* if(temp_10p>temp_dnia&&EZ_time>0&&EZstop==0){digitalWrite(EZPin, LOW); EZstop=1; Blynk.notify("10p skok temperatury! Odbiór STOP!");} if(temp_10p<=(temp_dnia-0.1)&&EZstop==1){EZstop=0; EZ_time -=5;Blynk.notify("KOREKTA 5% ODBIÓR START!");Blynk.virtualWrite(25,EZ_time);} //*************sterowanie grzałek dodatkowych if(grzalka_2==1&&praca==1&&koniec==0&&awaria==0){digitalWrite(RelayPin2,HIGH);} else {digitalWrite(RelayPin2,LOW);} if(grzalka_3==1&&praca==1&&koniec==0&&awaria==0){digitalWrite(RelayPin3,HIGH);} else {digitalWrite(RelayPin3,LOW);} } void Task1code( void * pvParameters ) { // polecenia wykonywane jak w funkcji setup() pinMode(RelayPin, OUTPUT); pinMode(EZPin, OUTPUT); digitalWrite(RelayPin, LOW); digitalWrite(EZPin, LOW); windowStartTime = millis(); windowStartTime1 = millis(); for(;;) { // polecenia wykonywane jak w funkcji loop() //*****PWM********************************* if ((millis() - windowStartTime) >1000) { windowStartTime += 1000; } if ((SSR_time*10) < (millis() - windowStartTime)) { digitalWrite(RelayPin, LOW); } else { if (koniec==0 && awaria==0 && praca==1) { digitalWrite(RelayPin, HIGH); } } //***************EZ********************************** if ((millis() - windowStartTime1) >5000) { windowStartTime1 += 5000; } if ((EZ_time*50) < (millis() - windowStartTime1)) { digitalWrite(EZPin, LOW);EZ=0; } else { if (koniec==0 && awaria==0 && praca==1 && EZstop==0) { digitalWrite(EZPin, HIGH);EZ=255; } } } }
Wysłane z mojego SM-G950F przy użyciu Tapatalka
Łow... ktoś jaszcze nad tym panuje i wie co oznaczają te wszystkie liczby i if'y w głównej pętli? Zresztą nie tylko w niej, ale ona jest najlepszym przykładem jak nie pisać programów jaki kiedykolwiek widziałem
Re: Sterownik Arduino + Blynk według robert4you - kontynuacja
Skoro wiesz jak nie pisać, to powinienieś wiedzieć jak pisać. A skoro nie rozumiesz co tam jest napisane, to...
Re: Sterownik Arduino + Blynk według robert4you - kontynuacja
masz jakąś nową, inną metodę...?
podziel się prosze...
to forum jest po to aby się rozwijać w temacie....
Re: Sterownik Arduino + Blynk według robert4you - kontynuacja
@pico Nie wiem skąd wyciągnąłeś wniosek że nie rozumiem... ja tylko napisałem że to dobry przykład jak nie powinno się pisać kodu... Trochę jak ze spawaniem można to zrobić ładnie, a można narobić kalafiorów też będzie się trzymać nawet będzie szczelne szczelne i będzie działać .
Po przeformatowaniu cały kod ma tylko tysiąc dwieście linii... a podczas pobieżnej analizy co i jak trzeba skakać po pliku żeby się upewnić co właściwie znaczy zmienna xx, ax czy ks, a teraz wyobraź sobie że projekt jest większy i masz dziesięć tysięcy linii albo milion.
Po przeformatowaniu cały kod ma tylko tysiąc dwieście linii... a podczas pobieżnej analizy co i jak trzeba skakać po pliku żeby się upewnić co właściwie znaczy zmienna xx, ax czy ks, a teraz wyobraź sobie że projekt jest większy i masz dziesięć tysięcy linii albo milion.
Ostatnio zmieniony 2021-02-25, 21:15 przez rastro, łącznie zmieniany 1 raz.
Re: Sterownik Arduino + Blynk według robert4you - kontynuacja
Ja bym zaczął od starej dobrej zasady... dziel i rządź + zmiana nazewnictwa zmiennych + zamiast tych wszędobylskich liczb jakieś makra ew. stałe ze znaczącymi nazwami. Do tego zastanowił bym się czy wszystkie zmienne naprawdę muszą być globalne.
Re: Sterownik Arduino + Blynk według robert4you - kontynuacja
To ciekawe co piszesz...naprawdę
na tym forum są raczej "bimbrownicy" a nie "programiści" i możesz mieć rację że nasz spaw jest jak kartoflisko....
Może zechciałbyś troszkę uchylić rąbka programowania...
Na początek...
czy dla kodu ma znaczenie czy zmienna jest globalną czy nie...?
no i co masz na myśli mówiąc zmiana nazewnictwa zmiennych...
rozwiń proszę swoją myśl...
na tym forum są raczej "bimbrownicy" a nie "programiści" i możesz mieć rację że nasz spaw jest jak kartoflisko....
Może zechciałbyś troszkę uchylić rąbka programowania...
Na początek...
czy dla kodu ma znaczenie czy zmienna jest globalną czy nie...?
no i co masz na myśli mówiąc zmiana nazewnictwa zmiennych...
rozwiń proszę swoją myśl...
Re: Sterownik Arduino + Blynk według robert4you - kontynuacja
Dla komputera to jest zwykle bez znaczenia taka zmienna to w zasadzie miejsce w pamięci gdzie będą jakieś dane. (aczkolwiek to spore uproszczenie bo jest jeszcze kwestia tzw. zasięgów i tego kiedy zmienna jest powoływana i gdzie w pamięci - parametry zwykle są umieszczane na stosie, reszta zwykle trafia na tzw. stertę, ale to już zalezy od kompilatora, jeszcze jest kwestia inicjalizacji globalne wystarczy zainicjować raz, a lokalne są zwykle inicjowane przy każdym wywołaniu bloku w którym zmienna jest zadeklarowana). Ma to znacznie większe znaczenie z punktu widzenia człowieka. Bo zobacz jak zmienna powiedzmy x jest globalna to można jej użyć w dosłownie każdej części kodu. Ciągle trzeba pamiętać że ona tam gdzieś na początku pliki została zadeklarowana i co ona właściwie oznacza. Do tego jak sam już pewnie zauważyłeś przy ponad setce zmiennych zaczyna pojawiać się kłopot jak je nazywać.. mamy więc x i xx a nawet ax.
A no właśnie... bo co mówi nazwa x albo xx komuś kto ogląda kod po raz pierwszy... ano zwykle nic tutaj szczęśliwie jest chociaż jakiś komentarz przy deklaracji więc można się zorientować - tle że trzeba się jednak skakać do deklaracji. Gdyby zamiast x stało wyslanoAlert10p a zamiast ax alertSpadkuTemp to czytało by się to lepiej - ja wiem to jest upierdliwe do pisania, ale później jest łatwiej. To trochę wina ułomności ArduinoIDE. Szkoda że nie wpadli na pomysł żeby dorobić plugin do VS Code. Ale generalne nie trzeba się bać nieco dłuższych bardziej opisowych nazw dla zmiennych czy funkcji.
- robert4you
- 80%
- Posty: 432
- Rejestracja: 2016-04-01, 10:24
Re: Sterownik Arduino + Blynk według robert4you - kontynuacja
Na początku ten kod miał ze 100 linii tylko. I musi być tylko do mojego sterownika. A potem zaczął się rozrastać i jest jak jest.
Wysłane z mojego SM-A715F przy użyciu Tapatalka
Wysłane z mojego SM-A715F przy użyciu Tapatalka
==================================================
Moja wersja sterownika forumowego - sterowanie kolumny telefonem:
http://www.bimber.info/forum/viewtopic.php?f=11&t=6419
UWAG: Potrzebujesz sterownika lub termometru , napisz PW !!!
Moja wersja sterownika forumowego - sterowanie kolumny telefonem:
http://www.bimber.info/forum/viewtopic.php?f=11&t=6419
UWAG: Potrzebujesz sterownika lub termometru , napisz PW !!!
Re: Sterownik Arduino + Blynk według robert4you - kontynuacja
No tak Robercie, widziałem również i Twój kod, - w prawdzie linii było trochę więcej niż zeznajesz, ale całość była mniej skomplikowana i wciąż do opanowania. Taki już urok w tym fachu że całość lubi się coraz bardziej komplikować i w pewnym momencie trzeba przemyśleć jak to uprościć albo przynajmniej tak skonstrupwać żeby wciąż było czytelne.
Re: Sterownik Arduino + Blynk według robert4you - kontynuacja
rasto ale kod który zacytowałeś jest od roberta
Wysłane z mojego SM-G960F przy użyciu Tapatalka
Wysłane z mojego SM-G960F przy użyciu Tapatalka
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 45 gości