Lab_interaccio/2012/Edgard/Vdossier03/devices_manager.ino

226 lines
5.7 KiB
Arduino
Raw Normal View History

2025-02-25 21:29:42 +01:00
void software_Reset() // Restarts program from beginning but does not reset the peripherals and registers
{
asm volatile (" jmp 0");
}
// Scans keyboard buttons
void keyboard_scan() {
unsigned long time = millis();
if (flagHoldKey) {
system_beep(100);
while(!digitalRead(bot[0]) || !digitalRead(bot[1]) || !digitalRead(bot[2]) || !digitalRead(bot[3])) {}
flagHoldKey = false;
lastKey = NO_KEY;
} else if (!digitalRead(bot[0])) {
while(!digitalRead(bot[0]) && (millis()-time) <= KEY_HOLD_TIME){
if (millis()-time >= KEY_DEBOUNCE_TIME) lastKey = KEY_A;
//if (millis()-time >= KEY_HOLD_TIME) { lastKey = KEY_AH; flagHoldKey = true; }
}
} else if (!digitalRead(bot[1])) {
while(!digitalRead(bot[1]) && (millis()-time) <= KEY_HOLD_TIME){
if (millis()-time >= KEY_DEBOUNCE_TIME) lastKey = KEY_B;
//if (millis()-time >= KEY_HOLD_TIME) { lastKey = KEY_BH; flagHoldKey = true; }
}
} else if (!digitalRead(bot[2])) {
while(!digitalRead(bot[2]) && (millis()-time) <= KEY_HOLD_TIME){
if (millis()-time >= KEY_DEBOUNCE_TIME) lastKey = KEY_C;
if (millis()-time >= KEY_HOLD_TIME) { lastKey = KEY_CH; flagHoldKey = true; }
}
} else if (!digitalRead(bot[3])) {
while(!digitalRead(bot[3]) && (millis()-time) <= KEY_HOLD_TIME){
if (millis()-time >= KEY_DEBOUNCE_TIME) lastKey = KEY_D;
//if (millis()-time >= KEY_HOLD_TIME) { lastKey = KEY_DH; flagHoldKey = true; }
}
} else {
flagHoldKey = false;
lastKey = NO_KEY;
}
}
// Waits until any key is pressed
void keyboard_waitForAnyKey(){
do{ keyboard_scan(); } while (lastKey==NO_KEY);
}
void keyboard_IR(boolean *print_ir){
do{ keyboard_scan();
if (irrecv.decode(&results)) { //recepcion IR
irrecv.resume(); // Receive the next value
*print_ir = true;
}
} while ((lastKey==NO_KEY)&&(!(*print_ir)));
}
unsigned long display_printEEPROM(unsigned int address){
unsigned long temp32 = 0;
temp32=copy_EEPROM(address);
lcd.print(temp32,HEX) ;
return(temp32);
}
void display_model_EEPROM(unsigned int address){
uint8_t temp=0;
int i=0;
temp = readEEPROM(eeprom, address + i);
while ((temp!=0x0D)&&(i<16)) {
lcd.print((char)temp) ;
i++;
temp = readEEPROM(eeprom, address + i);
}
}
void display_print_Model()
{
unsigned int address_model;
display_print(MSG_MODEL);
lcd.print(F(": "));
if (system_num_models>0)
{
address_model = EEI2C_ADDR_MODELS + 80*system_sel_model;
display_model_EEPROM(address_model);
}
else lcd.print(F(" Vacio"));
}
// Waits until no key is pressed
void keyboard_waitForNokey(){
do{ keyboard_scan(); } while (lastKey!=NO_KEY);
}
// Beeps buzzer a time in ms
void system_beep(int time){
if (system_useSpeaker){
digitalWrite(PINS_BUZZER,HIGH);
delay(time);
digitalWrite(PINS_BUZZER,LOW);
}
}
void level_bat(int batmin,int batmax){
unsigned int t_bat=0;
unsigned int num=10;
display_print(MSG_BATTERY); //MSG_BATTERY
for(int i=1; i<=num; i++) {delay(10); t_bat=t_bat+analogRead(bat);}
t_bat=t_bat/num;
int level=((float)(((float)t_bat-batmin)/(batmax-batmin))*100.0);
if (level<100) lcd.print("0");
else if (level<10) lcd.print("00");
lcd.print(level);
lcd.print("%");
}
// Toggle the backlight status (on/off)
void backlight_toggle(){
system_useBacklight = !system_useBacklight;
lcd.shiftWrite(LCD_L, !system_useBacklight);
}
void display_vdossier(){
lcd.clear();
display_print(MSG_VDOSSIER_V); //MSG_VDOSSIER_V
lcd.print(CODE_MAYOR_VERSION,DEC);
lcd.print(".");
lcd.print(CODE_MINOR_VERSION,DEC);
lcd.setCursor(0,1);
display_print(MSG_READY); //MSG_READY
}
void display_time(unsigned long time_temp)
{
int hours=(int)time_temp/3600;
int minutes = time_temp%3600;
int seconds = minutes%60;
minutes = (int)minutes/60;
if (hours<10) lcd.print("0");
lcd.print(hours);
lcd.print(":");
if (minutes<10) lcd.print("0");
lcd.print(minutes);
lcd.print(":");
if (seconds<10) lcd.print("0");
lcd.print(seconds);
}
void display_print(const prog_char* str) {
char c;
if (!str) return;
while ((c = pgm_read_byte(str))) {
lcd.print(c);
str++;
}
}
// prints screen title
void display_printTitle(const prog_char* str){
lcd.clear();
lcd.print(">");
display_print(str);
lcd.setCursor(0,1);
}
void display_printEnumeration(byte num, const prog_char* str){
lcd.print(num, 10);
lcd.print(".");
display_print(str);
}
// prints resetting message
void display_printResetting(){
lcd.clear();
display_print(MSG_RESETTING);//MSG_RESETTING
delay(500);
}
// prints a boolean value
void display_printBoolean(boolean value) {
lcd.print(" (");
if (value) display_print(MSG_YES); else display_print(MSG_NO); //MSG_YES y MSG_NO
lcd.print(")");
}
void display_WiFlyResetting(byte *baudrate){
lcd.clear();
display_print(MSG_RESETTING); //MSG_RESETTING/*0*/
if (udp.reset())
{
lcd.setCursor(0,1);
display_print(MSG_RESET); //MSG_RESET/*1*/
*baudrate = 0;
Serial.begin(vel[*baudrate]);
}
else
{
lcd.setCursor(0,1);
display_print(MSG_FAIL); //MSG_FAIL/*2*/
}
delay(2000);
}
void display_WiFlyConnecting(byte *baudrate){
lcd.clear();
display_print(MSG_CONNECTING); //MSG_CONNECTING/*3*/
lcd.setCursor(0,1);
display_print(MSG_BAUD); //MSG_BAUD/*4*/
lcd.print(vel[*baudrate]);
udp.begin(ssid, pass, ip_host, remote_Port, local_Port);
if (udp.join())
{
delay(2000);
lcd.clear();
display_print(MSG_CONNECT); //MSG_CONNECT/*5*/
lcd.setCursor(0,1);
lcd.print(udp.ip());
delay(2000);
}
else
{
lcd.clear();
display_print(MSG_FAIL_CONNECT); //MSG_FAIL_CONNECT/*6*/
delay(2000);
}
}