Lab_interaccio/2012/Edgard/Vdossier01/controller_manager.ino

495 lines
15 KiB
Arduino
Raw Permalink Normal View History

2025-02-25 21:29:42 +01:00
void circularList_incrementBy(byte *value, byte minimun, byte maximun, byte incrementBy) {
if (*value+incrementBy > maximun) *value = minimun;
else *value = *value+incrementBy;
}
// decrement the value of a variable using minimun and maximun limits
void circularList_decrementBy(byte *value, byte minimun, byte maximun, byte decrementBy) {
if ((*value < minimun) || (*value < decrementBy)) *value = maximun;
else *value = *value-decrementBy;
}
// increment the value of a variable using minimun and maximun limits
void circularList_incrementBy(unsigned int *value, unsigned int minimun, unsigned int maximun, byte incrementBy) {
if (*value+incrementBy > maximun) *value = minimun;
else *value = *value+incrementBy;
}
// decrement the value of a variable using minimun and maximun limits
void circularList_decrementBy(unsigned int *value, unsigned int minimun, unsigned int maximun, byte decrementBy) {
if ((*value < minimun) || (*value < decrementBy)) *value = maximun;
else *value = *value-decrementBy;
}
void circularList_incrementBy_ASCII(char *value) {
if (*value >= 122) *value = 32;
else if (*value <= 32) *value = 48;
else if (*value == 57) *value = 65;
else if (*value == 90) *value = 97;
else *value = *value + 1;
}
void circularList_decrementBy_ASCII(char *value) {
if (*value <= 32) *value = 122;
else if (*value <= 48) *value = 32;
else if (*value == 65) *value = 57;
else if (*value == 97) *value = 90;
else *value = *value - 1;
}
//Pantalla principal.
void controller_run(){
lcd.clear();
do{ keyboard_scan();
lcd.setCursor(0, 0);
level_bat(batmin,batmax);
lcd.setCursor(0, 1);
lcd.print("TC: ");
int temp = hours;
if (temp<10) lcd.print("0");
lcd.print(temp);
lcd.print(":");
temp = minutes;
if (temp<10) lcd.print("0");
lcd.print(temp);
lcd.print(":");
temp = seconds;
if (temp<10) lcd.print("0");
lcd.print(temp);
lcd.print(":");
temp = frame;
if (temp<10) lcd.print("0");
lcd.print(temp);
if(lastKey==KEY_C) backlight_toggle();
} while ((lastKey==NO_KEY)||(lastKey==KEY_C));
controller_showMainMenu();
}
// Menu principal
void controller_showMainMenu(){
byte currentOption = 0;
for(boolean exit = false;!exit;){
display_printTitle(MSG_MAIN_MENU);
if(currentOption==0) display_printEnumeration(0, MSG_SYSTEM_CONFIG);
if(currentOption==1) display_printEnumeration(1, MSG_GRAB_VIDEO);
if(currentOption==2) display_printEnumeration(2, MSG_CAPT_FOTO);
keyboard_waitForAnyKey();
if(lastKey==KEY_A) circularList_decrementBy(&currentOption, 0, 2, 1);
if(lastKey==KEY_B) circularList_incrementBy(&currentOption, 0, 2, 1);
if(lastKey==KEY_C) exit = true;
if(lastKey==KEY_D) {
if(currentOption==0) controller_showSystemConfig();
if(currentOption==1); //controller_showIntervalMenu();
if(currentOption==2); //controller_showAudioTriggerMenu();
}
}
}
// Menu de Configuracion
void controller_showSystemConfig(){
byte currentOption = 0;
for(boolean exit = false;!exit;){
display_printTitle(MSG_SYSTEM_CONFIG);
// Show menu option
if (currentOption==0) { lcd.print(MSG_BACKLIGHT); display_printBoolean(system_useBacklight); }
if (currentOption==1) { lcd.print(MSG_SPEAKER); display_printBoolean(system_useSpeaker); }
if (currentOption==2) { lcd.print(MSG_CFG_VIDEO); }
if (currentOption==3) { lcd.print(MSG_CFG_NETWORK); }
if (currentOption==4) { lcd.print(MSG_VERSION); }
keyboard_waitForAnyKey();
if(lastKey==KEY_A) circularList_decrementBy(&currentOption, 0, 4, 1);
if(lastKey==KEY_B) circularList_incrementBy(&currentOption, 0, 4, 1);
if(lastKey==KEY_C) { config_saveBackup_system(); exit = true; }
if(lastKey==KEY_D) {
if(currentOption==0) backlight_toggle();
if(currentOption==1) system_useSpeaker = !system_useSpeaker;
if(currentOption==2) controller_videoConfig();
if(currentOption==3) controller_cfg_network();
if(currentOption==4) ver_version();
}
}
}
//Seleccion de modelo de Camara
void controller_videoConfig(){
byte currentOption = 0;
unsigned int address_model;
for(boolean exit = false;!exit;){
display_printTitle(MSG_CFG_VIDEO);
// Show menu option
if (currentOption==system_models)
{
lcd.print(MSG_NEW_MODEL);
address_model = EEI2C_ADDR_MODELS + 80*currentOption;
}
else if(currentOption < system_models){
address_model = EEI2C_ADDR_MODELS + 80*currentOption;
display_model_EEPROM(address_model);
}
else if(currentOption==system_models + 1) lcd.print("Borrar modelo");
keyboard_waitForAnyKey();
if(lastKey==KEY_A) circularList_decrementBy(&currentOption, 0, system_models + 1, 1);
if(lastKey==KEY_B) circularList_incrementBy(&currentOption, 0, system_models + 1, 1);
if(lastKey==KEY_C) { /*config_saveBackup_system()*/; exit = true; }
if(lastKey==KEY_D) {
if (currentOption < system_models)controller_videoModel(address_model);
if (currentOption == system_models) {clear_model(address_model); system_models = system_models + 1; controller_videoModel(address_model);}
if (currentOption == system_models + 1) {remove_model(); currentOption=0;};
}
}
}
//Control de los diferentes modelos (Editar, borrar, etc)
void controller_videoModel(long int address_model){
byte currentOption = 0;
unsigned int temp_address;
boolean print_ir = false;
for(boolean exit = false;!exit;){
lcd.clear();
// Show menu option
if (currentOption==0) { print_ir = false; display_printTitle(MSG_MODEL); display_model_EEPROM(address_model);}
if (currentOption==1) {
display_printTitle("Stop remote");
temp_address = address_model+16;
if (print_ir == false)
{
remotestop = display_printEEPROM(temp_address);
}
else
{
saveEEPROM(results.value,temp_address);
remotestop = display_printEEPROM(temp_address);
print_ir = false;
}
}
if (currentOption==2) {
display_printTitle("Rec remote");
temp_address = address_model+32;
if (print_ir == false)
{
remoterec=display_printEEPROM(temp_address);
}
else
{
saveEEPROM(results.value,temp_address);
remoterec=display_printEEPROM(temp_address);
print_ir = false;
}
}
if (currentOption==3) {
print_ir = false;
display_printTitle("Stop lanc");
temp_address = address_model+48;
lancstop = display_printEEPROM(temp_address);
}
if (currentOption==4) {
print_ir = false;
display_printTitle("Rec lanc");
temp_address = address_model+64;
lancrec = display_printEEPROM(temp_address);
}
keyboard_IR(&print_ir);
if(lastKey==KEY_A) circularList_decrementBy(&currentOption, 0, 4, 1);
if(lastKey==KEY_B) circularList_incrementBy(&currentOption, 0, 4, 1);
if(lastKey==KEY_C) {exit = true; config_saveBackup_system();}
if(lastKey==KEY_D) {
if(currentOption==0) edit_name(address_model);
if(currentOption==1) irsend.sendNEC(remotestop, 32);
if(currentOption==2) irsend.sendNEC(remoterec, 32);
if(currentOption==3) edit_code(temp_address);
if(currentOption==4) edit_code(temp_address);
irrecv.enableIRIn();
}
}
}
void remove_model(){
byte currentOption = 0;
unsigned int address_model;
for(boolean exit = false;!exit;){
display_printTitle("Borrar modelo");
if(currentOption < system_models){
address_model = EEI2C_ADDR_MODELS + 80*currentOption;
display_model_EEPROM(address_model);
}
keyboard_waitForAnyKey();
if(lastKey==KEY_A) circularList_decrementBy(&currentOption, 0, system_models-1, 1);
if(lastKey==KEY_B) circularList_incrementBy(&currentOption, 0, system_models-1, 1);
if(lastKey==KEY_C) exit = true;
if(lastKey==KEY_D) {erase_model(currentOption); currentOption--;};
}
}
void edit_name(long int address_model){
byte pos=0;
char currentOption = readEEPROM(eeprom, address_model+pos);
for(boolean exit = false;!exit;){
writeEEPROM(eeprom, address_model + pos, currentOption);
display_printTitle(MSG_EDIT_NAME);
display_model_EEPROM(address_model);
keyboard_waitForAnyKey();
if(lastKey==KEY_A) circularList_decrementBy_ASCII(&currentOption);
if(lastKey==KEY_B) circularList_incrementBy_ASCII(&currentOption);
if(lastKey==KEY_C) {exit = true;}
if(lastKey==KEY_D) {pos=pos+1; currentOption=readEEPROM(eeprom, address_model+pos);}
}
}
void edit_code(long int address_model){
byte pos=0;
byte currentOption = readEEPROM(eeprom, address_model);
for(boolean exit = false;!exit;){
if (pos < 2) writeEEPROM(eeprom, address_model + pos, currentOption);
writeEEPROM(eeprom, address_model + 2, 0x0D);
//writeEEPROM(eeprom, address_model, currentOption);
display_printTitle(MSG_EDIT_LANC);
display_printEEPROM(address_model);
//lcd.print(currentOption,HEX);
keyboard_waitForAnyKey();
if(lastKey==KEY_A) circularList_incrementBy(&currentOption, 0, 255, 1);
if(lastKey==KEY_B) circularList_decrementBy(&currentOption, 0, 255, 1);
if(lastKey==KEY_C) {exit = true;}
if(lastKey==KEY_D) {pos=pos+1; currentOption = readEEPROM(eeprom, address_model + pos);if(pos>=2) { lanc.print(readEEPROM(eeprom, address_model),HEX); lanc.println(readEEPROM(eeprom, address_model+1),HEX);}}
}
}
void edit_pass(){
byte pos=0;
char currentOption = pass[pos];
for(boolean exit = false;!exit;){
pass[pos]=currentOption;
display_printTitle(MSG_EDIT_NAME);
lcd.print(pass);
keyboard_waitForAnyKey();
if(lastKey==KEY_A) circularList_decrementBy_ASCII(&currentOption);
if(lastKey==KEY_B) circularList_incrementBy_ASCII(&currentOption);
if(lastKey==KEY_C) {pass[pos+1]='\x00'; exit = true;}
if(lastKey==KEY_D) {pos=pos+1; currentOption=pass[pos];}
}
}
void edit_id(){
byte pos=0;
for(boolean exit = false;!exit;){
//writeEEPROM(eeprom, address_model, currentOption);
display_printTitle(MSG_EDIT_ID);
lcd.print(id,HEX);
keyboard_waitForAnyKey();
if(lastKey==KEY_A) circularList_incrementBy(&id, 0, 255, 1);
if(lastKey==KEY_B) circularList_decrementBy(&id, 0, 255, 1);
if(lastKey==KEY_C) {exit = true;}
}
}
//Visualizacion de la version del sistema operativo
void ver_version(){
display_vdossier();
for(boolean exit = false;!exit;){
keyboard_waitForAnyKey();
if(lastKey==KEY_C) { exit = true; }
}
}
//Menu de Red
void controller_cfg_network(){
byte currentOption = 0;
for(boolean exit = false;!exit;){
display_printTitle(MSG_CFG_NETWORK);
// Show menu option
if (currentOption==0) { lcd.print(MSG_ID);}
if (currentOption==1) { lcd.print(MSG_IP);}
if (currentOption==2) { lcd.print(MSG_NETWORK);}
if (currentOption==3) { lcd.print(MSG_NEW_NETWORK);}
if (currentOption==4) { lcd.print(MSG_BAUDRATE); }
keyboard_waitForAnyKey();
if(lastKey==KEY_A) circularList_decrementBy(&currentOption, 0, 4, 1);
if(lastKey==KEY_B) circularList_incrementBy(&currentOption, 0, 4, 1);
if(lastKey==KEY_C) { config_saveBackup_system(); exit = true; }
if(lastKey==KEY_D) {
if(currentOption==0) controller_id();
if(currentOption==1) controller_ip();
if(currentOption==2) controller_network();
if(currentOption==3) controller_new_network();
if(currentOption==4) controller_baudrate();
}
}
}
void controller_id(){
for(boolean exit = false;!exit;){
display_printTitle(MSG_ID);
lcd.print(id, HEX);
keyboard_waitForAnyKey();
if(lastKey==KEY_C) { exit = true; }
if(lastKey==KEY_D) edit_id();
}
}
void controller_ip(){
for(boolean exit = false;!exit;){
display_printTitle(MSG_IP);
lcd.print(udp.ip());
keyboard_waitForAnyKey();
if(lastKey==KEY_C) { exit = true; }
}
}
void controller_baudrate(){
byte currentOption = 0;
while (currentOption<4)
{
if (baudrate==vel[currentOption]) break;
else currentOption++;
}
for(boolean exit = false;!exit;){
display_printTitle(MSG_BAUDRATE);
lcd.print(vel[currentOption]);
keyboard_waitForAnyKey();
if(lastKey==KEY_A) circularList_decrementBy(&currentOption, 0, 3, 1);
if(lastKey==KEY_B) circularList_incrementBy(&currentOption, 0, 3, 1);
if(lastKey==KEY_C) { exit = true; }
if(lastKey==KEY_D)
{
long baudrate_temp=vel[currentOption];
if (udp.baudrate(baudrate_temp))
{
baudrate=baudrate_temp;
Serial.begin(baudrate);
lcd.clear();
lcd.print("vel. cambiada");
delay(2000);
}
else
{
lcd.clear();
lcd.print("Error cambiando");
delay(2000);
}
}
}
}
void controller_network(){
byte currentOption = 0;
for(boolean exit = false;!exit;){
display_printTitle(MSG_NETWORK);
// Show menu option
if (currentOption==0) { lcd.print("Ssid");}
if (currentOption==1) { lcd.print("Passphrase");}
if (currentOption==2) { lcd.print("Reconectar");}
keyboard_waitForAnyKey();
if(lastKey==KEY_A) circularList_decrementBy(&currentOption, 0, 2, 1);
if(lastKey==KEY_B) circularList_incrementBy(&currentOption, 0, 2, 1);
if(lastKey==KEY_C) { exit = true; }
if(lastKey==KEY_D) {
if(currentOption==0) controller_ssid();
if(currentOption==1) controller_pass();
if(currentOption==2) display_WiFlyConnecting(&baudrate);
}
}
}
void controller_ssid(){
for(boolean exit = false;!exit;){
display_printTitle("Ssid");
lcd.print(ssid);
keyboard_waitForAnyKey();
if(lastKey==KEY_C) exit = true;
}
}
void controller_pass(){
for(boolean exit = false;!exit;){
display_printTitle("Passphrase");
lcd.print(pass);
keyboard_waitForAnyKey();
if(lastKey==KEY_C) exit = true;
if(lastKey==KEY_D) edit_pass();
}
}
void controller_new_network(){
byte currentOption = 0;
network_results networks;
display_printTitle(MSG_NEW_NETWORK);
lcd.print("Buscando...");
byte nets = udp.scan(&networks);
if (nets == 0)
{
display_printTitle(MSG_NEW_NETWORK);
lcd.print("Sin redes");
for(boolean exit = false;!exit;){
keyboard_waitForAnyKey();
if(lastKey==KEY_C) { exit = true; }
}
}
else
{
for(boolean exit = false;!exit;){
display_printTitle(MSG_NEW_NETWORK);
lcd.print(currentOption);
lcd.print(".");
lcd.print(networks.ssid[currentOption]);
keyboard_waitForAnyKey();
if(lastKey==KEY_A) if (nets>1) circularList_decrementBy(&currentOption, 0, nets-1, 1);
if(lastKey==KEY_B) if (nets>1) circularList_incrementBy(&currentOption, 0, nets-1, 1);
if(lastKey==KEY_C) { /*config_saveBackup_system()*/; exit = true; }
if(lastKey==KEY_D) { ssid = networks.ssid[currentOption]; for (int i=0; i<=32; i++) pass[i]=' '; pass[33]='\x00'; edit_pass();}
}
}
}