Buongiorno a tutti,
sto realizzando una sveglia. Ho un problema con una funzione che ho scritto che dovrebbe occuparsi di accendere la luce del display alla pressione di un tasto.
La prima esecuzione va bene (premo il tasto, si accende la luce) alla seconda pressione, dovrebbe spegnersi ma per qualche motivo, debuggando col serial monitor, vedo che non sta più girando nel main loop.
Ecco lo script.
La funzione che invoco è switchDisplayBackground
//Include library for LCD
#include <LiquidCrystal.h>
//ARDUINO PINS
//Specify LCD pins
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);
//snooze button pin
const int snoozeButtonPin = 6;
//pin in which connect the alarm set switch
const int alarmSwitchPin = 10;
//LCD background light pin
const int lcdBackgroundPin = 9;
//Alarm Buzzer pin
const int buzzerPin = 13;
//END OF ARDUINO PINS CONFIGURATION
int backGroundDisplayTimeOn;
String backgroundDisplayStatus = "off";
void setup() {
// for debug purposes activate serial monitor
Serial.begin (9600);
//set the LCD with 16 columns and 2 rows
lcd.begin (16,2);
// pin mode configuration
pinMode (snoozeButtonPin, INPUT);
pinMode (alarmSwitchPin, INPUT);
pinMode (lcdBackgroundPin, OUTPUT);
pinMode (buzzerPin, OUTPUT);
}
// CUSTOM FUNCTIONS //
//get current time
String getCurrentTime(){
return ("10:30");
}
//get the alarm time
String getAlarmTime(){
return ("10:33");
}
//check if the snoozeButton is pressed reading the port status
bool getSnoozeButtonStatus(){
if (digitalRead(snoozeButtonPin) == HIGH){
return true;
} else {
return false;
}
}
// get the status of the alarm switch
bool getAlarmSwitchStatus(){
if (digitalRead(alarmSwitchPin) == HIGH){
return true;
} else {
return false;
}
}
String switchDisplayBackground(String newStatus){
if (newStatus == "on"){
digitalWrite(lcdBackgroundPin, HIGH);
backgroundDisplayStatus = "on";
} else if (newStatus == "off"){
digitalWrite(lcdBackgroundPin, LOW);
backgroundDisplayStatus = "off";
}
}
// END OF CUSTOM FUNCTIONS //
void loop() {
// Print time and alarm set
lcd.display();
lcd.setCursor(0,0);
lcd.print(getCurrentTime());
lcd.setCursor(10,0);
lcd.print(getAlarmTime());
if (getAlarmSwitchStatus() == true){
lcd.setCursor(9,0);
lcd.print(">");
lcd.setCursor(15,0);
lcd.print("<");
}
// end of print time and alarm set
//if the snooze button is pressed, turn the LCD background on
if (getSnoozeButtonStatus() == true ){
if (backgroundDisplayStatus == "on"){
switchDisplayBackground("off");
}
if (backgroundDisplayStatus == "off"){
switchDisplayBackground("on");
}
}
Serial.println("looping");
delay(200);
lcd.clear();
}