// Trabalho 2 MIcrocontroladores - Victor Filgueiras Santana //
#include <Wire.h>
#include <LiquidCrystal.h>
const int buttonPin = 2;
const int greenLedPin = 9;
const int redLedPin = 10;
const int buzzerPin = 13;
const float BETA = 3950;
int buttonState = 0;
bool isCelsius = true;
LiquidCrystal lcd(12,11,7,6,5,4);
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT);
pinMode(greenLedPin, OUTPUT);
pinMode(redLedPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
lcd.begin(16, 2);
lcd.print("Temp: ");
}
void loop() {
buttonState = digitalRead(buttonPin);
float tempCelsius = readTemperature();
float tempFahrenheit = isCelsius ? celsiusToFahrenheit(tempCelsius) : tempCelsius;
Serial.print("Temperatura: ");
Serial.print(tempCelsius);
Serial.print(" Celsius, ");
Serial.print(tempFahrenheit);
Serial.println(" Fahrenheit");
lcd.setCursor(7, 0);
lcd.print(tempCelsius);
lcd.print(" C");
updateLEDsAndAlarm(tempCelsius);
delay(1000);
}
float readTemperature() {
int analogValue = analogRead(A0);
float tempCelsius = 1 / (log(1 / (1023. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
return tempCelsius;
}
float celsiusToFahrenheit(float celsius) {
return celsius * 9 / 5 + 32;
}
void updateLEDsAndAlarm(float temperature) {
if (temperature <= 30) {
digitalWrite(greenLedPin, HIGH);
} else {
digitalWrite(greenLedPin, LOW);
}
if (temperature > 35) {
digitalWrite(redLedPin, HIGH);
activateAlarm();
} else {
digitalWrite(redLedPin, LOW);
noTone(buzzerPin);
}
}
void activateAlarm() {
tone(buzzerPin, 1000);
}