Skocz do zawartości
Maks22

System wyrownywania poziomu wody w akwarium

Pomocna odpowiedź

Napisano (edytowany)

Witam.

Jestem tutaj nowy a to moj pierwszy post.

Buduje urzadzenie do automatycznego wyrownywania poziomiu wody w akwarium. Wykorzystuje do tego:

- Czujnik poziomu cieczy  RKI-2350

-Arduino MEGA 2560

-Przekaznik do zalaczania pompki

O ile polaczenie elektryczne nie jest dla mnie problemem to potrzebuje pomocy z kodem.

Na minimalnym poziomie wody uruchamia sie pompka na pinie 11 jednak wylacza sie tuz po chwili jak poziom wody wzrasta ponad minimum.

 

Tutaj jest moj kod:

void setup(){
  Serial.begin(9600);
  pinMode(11, OUTPUT);
}
void loop(){

  int sensor=analogRead(A1);
Serial.println(sensor);

   if(digitalRead (A1) == 200<630){
  digitalWrite(11, HIGH);
}  
else{
  digitalWrite(11, LOW);
  }
}

Moze mi ktos powiedziec, co mam tu zmienic?

Z gory dziekuje 😉

Edytowano przez Maks22

Udostępnij ten post


Link to post
Share on other sites

@Maks22 witam na forum 🙂

12 godzin temu, Maks22 napisał:

Na minimalnym poziomie wody uruchamia sie pompka na pinie 11 jednak wylacza sie tuz po chwili jak poziom wody wzrasta ponad minimum.

A jak chciałbyś, aby działało?

Co miał robić poniższy fragment kodu? Z góry podpowiem, że na pewno nie robi tego co miał robić, bo taka konstrukcja jest niepoprawna. Napisz co chciałeś uzyskać to naprowadzimy na rozwiązanie:

if(digitalRead (A1) == 200<630){

 

Udostępnij ten post


Link to post
Share on other sites

@Treker przecież to normalny sposób zapisywania "true", nie wiem o co chodzi.

@Maks22 najpierw odczytujesz analogowo stan pinu i go wysyłasz na serial a potem odczytujesz go cyfrowo? Dlaczego?

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
29 minut temu, Chumanista napisał:

przecież to normalny sposób zapisywania "true"

Powiedzmy nie "normalny", ale całkiem prawidłowy 🙂

 

Udostępnij ten post


Link to post
Share on other sites
void setup(){
  Serial.begin(9600);
  pinMode(11, OUTPUT);
}
void loop(){

int sensor=analogRead(A1);        //dotad byla definicja wszystkiego
Serial.println(sensor);       

   if(analogRead(A1) <200){       //jesli poziom wody spadl do 200
  digitalWrite(11, HIGH);         //wlacz pompke na 10 sek.
     delay(10000);               
}  
else{
  digitalWrite(11, LOW);         //a jesli poziom nie spadl lub pompka dopompowala wody to nie rob nic
  }
}

ja bym napisal to w ten sposob

a tak poza tym, to po co ci do tego Arduino Mega 2560, Attiny jest 100 razy tańsze a też wystarczy, a tak masz niewykorzystany potencjał potwora jakim jest ardu mega 

Chyba że chcesz dorobić coś jeszcze?

Chętnie obejrzymy...  😉

Udostępnij ten post


Link to post
Share on other sites
1 minutę temu, macizet napisał:

ja bym napisal to w ten sposob

A to niedobrze byś napisał.

Po co dwa razy czytasz A1, raz żeby wyświetlić a drugi raz aby użyć w programie?

Czemu jakiś delay a nie uczciwa histereza? Dlaczego 10 sekund?

 

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

@ethanak A co ci przeszkadza delay? Ostatecznie to całkiem możliwy sposób, natomiast histereza... nie mogę nie przyznać ci racji bo w sumie mogłem tak zrobić. Jakoś tak nie wpadłem na to.

Wersja poprawiona kodu:

void setup(){
  Serial.begin(9600);
  pinMode(11, OUTPUT);
}
void loop(){

int sensor=analogRead(A1);        //dotad byla definicja wszystkiego     

  if(sensor <= 200 - 50){             //jesli poziom wody spadl o 50 lub wiecej ponizej 200
  digitalWrite(11, HIGH);         //wlacz pompke do czasu az poziom wzrośnie do 200
     Serial.println(sensor);      //wyswietl na serial monitorze (chociaz w sumie nie wiem po co to co chwile wyswietlac)           
}  
else{
  digitalWrite(11, LOW);          //a jesli poziom nie spadl lub pompka dopompowala wody to nie rob nic
  }
}

Może być? Kompilacja przebiegła pomyślnie.

Edytowano przez macizet

Udostępnij ten post


Link to post
Share on other sites
13 minut temu, macizet napisał:

//wlacz pompke do czasu az poziom wzrośnie do 200

Nic takiego w tym kodzie nie widzę.

14 minut temu, macizet napisał:

Kompilacja przebiegła pomyślnie.

Kompilacja pierwowzoru też przebiegła pomyślnie, co nie znaczy że ów pierwowzór ma jakikolwiek sens.

Zdanie "Ciotkę parowozu przetaczaj po sznyclach" też jest poprawne składniowo, prawda?

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

po prostu z każdym obiegiem pętli będzie to sprawdzane, jeśli poziom będzie powyżej 200 to zostanie wykonane polecenie else, czyli nic nie zostanie wykonane.

Chyba że chcemy coś dodać jeszcze, to wtedy należałoby zmienić tę strukturę.

Czy jestem w błędzie?

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

@macizet

Edytowano przez Chumanista
tagowanie psuje posta w wersji mobilnej

Udostępnij ten post


Link to post
Share on other sites

@Chumanista Jest błąd "tagowanie psuje posta w wersji mobilnej"

Udostępnij ten post


Link to post
Share on other sites

@Treker nie da się już usuwać swoich postów?  Also: z tagowaniem w wersji mobilnej jest coś poważnie nie tak.

@macizet a gdzie sprawdzasz czy przekroczyło 200?

Udostępnij ten post


Link to post
Share on other sites
33 minuty temu, macizet napisał:

jeśli poziom będzie powyżej 200 to zostanie wykonane polecenie else

Po pierwsze: nic takiego w Twoim kodzie nie ma.

Po drugie: jeśli poziom wzrośnie powyżej 200 to coś się jednak ma stać. Wiesz co?

Czy w ogóle rozumiesz słowo "histereza"?

 

Udostępnij ten post


Link to post
Share on other sites

Zacznijmy inaczej. Czy ten program nie będzie działać?

Udostępnij ten post


Link to post
Share on other sites

Będzie. Ten z pierwszego posta też będzie.

Oba będą działać źle (Twój lepiej, ale nie całkiem dobrze).

Zacznijmy jeszcze inaczej: pokazujesz początkującemu użytkownikowi kod, informując go że coś tam robi (w tym przypadku, że powyżej 200 pompka jest wyłączona). Pokaż dokładnie miejsce w kodzie, gdzie jest to sprawdzane.

Bo faktycznie, powyżej 200 pompka jest wyłączona. Powyżej 175 też. A nawet powyżej 1020.

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...