Jako, że idą święta to podam gotowe rozwiązanie ale...
aby nie było łatwo to dla takiego shieldu jak poniżej
Pod shieldem jest zwykły klon Arduino UNO.
Czujnik temperatury to: DS 18B20 Dallasa (program sam odczytuje adres czujnika).
Myślę, że z adaptacją do innych projektów nie będzie problemu.
Poniżej kod:
Powodzenia.
Zdrowych i Wesołych Świąt.
ANT
aby nie było łatwo to dla takiego shieldu jak poniżej
Pod shieldem jest zwykły klon Arduino UNO.
Czujnik temperatury to: DS 18B20 Dallasa (program sam odczytuje adres czujnika).
Myślę, że z adaptacją do innych projektów nie będzie problemu.
Poniżej kod:
Kod:
// Temperatura na wyświetlaczu LED.
#include <OneWire.h>
#include <DS18B20.h>
#include <TimerOne.h>
const byte ONEWIRE_PIN = A4;
int latchPin = 4;
int clockPin = 7;
int dataPin = 8;
char pos;
unsigned char Dis_table[] = {
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
unsigned char Dis_table1[] = {
0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10};
unsigned char Dis_buf[] = {
0xF1, 0xF2, 0xF4, 0xF8};
unsigned char disbuff[] = {
0, 0, 0, 0};
int SUM = 0;
float temperature;
byte address[8];
OneWire onewire (ONEWIRE_PIN);
DS18B20 sensors(&onewire);
void Przerwanie(void);
// ---------------------------- Ustawienia programu --------------------------------
void setup ()
{
Serial.begin (9600);
Timer1.initialize(5000); //Ustawienie przerwania co 0.005s
Timer1.attachInterrupt(Przerwanie); //Przyczepienie funkcji Przerwanie do timera1
pinMode (latchPin, OUTPUT);
pinMode (clockPin, OUTPUT);
pinMode (dataPin, OUTPUT);
digitalWrite (latchPin, LOW);
shiftOut (dataPin, clockPin, MSBFIRST, 0x00); // Znaki: 0x00 - 0xFF
shiftOut (dataPin, clockPin, MSBFIRST, 0x00); // Pozycje: 0xF1, 0xF2, 0xF4, 0xF8
digitalWrite (latchPin, HIGH);
sensors.begin();
sensors.request(address);
}
// ---------------------------- Pętla główna programu ------------------------------
void loop ()
{
// Odczyt numeru czujnika.
onewire.reset_search ();
onewire.search (address);
// Odczyt temperatury.
if (sensors.available())
{
temperature = (sensors.readTemperature(address) - 1);
Serial.print(temperature);
Serial.println("'C");
sensors.request(address);
temperature = temperature * 100;
SUM = int (temperature);
disbuff[0] = SUM / 1000;
disbuff[1] = SUM % 1000 / 100;
disbuff[2] = SUM % 100 / 10;
disbuff[3] = SUM % 10;
}
}
// -------------------------- Funkcja przerwań ----------------------------
void Przerwanie()
{
// Wyświetlenie temperatury na WYSW LED.
digitalWrite (latchPin, LOW);
if (pos == 1) shiftOut (dataPin, clockPin, MSBFIRST, Dis_table1[disbuff[pos]]);
else shiftOut (dataPin, clockPin, MSBFIRST, Dis_table[disbuff[pos]]);
shiftOut (dataPin, clockPin, MSBFIRST, Dis_buf[pos] );
digitalWrite (latchPin, HIGH);
pos ++;
if (pos > 3) pos = 0;
}
Powodzenia.
Zdrowych i Wesołych Świąt.
ANT
Jeżeli pomogłem, to poproszę o punkt reputacji