Odczyt z dwóch lub więcej czujników DS18B20:
Poniżej przedstawię jeden z wielu sposobów na programową obsługę dwóch lub więcej czujników. Ten sposób jest dobry do prostych zastosowań, natomiast jeżeli chcemy sprecyzować odczyty tzn. jeżeli mam parę czujników podłączonych na sztywno do różnych urządzeń to musimy wtedy posługiwać się adresami czujników, aby dany odczyt był przypisany do danego urządzenia
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
#include <OneWire.h> //dodaj biblitekę LiquidCrystal.h #include <DallasTemperature.h> //dodaj biblitekę LiquidCrystal.h #include <LiquidCrystal.h> //dodaj biblitekę LiquidCrystal.h int one_wire = 10; //Transmisja 1-Wire na pinie 10 int buzzer = 12; //pin 12 jako buzzer LiquidCrystal lcd(3,4,5,6,7,8,9); //konfiguracja pinów dla LCD OneWire oneWire(one_wire); //wywołujemy transmisję 1-Wire na pinie 10 DallasTemperature sensors(&oneWire); //informujemy Arduino, ze przy pomocy 1-Wire //chcemy komunikowac sie z czujnikiem byte znak_stopnia[8] = { //tworzymy znak stopnia 0b00100, 0b01010, 0b10001, 0b01010, 0b00100, 0b00000, 0b00000, 0b00000 }; void setup(void) { lcd.createChar(0, znak_stopnia); //utworz znak stopnia pinMode(buzzer,OUTPUT); //ustawiamy buzzer jako output sensors.begin(); //rozpocznij odczyt z czujnika lcd.begin(20,4); //ustaw rozdzielczość ekranu 20x4 lcd.clear(); //wyczysc ekran } void loop(void) { sensors.requestTemperatures(); //zazadaj odczyt temperatury z czujnika lcd.clear(); //wyczysc ekran lcd.setCursor(0,0); //ustaw kursor w pozycji 0,0 lcd.print("Temp0: "); //wyswietl "Temperatura: " lcd.print(sensors.getTempCByIndex(0)); //wyswietl wartosc z czujnika 0 lcd.print((char)0); //wyswietl znak stopnia lcd.print("C"); lcd.setCursor(0,1); //ustaw kursor w pozycji 0,0 lcd.print("Temp1: "); //wyswietl "Temperatura: " lcd.print(sensors.getTempCByIndex(1)); //wyswietl wartosc z czujnika 1 lcd.print((char)0); //wyswietl znak stopnia lcd.print("C"); delay(50); //odczekaj 50ms } |
W tym przypadku mogłoby się wydawać, że odczyty z czujników będą przypadkowe tzn. w tym momencie jest dobrze, ale po ponownym uruchomieniu Arduino wartości zamienią się miejscami. W tym momencie mogę powiedzieć, że wyświetlanie temperatur nie jest przypadkowe. Jeżeli spróbujemy np. na uruchomionym Arduino pozamieniać miejscami wpięte czujniki(nie logiczne pod względem elektronicznym), spróbować najpierw wpiąć czujnik 2. a potem 1. to wartości i tak będą się wyświetlać w tej samej kolejności jak na początku, ponieważ jak wcześniej wspominałem funkcja wyświetlająca odczyty z danych czujników jak i sama biblioteka kieruje się ich adresami.
Po wgraniu programu otrzymujemy następujący efekt:

Materiały do dzisiejszego kursu:
Jeżeli chcesz być informowany na bieżąco o nowych częściach kursu to kliknij „Lubię to!” bądź subskrybuj naszą stronę, aby otrzymywać na adres e-mail nowości ze strony. Jeżeli masz jakieś pytania to śmiało zadawaj je na forum ; )
