Arduino Polska Forum

Pełna wersja: Wskaźnik spadku i wzrostu napięcia na arduino
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2 3
Witam,

 jestem nowy na forum i zielony w programowaniu Arduino, chciał bym wykonać wskaźnik spadku i wzrostu napięcia, informacja wyświetlana by była na wyświetlaczu takim standardowym do arduino Wyglądało by to tak. Po lewej stronie wyświetlacza napis spadek a po prawej wzrost i w momencie spadku napiecia pod napisem spadek pojawiał by się X lub kwadracik. Mam nadzieje że ktoś pomoże. Całość podłączona by była do wyjścia urządzenia  na którym utrzymuje  sie npiecie  2,5V i na pewne  reakcje spada  do 2,3v lub wzrasta do 2.8v.



pozdrawiam
Tu masz kod który co 1 s mierzy wejście analogRead(A0) jeżeli poprzedni wynik był mniejszy po prawej zaświeci się "SPADEK" jeżeli większy po lewej "WZROST" jak będzie taki sam tylko pomiar .Czego ci nie napisałem ? przelicznika napięcia , musisz się pobawić sam jako zadanie domowe Wink

użyj najprostszego sposobu np. "int z = map(analogRead(A0) , 0, 1023 , 0, 5 );" dla logiki 5v lub "int z = map(analogRead(A0) , 0, 1023 , 0, 3.3 ); "
dodam że musisz podstawić właściwą linijkę w odpowiednie miejsce i zamienić 1 wpis na "z"


Kod:
#include <LiquidCrystal.h>

float x = 0;
float y = 0;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {

lcd.begin(16, 2);

x = analogRead(A0);
y = analogRead(A0);

}

void loop() {
  
if ( y > x ){
lcd.setCursor(0,0);
lcd.print("WZROST");
lcd.setCursor(10,0);
lcd.print("      ");}

else if( y < x ){
lcd.setCursor(10,0);
lcd.print("SPADEK");
lcd.setCursor(0,0);
lcd.print("      ");}

else if( y == x ){
lcd.setCursor(10,0);
lcd.print("      ");
lcd.setCursor(0,0);
lcd.print("      ");}

y = analogRead(A0);

delay(1000); // opóźnienie kolejnego odczytu

x = analogRead(A0);

lcd.setCursor(6,1);
lcd.print(analogRead(A0));
lcd.print("    ");
  
}
Dzięki za pomoc w tym temacie Smile ale z programowania nic nie umiem, wiem gdzie co  podłączyć do arduino i znam wejscia wyjscia itp. i to tyle. Na wyświetlacz muszę poczekać bo dopiero zamówiłem wiec w tym tyg powinien być. Wracając do kodu, rozumiem że wartość odczytana przez wejście analogowe A0 jest odczytywana w bitach? a przelicznik to np 5:1024*liczba w bitach odczytana? i daje wtedy liczbe w voltach, ale gdzie to mam podstawić i jak zapisać hmm, szczerze nie wiem... jak byś mógł mi napisać ten kod w całości i wytłumaczyć kod po kodzie od początku.
Kod:
#include <LiquidCrystal.h>   // deklaracja użycia biblioteki wyświetlacza alfanumerycznego

float x = 0; // deklaracja zmiennej x ( zadeklarowana w tym miejscu jest widoczna dla całego programu )
float y = 0; // j.w.

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // ustawienie pinów wyświetlacza

void setup() { // ustawienia początkowe wykonywane tylko raz przy starcie programu

lcd.begin(16, 2); // zainicjowanie wyświetlacza ( ilość kolumn , ilość wierszy )

x = analogRead(A0); // przypisanie zmiennej x wartości odczytanej z portu analogowego A0
y = analogRead(A0); // j.w.

}

