Skocz do zawartości

[arduino] Pomiar temp oraz wyświetlenie jej odczytu


tomekk93

Pomocna odpowiedź

Witam!

Programując natrafiłem na rzecz, która troszkę mnie szkoli, mianowicie tworzę program, który ma za zadanie odczytać wartości temperatury z czujnika LM35 po naciśnięciu "guzika", przesłać odczytane pomiary na monitor szeregowy oraz na moduł wyświetlacza 7-segmentowego LED. Jako, że uczę się tej sztuki, chce utrwalać nawet te protsze zagadnienia więc, dodałem 3 diody LED zieloną, żółtą oraz czerwoną, które po spełnieniu odpowiedniego warunku zapalają się (rola "pokaż niebezpieczeństwo").

1)Problem który wystąpił gdy połączyłem elementy wraz z modułami (RYS.1), pokazywał tylko jeden odczyt po czym zawieszał się zupełnie.

2a)Chcąc nanieść poprawki do z konfigurowanego układu, dla bezpieczeństwa odłączyłem przewód +5V (RYS.2), wystąpiło coś co mnie zaskoczyło i jest nie zrozumiałem w każdym calu, mianowicie układ zaczął działać tak jak tego oczekiwałem.

2b)Przy wyświetleniu pierwszej wartości kropki włączają się na wyświetlaczu 7-segmentowym (pełniąc role oddzielenia wartości całkowitej temperatury od wartości po przecinku), a w kolejnych już tego nie robi.

Problem rozwiązany, dzięki zmianie w kodzie:

disp.init(); //wyłączenie 7SEG

na:

disp.init(D4056A); //wyłączenie 7SEG

Tak dla innych początkujących. 🙂

3)To już ostatnia dla mnie zagwozdka, na monitorze szeregowym zanim podłączyłem 7-segmentowy wyświetlacz wyświetlało zgodnie z założeniem programu zdanie informujące jaka temperatura panuje w pokoju "temperatura w pokoju wynosi: x st. C". Teraz wyświetla się informacja następująca:

Dlaczego pojawia się druga linijka, chociaż w kodzie nigdzie nie ma odpowiedniej komendy by to robić?

kod:

#include "TM1637.h" // biblioteka dla sterownika

#define CLK 3 // Piny podłączyć CLK

#define DIO 2 // Piny podłączyć DIO

 

TM1637 disp(CLK,DIO);

int czujnik; //zmienna na wartosc z czujnika LM35

int tempPin = 1; //wyjscie analogowe A1 (zbieramy sygnał z srodkowej nogi czujnika)

 

void setup() {

 

disp.set(4); //Ustawienie jasności od 0 do 7

disp.init(D4056A);

 

Serial.begin(9600); //ustawienie pred transmisji danych a<>pc

pinMode(8, INPUT_PULLUP); //przycisk na pin8

 

pinMode(9, OUTPUT); //green

pinMode(10, OUTPUT); //yellow

pinMode(11, OUTPUT); //red

digitalWrite(9, LOW); //wyłączamy diody

digitalWrite(10, LOW);

digitalWrite(11, LOW);

}

 

void loop() {

if (digitalRead(8) == LOW) { //jesli przycisk wcisniety

czujnik = analogRead(tempPin);

float mV = ( czujnik/1024.0)*5000;

float celcjusz = mV/10;

 

//wypisanie info na monitorze szeregowym

Serial.print("temperatura pokoju wynosi: ");

Serial.print(celcjusz);

Serial.print(" st. C\n");

delay(200);

 

 

if (celcjusz <= 30) {

disp.display(celcjusz); //wyswietlenie na 7SEG odczytu

digitalWrite(9, HIGH); //LED zielona

digitalWrite(10, LOW);

digitalWrite(11, LOW);

delay(5000);

digitalWrite(9, LOW);

disp.init(); //wyłączenie 7SEG

}

else if (celcjusz >= 31, celcjusz <= 50) {

disp.display(celcjusz); //wyswietlenie na 7SEG odczytu

digitalWrite(9, LOW);

digitalWrite(10, HIGH); // LED żółta

digitalWrite(11, LOW);

delay(5000);

digitalWrite(10, LOW);

disp.init(); //wyłączenie 7SEG

}

else if (celcjusz >= 51) {

disp.display(celcjusz); //wyswietlenie na 7SEG odczytu

digitalWrite(9, LOW);

digitalWrite(10, LOW);

digitalWrite(11, HIGH); //LED czerwona

delay(5000);

digitalWrite(11, LOW);

disp.init(); //wyłączenie 7SEG

}

}

}

Dziękuję za wszelkie wskazówki oraz odpowiedzi! Pozdrawiam!

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.