27-10-2023, 20:23
27-10-2023, 20:30
(27-10-2023, 19:07)gintur napisał(a): [ -> ]Tak wiem wszystkie elementy beda sterowane poprzez moduły przekaznikowe .OK podaj link do tego Modulu, Jedne sasterowene High inne z Low
int czujMax; //czujnik max
co za czujniki.
27-10-2023, 22:43
Chciałbym zacząć od samego początku a wiec od uruchomienia programu czyli START.
Przyciskiem chwilowym uruchamiam elektrozawór E1 który ma się włączyć na np 10
[/code]sek i samoczynnie wyłączyć .Szperając w sieci wyszło to ale nie działa .Przycisk włączy E1 ale juz nie chce się samoczynnie wyłączyć po upływie tych 10 se
Przyciskiem chwilowym uruchamiam elektrozawór E1 który ma się włączyć na np 10
Kod:
[code]
#define E1 7
#define Przycisk 6
int x = 0;
unsigned long aktualnyCzas = 0;
unsigned long zapamietanyCzasDzialania = 0;
//E1Status=Status zaworu
void setup() {
pinMode(E1,OUTPUT);
pinMode(Przycisk,INPUT_PULLUP);
}
void loop() {
aktualnyCzas= millis();
if(digitalRead(Przycisk)==LOW){
x=x+1;
if(x==2)
{x=0;}
if(x==0){
digitalWrite(E1,HIGH);}
if(digitalRead(E1)==HIGH)
{
zapamietanyCzasDzialania=aktualnyCzas;}
if(aktualnyCzas - zapamietanyCzasDzialania>=10000)
{digitalWrite(E1,LOW);}
}
27-10-2023, 22:50
Najmniejszy moduł 1 przekaźnika 5V 10A, 2xLED (-) - Sklep, Opinie, Cena w Allegro.pl
Czujnik poziomu wody cieczy pływak 52mm pionowy (Evial) • Cena, Opinie • Czujniki i przetworniki 14034473461 • Allegro
Np taki tylko ze ten sterowany jest stanem niskim a ja bede miał sterowany stanem wysokim
czujnik to zwykły czujnik pływakowy
Czujnik poziomu wody cieczy pływak 52mm pionowy (Evial) • Cena, Opinie • Czujniki i przetworniki 14034473461 • Allegro
Np taki tylko ze ten sterowany jest stanem niskim a ja bede miał sterowany stanem wysokim
czujnik to zwykły czujnik pływakowy
27-10-2023, 23:50
Niepotrzebnie przejmujesz się stanem przycisku po aktywacji. Można założyć na początek, że nawet jak go trzymasz to po prostu póki jest wciśnięty to tylko o tyle przedłuży czas działania pompy ciągle ustawiając czas startu na nowo, można to potem elegancko i bez wysiłku ogarnąć gotową biblioteką do przycisków.
Jak wejdziesz w ifa i aktywujesz start to zacznie się praca pompy, ale nie ma niczego co ją potem wyłączy, bo przycisk już nie jest 0, a program nie sprawdza nic co jest wewnątrz if(digitalRead)==0, a tu właściwie masz cały program.
Brakuje też nawiasu, ale zakładam, że nie skopiowałeś ostatniej linii kodu.
Czyli musisz zakończyć blok gdzie startujesz ten etap, ustawiasz E1 na HIGH, gdzieś wcześniej, a w innym bloku programu sprawdzać czy upłynęło już wystarczająco dużo czasu by go zakończyć, taki ping pong między dwoma blokami, jednym załączasz by drugim niezależnym wyłączyć.
Przykład:
Jak wejdziesz w ifa i aktywujesz start to zacznie się praca pompy, ale nie ma niczego co ją potem wyłączy, bo przycisk już nie jest 0, a program nie sprawdza nic co jest wewnątrz if(digitalRead)==0, a tu właściwie masz cały program.
Brakuje też nawiasu, ale zakładam, że nie skopiowałeś ostatniej linii kodu.
Czyli musisz zakończyć blok gdzie startujesz ten etap, ustawiasz E1 na HIGH, gdzieś wcześniej, a w innym bloku programu sprawdzać czy upłynęło już wystarczająco dużo czasu by go zakończyć, taki ping pong między dwoma blokami, jednym załączasz by drugim niezależnym wyłączyć.
Przykład:
Kod:
const uint8_t led=4,przycisk=3;
const uint32_t czasDolewania=3000;
bool stanLania;
enum etapy{oczekiwanie,podlewanie};
void setup() {
// put your setup code here, to run once:
pinMode(led,OUTPUT);
pinMode(przycisk,INPUT_PULLUP);
Serial.begin(115200);
}
void loop() {
// put your main code here, to run repeatedly:
static uint32_t aktCzas=0,startPracy=0;
delay(1);
aktCzas++;//zliczanie ilosci loop, czyli zatrzyman na 1 ms
if(digitalRead(przycisk)==0)
{
startPracy=aktCzas; //zapis czasu wystartowania
stanLania=1; // ustawienie, że praca jest aktywna
digitalWrite(led,1);
}
if(stanLania)
{
if((aktCzas-startPracy)>czasDolewania) //minelo czasDolewania ms
{
digitalWrite(led,0);
stanLania=0;
}
}
if(aktCzas%1000 == 0)
{
Serial.print(aktCzas); Serial.print(" "); Serial.print(startPracy); Serial.print(" "); Serial.print(aktCzas-startPracy); Serial.print(" "); Serial.print(stanLania); Serial.println(" ");
}
}
28-10-2023, 09:26
(28-10-2023, 09:11)Old Fony napisał(a): [ -> ]Wszystko fajnie , zapomniales o odbijaniu kontaktöw (bounce contacts) nim ten sie uspokoi to przy START pare razy program przeleci w Loopie. Przyciski i kontaktrony odbijaja pare razy nim sie uspokoja, wzial bym podprogram(Biblioteke)(27-10-2023, 23:50)kaczakat napisał(a): [ -> ]Niepotrzebnie przejmujesz się stanem przycisku po aktywacji. Można założyć na początek, że nawet jak go trzymasz to po prostu póki jest wciśnięty to tylko o tyle przedłuży czas działania pompy ciągle ustawiając czas startu na nowo, można to potem elegancko i bez wysiłku ogarnąć gotową biblioteką do przycisków.
Jak wejdziesz w ifa i aktywujesz start to zacznie się praca pompy, ale nie ma niczego co ją potem wyłączy, bo przycisk już nie jest 0, a program nie sprawdza nic co jest wewnątrz if(digitalRead)==0, a tu właściwie masz cały program.
Brakuje też nawiasu, ale zakładam, że nie skopiowałeś ostatniej linii kodu.
Czyli musisz zakończyć blok gdzie startujesz ten etap, ustawiasz E1 na HIGH, gdzieś wcześniej, a w innym bloku programu sprawdzać czy upłynęło już wystarczająco dużo czasu by go zakończyć, taki ping pong między dwoma blokami, jednym załączasz by drugim niezależnym wyłączyć.
Przykład:
Kod:const uint8_t led=4,przycisk=3;
const uint32_t czasDolewania=3000;
bool stanLania;
enum etapy{oczekiwanie,podlewanie};
void setup() {
// put your setup code here, to run once:
pinMode(led,OUTPUT);
pinMode(przycisk,INPUT_PULLUP);
Serial.begin(115200);
}
void loop() {
// put your main code here, to run repeatedly:
static uint32_t aktCzas=0,startPracy=0;
delay(1);
aktCzas++;//zliczanie ilosci loop, czyli zatrzyman na 1 ms
if(digitalRead(przycisk)==0)
{
startPracy=aktCzas; //zapis czasu wystartowania
stanLania=1; // ustawienie, że praca jest aktywna
digitalWrite(led,1);
}
if(stanLania)
{
if((aktCzas-startPracy)>czasDolewania) //minelo czasDolewania ms
{
digitalWrite(led,0);
stanLania=0;
}
}
if(aktCzas%1000 == 0)
{
Serial.print(aktCzas); Serial.print(" "); Serial.print(startPracy); Serial.print(" "); Serial.print(aktCzas-startPracy); Serial.print(" "); Serial.print(stanLania); Serial.println(" ");
}
}
https://www.arduino.cc/reference/en/libr...tdebounce/
albo maly delay (100) i juz spokoj w garnku
To sa drobnostki o ktorych sie przewaznie zapomina
@ TO te przekazniki nie sa przewidziane dla 230V nie maja na plytce wyciec miedzy kontaktami i sterowaniem
Znaczy przekazik jest dla 230V plytka nie.
28-10-2023, 12:29
Tak, faktycznie, albo, albo przeczytaj poprzednie posty,to jest program od którego można zacząć, demo, dlatego jest tam delay 1, o którym pisałem.
28-10-2023, 14:55
Ludzie jak Wy to ogarniacie? .Kaczakat wpisałem to co podesłałeś i działa jest super tylko co dalej ....
Kod który ja wstawiłem oparty był na przykładzie z sieci troszke go przerobiłem pod siebie ale był jakoś tak dla mnie w miarę zrozumiały .Autor napisał kod do lampki która był sterowana czujnikiem PIR i miała się zapalić na 18 sek i zgasnąć
Czytam ,szukam przykładów z opisem a tu prosze pojawia się enum
Kod który ja wstawiłem oparty był na przykładzie z sieci troszke go przerobiłem pod siebie ale był jakoś tak dla mnie w miarę zrozumiały .Autor napisał kod do lampki która był sterowana czujnikiem PIR i miała się zapalić na 18 sek i zgasnąć
Czytam ,szukam przykładów z opisem a tu prosze pojawia się enum
28-10-2023, 15:01
(28-10-2023, 09:26)Old Fony napisał(a): [ -> ](28-10-2023, 09:11)Old Fony napisał(a): [ -> ]Wszystko fajnie , zapomniales o odbijaniu kontaktöw (bounce contacts) nim ten sie uspokoi to przy START pare razy program przeleci w Loopie. Przyciski i kontaktrony odbijaja pare razy nim sie uspokoja, wzial bym podprogram(Biblioteke)(27-10-2023, 23:50)kaczakat napisał(a): [ -> ]Niepotrzebnie przejmujesz się stanem przycisku po aktywacji. Można założyć na początek, że nawet jak go trzymasz to po prostu póki jest wciśnięty to tylko o tyle przedłuży czas działania pompy ciągle ustawiając czas startu na nowo, można to potem elegancko i bez wysiłku ogarnąć gotową biblioteką do przycisków.
Jak wejdziesz w ifa i aktywujesz start to zacznie się praca pompy, ale nie ma niczego co ją potem wyłączy, bo przycisk już nie jest 0, a program nie sprawdza nic co jest wewnątrz if(digitalRead)==0, a tu właściwie masz cały program.
Brakuje też nawiasu, ale zakładam, że nie skopiowałeś ostatniej linii kodu.
Czyli musisz zakończyć blok gdzie startujesz ten etap, ustawiasz E1 na HIGH, gdzieś wcześniej, a w innym bloku programu sprawdzać czy upłynęło już wystarczająco dużo czasu by go zakończyć, taki ping pong między dwoma blokami, jednym załączasz by drugim niezależnym wyłączyć.
Przykład:
Kod:const uint8_t led=4,przycisk=3;
const uint32_t czasDolewania=3000;
bool stanLania;
enum etapy{oczekiwanie,podlewanie};
void setup() {
// put your setup code here, to run once:
pinMode(led,OUTPUT);
pinMode(przycisk,INPUT_PULLUP);
Serial.begin(115200);
}
void loop() {
// put your main code here, to run repeatedly:
static uint32_t aktCzas=0,startPracy=0;
delay(1);
aktCzas++;//zliczanie ilosci loop, czyli zatrzyman na 1 ms
if(digitalRead(przycisk)==0)
{
startPracy=aktCzas; //zapis czasu wystartowania
stanLania=1; // ustawienie, że praca jest aktywna
digitalWrite(led,1);
}
if(stanLania)
{
if((aktCzas-startPracy)>czasDolewania) //minelo czasDolewania ms
{
digitalWrite(led,0);
stanLania=0;
}
}
if(aktCzas%1000 == 0)
{
Serial.print(aktCzas); Serial.print(" "); Serial.print(startPracy); Serial.print(" "); Serial.print(aktCzas-startPracy); Serial.print(" "); Serial.print(stanLania); Serial.println(" ");
}
}
https://www.arduino.cc/reference/en/libr...tdebounce/
albo maly delay (100) i juz spokoj w garnku
To sa drobnostki o ktorych sie przewaznie zapomina
@ TO te przekazniki nie sa przewidziane dla 230V nie maja na plytce wyciec miedzy kontaktami i sterowaniem
Znaczy przekazik jest dla 230V plytka nie.
28-10-2023, 15:02
(28-10-2023, 15:01)gintur napisał(a): [ -> ]To był pierwszy lepszy przykład z sieci .O jakich dokładnie wycięciach piszesz?(28-10-2023, 09:26)Old Fony napisał(a): [ -> ](28-10-2023, 09:11)Old Fony napisał(a): [ -> ]Wszystko fajnie , zapomniales o odbijaniu kontaktöw (bounce contacts) nim ten sie uspokoi to przy START pare razy program przeleci w Loopie. Przyciski i kontaktrony odbijaja pare razy nim sie uspokoja, wzial bym podprogram(Biblioteke)(27-10-2023, 23:50)kaczakat napisał(a): [ -> ]Niepotrzebnie przejmujesz się stanem przycisku po aktywacji. Można założyć na początek, że nawet jak go trzymasz to po prostu póki jest wciśnięty to tylko o tyle przedłuży czas działania pompy ciągle ustawiając czas startu na nowo, można to potem elegancko i bez wysiłku ogarnąć gotową biblioteką do przycisków.
Jak wejdziesz w ifa i aktywujesz start to zacznie się praca pompy, ale nie ma niczego co ją potem wyłączy, bo przycisk już nie jest 0, a program nie sprawdza nic co jest wewnątrz if(digitalRead)==0, a tu właściwie masz cały program.
Brakuje też nawiasu, ale zakładam, że nie skopiowałeś ostatniej linii kodu.
Czyli musisz zakończyć blok gdzie startujesz ten etap, ustawiasz E1 na HIGH, gdzieś wcześniej, a w innym bloku programu sprawdzać czy upłynęło już wystarczająco dużo czasu by go zakończyć, taki ping pong między dwoma blokami, jednym załączasz by drugim niezależnym wyłączyć.
Przykład:
Kod:const uint8_t led=4,przycisk=3;
const uint32_t czasDolewania=3000;
bool stanLania;
enum etapy{oczekiwanie,podlewanie};
void setup() {
// put your setup code here, to run once:
pinMode(led,OUTPUT);
pinMode(przycisk,INPUT_PULLUP);
Serial.begin(115200);
}
void loop() {
// put your main code here, to run repeatedly:
static uint32_t aktCzas=0,startPracy=0;
delay(1);
aktCzas++;//zliczanie ilosci loop, czyli zatrzyman na 1 ms
if(digitalRead(przycisk)==0)
{
startPracy=aktCzas; //zapis czasu wystartowania
stanLania=1; // ustawienie, że praca jest aktywna
digitalWrite(led,1);
}
if(stanLania)
{
if((aktCzas-startPracy)>czasDolewania) //minelo czasDolewania ms
{
digitalWrite(led,0);
stanLania=0;
}
}
if(aktCzas%1000 == 0)
{
Serial.print(aktCzas); Serial.print(" "); Serial.print(startPracy); Serial.print(" "); Serial.print(aktCzas-startPracy); Serial.print(" "); Serial.print(stanLania); Serial.println(" ");
}
}
https://www.arduino.cc/reference/en/libr...tdebounce/
albo maly delay (100) i juz spokoj w garnku
To sa drobnostki o ktorych sie przewaznie zapomina
@ TO te przekazniki nie sa przewidziane dla 230V nie maja na plytce wyciec miedzy kontaktami i sterowaniem
Znaczy przekazik jest dla 230V plytka nie.
Mam moduły przekaznikowe z optoizolacją służą mi ok 5 lat i takie same zastosuje do tego sterownika jeżeli taki powstanie