void loop() { // pętla główna program wykonywany w kółko

if ( y > x ){ // zależność " jeśli (jeżeli) "
lcd.setCursor(0,0); // ostaw kursor w kolumnie 0 , lini 0
lcd.print("WZROST"); // wyświetl " to co w cudzysłowiu cokolwiek wpisane "
lcd.setCursor(10,0); // ostaw kursor w kolumnie 10 , lini 0
lcd.print("      ");} // wyświetl " jak niema nic wyświetli tyle pustych miejsc ile jest w kodzie "

else if( y < x ){
lcd.setCursor(10,0);
lcd.print("SPADEK");
lcd.setCursor(0,0);
lcd.print("      ");}

else if( y == x ){
lcd.setCursor(10,0);
lcd.print("      ");
lcd.setCursor(0,0);
lcd.print("      ");}

y = analogRead(A0);

delay(1000); // opóźnienie kolejnego odczytu

x = analogRead(A0);

int z = map(analogRead(A0) , 0, 1023 , 0, 5 ); // zadeklaruj zmienną "z" widziana ylko w pętli głównej
   // tu dobrze napisałeś ;)

lcd.setCursor(6,1);
lcd.print(z); // wyświetl wartość zmiennej "z" ponieważ nie ma cudzysłowia jest to wartość a nie znaki ascii
lcd.print("    ");

}
Dzięki wielkie za ten kod, teraz już wiem co się z czym je mniejwięcej:-) I to jest już wszystko aby ten wskaźnik działał??
Czyli jeśli arduino dostanie na pinie A0 2.5 v cały czas się bedzie utrzymywać to wtedy nie będzie się wyświetlać na wyświetlaczu nic? a jeśli napięcie spadnie z 2,5V pojawi się napis spadek? i odwrotnie na wzrost
mniej więcej tak to działa Wink
A gdzie w kodzie jest to 2,5 V? ktore jest na wejsciu A0 podawane cały czas przez urzadzenie to sa te zmienne X Y?
i tu mnie złapałeś to działa różnicowo niezależnie jakie napięcie jest nastawione tutaj masz dedykowane na 2,5v

Kod:
#include <LiquidCrystal.h>   // deklaracja użycia biblioteki wyświetlacza alfanumerycznego

float y = 0; // deklaracja zmiennej x ( zadeklarowana w tym miejscu jest widoczna dla całego programu )

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // ustawienie pinów wyświetlacza

void setup() { // ustawienia początkowe wykonywane tylko raz przy starcie programu

lcd.begin(16, 2); // zainicjowanie wyświetlacza ( ilość kolumn , ilość wierszy )

y = map(analogRead(A0) , 0, 1023 , 0, 5 ); // przypisanie zmiennej y wartości odczytanej z portu analogowego A0
}

void loop() { // pętla główna program wykonywany w kółko

if ( y > 2.5 ){ // zależność " jeśli (jeżeli) "
lcd.setCursor(0,0); // ostaw kursor w kolumnie 0 , lini 0
lcd.print("WZROST"); // wyświetl " to co w cudzysłowiu cokolwiek wpisane "
lcd.setCursor(10,0); // ostaw kursor w kolumnie 10 , lini 0
lcd.print("      ");} // wyświetl " jak niema nic wyświetli tyle pustych miejsc ile jest w kodzie "

else if( y < 2.5 ){
lcd.setCursor(10,0);
lcd.print("SPADEK");
lcd.setCursor(0,0);
lcd.print("      ");}

else if( y == 2.5 ){
lcd.setCursor(10,0);
lcd.print("      ");
lcd.setCursor(0,0);
lcd.print("      ");}

y = map(analogRead(A0) , 0, 1023 , 0, 5 );

int z = map(analogRead(A0) , 0, 1023 , 0, 5 ); // zadeklaruj zmienną "z" widziana tylko w pętli głównej
   // tu dobrze napisałeś ;)

lcd.setCursor(6,1);
lcd.print(z); // wyświetl wartość zmiennej "z" ponieważ nie ma cudzysłowia jest to wartość a nie znaki ascii
lcd.print("    ");

delay(1000); // opóźnienie kolejnego odczytu

}
Dzięki za ten kod, jak przyjdzie mi wyświetlacz to podłącze to wszystko i wgram kod, dam znać czy działa, to masz duże piwo za to Smile Będę chciał jeszcze jedną rzecz która by się wyświetlała na tym wyświetlaczu razem z tym wskaźnikiem. Ale to już jak ogarnę ten wskaźnik.


pozdrawiam
Kod nie działa... na wyświetlaczu świeci się tylko napis spadek cały czas, i w drugiej linijce raz jest 1 potem 2 i zero i tak zmienia sie co jakis czas. Ogolnie to chciałem aby spadek i wzrost był cały czas na wyswietlaczu  wyswietlany a jedynie pod tymi napisami zapalały by sie np. X
Stron: 1 2 3