Termometr na DS18B20 - 4szt i więcej

Masz problem z Arduino? Tutaj możesz szukać pomocy.
ODPOWIEDZ
simek357
Młodszy majsterkowicz
Posty: 5
Rejestracja: 14 gru 2013, 11:52

Termometr na DS18B20 - 4szt i więcej

Post autor: simek357 » 15 gru 2013, 11:37

Witam wszystkich majsterkowiczów! Jest mój pierwszy "projekt" oraz program więc proszę o wyrozumiałość.
Projekt realizuję przez usbasp z ATMEGA8 i LCD 2x16.

Na razie działa z dwoma czujnikami DS18B20, ale chciałbym dodać kolejne lecz nie potrafię dodać obsługi przycisku który by pokazywał kolejne odczyty z czujników na wyświetlaczu.

Kod: Zaznacz cały

#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>
#define ONE_WIRE_BUS 7

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
int button = 8;
long t0;
long t1;
long t2;
long t3;

void setup()
{
  lcd.begin(16, 2);
  sensors.begin();
  pinMode(8, INPUT_PULLUP);
}
  
void loop(){
  t0 = sensors.getTempCByIndex(0);
  t1 = sensors.getTempCByIndex(1);
  t2 = sensors.getTempCByIndex(2);
  t3 = sensors.getTempCByIndex(3);

  temp_0();
  temp_1();  
  temp_2();
  temp_3();  
};
  
  void temp_0() {
  sensors.requestTemperatures();
  lcd.setCursor(0, 0);
  lcd.print("Temp_In:  ");
  lcd.print(t0); 
  lcd.print(" *C");
  }
  
  void temp_1() {
  sensors.requestTemperatures();
  lcd.setCursor(0, 1);
  lcd.print("Temp_Out: ");
  lcd.print(t1);
  lcd.print(" *C");
  }

  void temp_2() {
  sensors.requestTemperatures();
  lcd.setCursor(0, 0);
  lcd.print("Temp_In:  ");
  lcd.print(t2); 
  lcd.print(" *C");
  }
  
  void temp_3() {
  sensors.requestTemperatures();
  lcd.setCursor(0, 1);
  lcd.print("Temp_Out: ");
  lcd.print(t3);
  lcd.print(" *C");
  }

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Awatar użytkownika
wojtekizk
Starszy majsterkowicz
Posty: 311
Rejestracja: 19 lis 2013, 10:54
Lokalizacja: Bydgoszcz

Re: Termometr na DS18B20 - 4szt i więcej

Post autor: wojtekizk » 15 gru 2013, 13:29

cześć... polecam lekturę tego:
http://tomczak.org.pl/index.php/dydakty ... cyfrowego/
Pozdrawiam
simek357
Młodszy majsterkowicz
Posty: 5
Rejestracja: 14 gru 2013, 11:52

Re: Termometr na DS18B20 - 4szt i więcej

Post autor: simek357 » 15 gru 2013, 14:24

Tutaj nie ma obsługi wyświetlacza LCD. Ponieważ wyświetlacz ma tylko dwa wiersze i wyświetli mi tylko temperaturę z dwóch pierwszych czujników. Dlatego chcę zaimplementować obsługę przycisku switch.
Awatar użytkownika
rafalzaq
Majsterkowicz
Posty: 180
Rejestracja: 2 maja 2013, 23:57

Re: Termometr na DS18B20 - 4szt i więcej

Post autor: rafalzaq » 15 gru 2013, 14:43

Możesz zrobić dodatkową zmienną, które będzie zwiększała swoją wartość przy każdym naciśnięciu przycisku. Do tego mały warunek, że jak zwiększy się wartość, a nowa wartość będzie równa 4 to ma przypisać 0 (bo masz 4 czujniki liczone od zera, więc wartości powinny być od 0 do 3). Później w pętli sprawdzasz jaką wartość ma ta zmienna i dla każdej z wartości wywołujesz funkcję temp z odpowiednim numerem. Jeszcze bym przeniósł samo pobranie temperatury do tych funkcji żeby niepotrzebnie nie zajmowało czasu. Przycisk i zwiększanie wartości zmiennej najlepiej zrobić na przerwaniu (tu doczytasz co i jak).
Awatar użytkownika
Maxik
Starszy majsterkowicz
Posty: 405
Rejestracja: 6 lip 2012, 18:27
Lokalizacja: Gdańsk
Kontakt:

Re: Termometr na DS18B20 - 4szt i więcej

Post autor: Maxik » 15 gru 2013, 15:32

Na wyświetlaczu 2x16 spokojnie zmieścisz 4 odczyty. Jeden to w porywach 6 znaków(zakres temperatur dla czujnika to od -55 do 125 st. C) licząc ze znakiem stopnia i "C": "xyz *C". W wierszu masz 16 znaków, więc zostają 4 na separację odczytów. Metoda setCursor której używasz przyjmuje dwa argumenty, pozycję X i pozycję Y, gdzie X to kolumny, a Y wiersze(numerowane od 0). Wystarczy, że jeden odczyt będzie w (0,0), drugi w (9,0), trzeci w (0,1), a czwarty w (9,1). Etykiety dla odczytów możesz zamontować obok wyświetlacza na kartce. To najprostsze rozwiązanie.
simek357
Młodszy majsterkowicz
Posty: 5
Rejestracja: 14 gru 2013, 11:52

Re: Termometr na DS18B20 - 4szt i więcej

Post autor: simek357 » 15 gru 2013, 15:52

rafalzaq pisze:Możesz zrobić dodatkową zmienną, które będzie zwiększała swoją wartość przy każdym naciśnięciu przycisku. Do tego mały warunek, że jak zwiększy się wartość, a nowa wartość będzie równa 4 to ma przypisać 0 (bo masz 4 czujniki liczone od zera, więc wartości powinny być od 0 do 3). Później w pętli sprawdzasz jaką wartość ma ta zmienna i dla każdej z wartości wywołujesz funkcję temp z odpowiednim numerem. Jeszcze bym przeniósł samo pobranie temperatury do tych funkcji żeby niepotrzebnie nie zajmowało czasu. Przycisk i zwiększanie wartości zmiennej najlepiej zrobić na przerwaniu (tu doczytasz co i jak).
Teoretycznie już wiem jak to powinno wyglądać, ale jak zapisać w programie już nie. Dzięki za naprowadzenie teraz tylko pozostaje nauka języka.
Maxik pisze:Na wyświetlaczu 2x16 spokojnie zmieścisz 4 odczyty. Jeden to w porywach 6 znaków(zakres temperatur dla czujnika to od -55 do 125 st. C) licząc ze znakiem stopnia i "C": "xyz *C". W wierszu masz 16 znaków, więc zostają 4 na separację odczytów. Metoda setCursor której używasz przyjmuje dwa argumenty, pozycję X i pozycję Y, gdzie X to kolumny, a Y wiersze(numerowane od 0). Wystarczy, że jeden odczyt będzie w (0,0), drugi w (9,0), trzeci w (0,1), a czwarty w (9,1). Etykiety dla odczytów możesz zamontować obok wyświetlacza na kartce. To najprostsze rozwiązanie.
Nie w tym sens, bo co jeśli będę chciał dołożyć jeszcze 4 szt ds18, a potem może jakieś inne czujniki?
ODPOWIEDZ

Strony partnerskie: