Program C i Arduino. Pomoc.
: poniedziałek 20 mar 2017, 09:44
Witam. Zaczynam zabawę z Arduino i językiem C. Jestem w trakcie pisania prostego programu do pomiaru temperatury ogniw z alarmem. Jak się okazuję nie do końca taki prosty. Posiadam płytkę Arduino UNO. Dwa czujniki ds18d20 LCD 16x2 I2C i buzzer pasywny KY-006 z którym mam najwięcej kłopotów. Założenie jest takie. Temperatury wyświetlają się na LCD, i to jest ok. Przy 50stC załącza się buzer i tylko robi cichutkie "pi' i dalej cisza pomimo tego że temperatura jest po wyżej 50c. Temperatura spada po niżej 50st. znowu robi cichutkie "pi". Czemu buzzer pika po cichu i krótko ? Najfajniej żeby grała jakaś melodyjka przy tym alarmie. Rozdzielczość czujnika też nie działa i pokazuję co 0,5 stopnia. Po niżej kod którego używam.. Z góry dziękuję.
KOD Programu
KOD Programu
Kod: Zaznacz cały
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define TEMPERATURE_PRECISION 12 // rozdzielczość czujnika
#define ONE_WIRE_BUS 2 //Linia danych podpięta jest pod pin 2 Ardiuno
OneWire oneWire(ONE_WIRE_BUS);
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Ustawienie adresu układu na 0x27
DallasTemperature sensors(&oneWire); //Przekazanie danych dotyczących One Wire do DallasTemperature
int buzzer = 10; //pin 12 jako buzzer
void setup(void)
{
pinMode(buzzer,OUTPUT); //ustawiamy buzzer jako output
lcd.begin(16,2); //ustaw rozdzielczość ekranu 16x4
lcd.backlight(); // Załączenie podświetlenia
//Serial.begin(9600);
sensors.begin(); //Włączenie biblioteki
}
void loop(void)
{
sensors.requestTemperatures(); //zażądaj odczyt temperatury z czujnika
lcd.setCursor(0,0); //ustaw kursor w pozycji 0,0
lcd.print("Temp1 :"); //wyświetl "Temperatura: "
lcd.setCursor(10,0);
lcd.print(sensors.getTempCByIndex(0)); //wyświetl wartość z czujnika 0
lcd.setCursor(0,1);
lcd.print("Temp2 :");
lcd.setCursor(10,1);
lcd.print(sensors.getTempCByIndex(1));
delay(1000);
if(sensors.getTempCByIndex(0) >= 50) //jeżeli temperatura jest >= 30
digitalWrite(buzzer, HIGH); //uruchom alarm
else //w przeciwnym wypadku
digitalWrite(buzzer, LOW); //nie uruchamiaj alarmu
}