• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Prośba o pomoc w napisaniu programu
#11
Spróbuj napisać cokolwiek wg podanej receptury, wrzuć tutaj, napisz co nie działa to będziemy dalej nad tym pracować.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#12
(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.
 
Odpowiedź
#13
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
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);}
     
     
}
[/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
 
Odpowiedź
#14
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
 
Odpowiedź
#15
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(" ");
}

}
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#16
(28-10-2023, 09:11)Old Fony napisał(a):
(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(" ");
}

}
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)
 https://www.arduino.cc/reference/en/libr...tdebounce/
albo maly delay (100) i juz spokoj w garnku Wink
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.
 
Odpowiedź
#17
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.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#18
Ludzie jak Wy to ogarniacie? Smile.Kaczakat wpisałem to co podesłałeś i działa jest super  Big Grin tylko co dalej .... Huh
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 Confused
 
Odpowiedź
#19
(28-10-2023, 09:26)Old Fony napisał(a):
(28-10-2023, 09:11)Old Fony napisał(a):
(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(" ");
}

}
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)
 https://www.arduino.cc/reference/en/libr...tdebounce/
albo maly delay (100) i juz spokoj w garnku Wink
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.
 
Odpowiedź
#20
(28-10-2023, 15:01)gintur napisał(a):
(28-10-2023, 09:26)Old Fony napisał(a):
(28-10-2023, 09:11)Old Fony napisał(a):
(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(" ");
}

}
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)
 https://www.arduino.cc/reference/en/libr...tdebounce/
albo maly delay (100) i juz spokoj w garnku Wink
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.
To był pierwszy lepszy przykład z sieci .O jakich dokładnie wycięciach piszesz?

Mam moduły przekaznikowe z optoizolacją służą mi ok 5 lat i takie same zastosuje do tego sterownika jeżeli taki powstanie Smile
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości