Bom Princípio - RS
Offline
Full Member
Karma: 0
Posts: 243
SOFTWARE DEVELOPER, HACKER, RASPBERRY/ARDUINO/QT ENTHUSIAST & METALLICA FAN
|
 |
« on: November 07, 2011, 01:16:17 pm » |
Preciso de ajuda, criei o código abaixo que reconhece as teclas e a LCD Shield em si, preciso fazer que as teclas naveguem entre menu, e quando apertar selcionar ele entre no menu e consiga ligar e desligar um relé. Por Favor me ajudem, quando eu entro na VOID SALA01() por exemplo tem q aparecer uma tela escrita Relé: HIGH dai se a pessoa aperta pra baixo, ou pra cima aparece Relé: LOW e se apertar enter ele volta pro menu inicial com a variável definida, se você deixou selecionado HIGH ele fica HIGH... Estou a procura de algum dispositivo remoto também, para acionar ao invés das teclas da LCD, eu havia tentado usar um Infra Vermelho, mas não achei aqui na minha cidade pra comprar o receptor... Se alguém tiver uma idéia... Outra coisa, tem como salvar no arduino a posição dos relés mesmo q eu desligue ele? =========================================================== #include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //use a pinagem de seu arduino int up; int down; int nothing; int right; int left; int enter; int sel; int x; int y; void setup() { lcd.begin(16, 2); sel = 1; x = 0; y = 0; up = 0; down = 0; right = 0; left = 0; enter = 0; nothing = 0;
}
void loop(){
int tecla_valor = analogRead(0); if (tecla_valor == 1023){ up = 0; down = 0; right = 0; left = 0; enter = 0; nothing = 1; } if (tecla_valor == 0) { right = 1; } if ((tecla_valor >= 120) & (tecla_valor <= 146)) { up = 1; } if ((tecla_valor >= 300) & (tecla_valor <= 350)) { down = 1; } if ((tecla_valor >= 500) & (tecla_valor <= 530)) { left = 1; } if ((tecla_valor >= 700) & (tecla_valor <= 790)) { enter = 1; } delay(250);
if (right == 1){ sel++; } if (left == 1){ sel--; }
if (sel<=1){ sel=1; lcd.clear(); lcd.setCursor(0,0); lcd.print("Setor:"); lcd.setCursor(0,1); lcd.print(" Sala01 >> "); if (enter == 1){ sala01(); } } if (sel==2){ lcd.clear(); lcd.setCursor(0,0); lcd.print("Setor:"); lcd.setCursor(0,1); lcd.print(" << Sala02 >> "); if (enter == 1){ sala02(); } } if (sel==3){
lcd.clear(); lcd.setCursor(0,0); lcd.print("Setor:"); lcd.setCursor(0,1); lcd.print(" << Sala03 "); if (enter == 1){ sala03(); } } }
void sala01(){ lcd.clear(); lcd.print("Sala ON"); delay(3000); loop; } void sala02(){ lcd.clear(); lcd.print("Sala ON"); delay(3000); loop; } void sala03(){ lcd.clear(); lcd.print("Sala ON"); delay(3000); loop; } =========================================================
|
|
|
|
« Last Edit: November 10, 2011, 11:42:10 am by BOEIRA »
|
Logged
|
My Toys: Raspberry Pi (Model B)Arduino MEGA 1280: ( Shield LCD 16x2, Ethernet, RFID ) Freescale Kinetis KL25Z ATtiny85 Dell XPS L502X (Corei5 3GHz|6GB DDR3|1333MHz|GT525M-1GB|LED Screen 15.6 1920x1080 ) Apple iPod Touch 4G ------------------------------------- I'm Software Engineer at http://freaktags.com Know more at http://blog.marceloboeira.com/
|
|
|
|
Forum Moderator
São Paulo/SP/Brazil
Offline
Sr. Member
Karma: 2
Posts: 293
Brazilian Arduino Team
|
 |
« Reply #1 on: November 07, 2011, 01:17:43 pm » |
Amigo... seu código está muito difícil de ler. Por favor, edite seu post e utilize a tag "code"(é o ícone # acima) no seu código.
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
São Paulo/SP/Brazil
Offline
Sr. Member
Karma: 2
Posts: 293
Brazilian Arduino Team
|
 |
« Reply #2 on: November 08, 2011, 01:20:06 pm » |
Tem como gravar coisas persistentes no arduino sim, utilizando a library EEPROM. Por exemplo: #include <EEPROM.h>
byte relayState[1];
void setup() { relayState[0] = EEPROM.read(0); // Aqui você lê do endereço 0 da EEPROM e joga na variável relayState[0] }
void loop() { // Quando seu botão for apertado e você quiser gravar relayState[0] = 1; EEPROM.write(0, relayState[0]); }
http://www.arduino.cc/en/Reference/EEPROM
|
|
|
|
|
Logged
|
|
|
|
|
Bom Princípio - RS
Offline
Full Member
Karma: 0
Posts: 243
SOFTWARE DEVELOPER, HACKER, RASPBERRY/ARDUINO/QT ENTHUSIAST & METALLICA FAN
|
 |
« Reply #3 on: November 08, 2011, 01:37:56 pm » |
quero saber a questão das saidas digitais, como faço pra ligar elas,... e também como salvo as configurações só quando quiser, tipo acho q da pra fazer uma entrada no menu Salvar Configs, e outra Limpar Configs ambas com voids separadas....
vou tentar...
|
|
|
|
|
Logged
|
My Toys: Raspberry Pi (Model B)Arduino MEGA 1280: ( Shield LCD 16x2, Ethernet, RFID ) Freescale Kinetis KL25Z ATtiny85 Dell XPS L502X (Corei5 3GHz|6GB DDR3|1333MHz|GT525M-1GB|LED Screen 15.6 1920x1080 ) Apple iPod Touch 4G ------------------------------------- I'm Software Engineer at http://freaktags.com Know more at http://blog.marceloboeira.com/
|
|
|
|
Forum Moderator
São Paulo/SP/Brazil
Offline
Sr. Member
Karma: 2
Posts: 293
Brazilian Arduino Team
|
 |
« Reply #4 on: November 08, 2011, 01:42:59 pm » |
Não sei se entendi direito o que vc quer dizer com ligar saídas digitais. Se for o que eu entendi, simplesmente coloque um pinMode(2, OUTPUT) no setup() e depois digitalWrite(2, HIGH) ou LOW para liga-la ou desliga-la. A porta 2 do seu arduino vai ser uma porta de saída que vai ligar e desligar apenas.
o salvar e limpar é simples também. faça uma função que vai salvar todas suas variáveis globais(as que são definidas fora de qualquer função) para o EEPROM. Você só vai precisar tomar cuidado com os endereços delas(recomendo utilizar um #define para cada variável com o endereço onde ela vai ser gravada).
|
|
|
|
|
Logged
|
|
|
|
|
Bom Princípio - RS
Offline
Full Member
Karma: 0
Posts: 243
SOFTWARE DEVELOPER, HACKER, RASPBERRY/ARDUINO/QT ENTHUSIAST & METALLICA FAN
|
 |
« Reply #5 on: November 08, 2011, 01:43:39 pm » |
tipo tem um menu que você seleciona no meu programa que entra na void, tipo void sala_01, sala_02... dai se eu apertar para os lados ele tem q trocar HIGH/LOW da entrada do relé, depois q eu selecionei ele deve ativar um temporizador e esperar 3s e voltar para o inicial...
mais ou menos assim... void_sala(){
lcd.printf("Lampada:"); lcd.printf(estado_rele); if (tecla_cima==1){ if (estado_rele==1){ estado_rele=0; } if (estado_rele==0){ estado_rele=0; } } if (tecla_baixo==1){ if (estado_rele==1){ estado_rele=0; } if (estado_rele==0){ estado_rele=0; } } if (estado_rele==1){
digitalWrite(RELE,HIGH); } if (estado_rele==0){
digitalWrite(RELE,LOW); }
|
|
|
|
« Last Edit: November 08, 2011, 01:52:36 pm by BOEIRA »
|
Logged
|
My Toys: Raspberry Pi (Model B)Arduino MEGA 1280: ( Shield LCD 16x2, Ethernet, RFID ) Freescale Kinetis KL25Z ATtiny85 Dell XPS L502X (Corei5 3GHz|6GB DDR3|1333MHz|GT525M-1GB|LED Screen 15.6 1920x1080 ) Apple iPod Touch 4G ------------------------------------- I'm Software Engineer at http://freaktags.com Know more at http://blog.marceloboeira.com/
|
|
|
|
Bom Princípio - RS
Offline
Full Member
Karma: 0
Posts: 243
SOFTWARE DEVELOPER, HACKER, RASPBERRY/ARDUINO/QT ENTHUSIAST & METALLICA FAN
|
 |
« Reply #6 on: November 10, 2011, 11:41:11 am » |
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //pinagem LCD no Arduino Mega
int up; int down; int nothing; int right; int left; int enter;
int sel; int x; int y; int tecla_valor;
boolean rele_sala01; boolean rele_sala02; boolean rele_sala03; void setup() { lcd.begin(16, 2); sel = 1; x = 0; y = 0; up = 0; down = 0; right = 0; left = 0; enter = 0; nothing = 0; rele_sala01=0; rele_sala02=0; rele_sala03=0;
pinMode(31, OUTPUT); pinMode(32, OUTPUT); pinMode(33, OUTPUT);
lcd.print(" DHM 0.2 BETA"); delay(3000); lcd.clear(); lcd.print("Desenvolvido por"); lcd.setCursor(0,1); lcd.print(" Marcelo Boeira"); delay(3000); }
void loop(){
int tecla_valor = analogRead(0); if (tecla_valor == 1023){ up = 0; down = 0; right = 0; left = 0; enter = 0; nothing = 1; } if (tecla_valor == 0) { right = 1; } if ((tecla_valor >= 120) & (tecla_valor <= 146)) { up = 1; } if ((tecla_valor >= 300) & (tecla_valor <= 350)) { down = 1; } if ((tecla_valor >= 500) & (tecla_valor <= 530)) { left = 1; } if ((tecla_valor >= 700) & (tecla_valor <= 790)) { enter = 1; } delay(250); if (right == 1){ sel++; } if (left == 1){ sel--; }
if (sel <= 0){ sel=1; }
if (sel<=1){ lcd.clear(); lcd.setCursor(0,0); lcd.print(" Sala01 >> "); lcd.setCursor(0,1); lcd.print("Estado:"); if (rele_sala01==1) lcd.print("Ligado"); else lcd.print("Desligado"); if (enter == 1){ rele_sala01 = !rele_sala01; delay(100); } } if (sel==2){ lcd.clear(); lcd.setCursor(0,0); lcd.print(" << Sala02 >> "); lcd.setCursor(0,1); lcd.print("Estado:"); if (rele_sala02==1) lcd.print("Ligado"); else lcd.print("Desligado"); if (enter == 1){ rele_sala02 = !rele_sala02; delay(100); } }
if (sel==3){ lcd.clear(); lcd.setCursor(0,0); lcd.print(" << Sala03 "); lcd.setCursor(0,1); lcd.print("Estado:"); if (rele_sala03==1) lcd.print("Ligado"); else lcd.print("Desligado"); if (enter == 1){ rele_sala03 = !rele_sala03; delay(100); } }
if (rele_sala01==1){ digitalWrite(31, HIGH); } if (rele_sala01==0){ digitalWrite(31, LOW); } if (rele_sala02==1){ digitalWrite(32, HIGH); } if (rele_sala02==0){ digitalWrite(32, LOW); } if (rele_sala03==1){ digitalWrite(33, HIGH); } if (rele_sala03==0){ digitalWrite(33, LOW); } }
|
|
|
|
|
Logged
|
My Toys: Raspberry Pi (Model B)Arduino MEGA 1280: ( Shield LCD 16x2, Ethernet, RFID ) Freescale Kinetis KL25Z ATtiny85 Dell XPS L502X (Corei5 3GHz|6GB DDR3|1333MHz|GT525M-1GB|LED Screen 15.6 1920x1080 ) Apple iPod Touch 4G ------------------------------------- I'm Software Engineer at http://freaktags.com Know more at http://blog.marceloboeira.com/
|
|
|
|
Brasilia
Offline
Newbie
Karma: 0
Posts: 29
Arduino rocks
|
 |
« Reply #7 on: November 10, 2011, 03:55:25 pm » |
Olha seu codigo está muito confuso realmente, acho que você está usando coisa d+ para pouco assunto. Uma parte que posso te ajudar, são algumas funções que vc pode adaptar e economizar codigo. Para receber pela serial: // Recebe sinal serial do Modulo-02 Bluetooth e Rede para controle dos Canais if (entradaSerial.available()) { Serial.print((char)entradaSerial.read()); } if (entradaSerial.available()) { recepSerial =(char)entradaSerial.read(); switch (recepSerial) { case '1': Serial.println(); Serial.print(recepSerial); alteraEstado(canal1); break; } }
FunÇão do Controle Remoto (Você encontra esse receptor em qualquer eletronica, so pedir para TV CCE ou Sony) // Função que recebe um valor do Controle de IR if (irrecv.decode(&results)) { switch(results.value) { case 16728765: CANAL=canal1; op=16728765; imprimeSerial(1); break; case 16761405: CANAL=canal2; op=16761405; break; case 16773135: CANAL=canal3; op=16773135; break; case 16742535: CANAL=canal4; op=16742535; break; case 16716015: if(tempo!=0) { tempo=0; }else { tempo=1; } op=16716015; break; default: op=0; break; } if(results.value==op) { alteraEstado(CANAL); } irrecv.resume(); // Receive the next value
Função que muda o estado de uma pino/canal void alteraEstado(int canal) { // Recebe qual canal será alterado CANAL=canal; if(digitalRead(CANAL)==LOW) { digitalWrite(CANAL,HIGH); }else { digitalWrite(CANAL,LOW); } }
|
|
|
|
|
Logged
|
|
|
|
|
Bom Princípio - RS
Offline
Full Member
Karma: 0
Posts: 243
SOFTWARE DEVELOPER, HACKER, RASPBERRY/ARDUINO/QT ENTHUSIAST & METALLICA FAN
|
 |
« Reply #8 on: November 18, 2011, 04:28:02 pm » |
/* ########################################## ########### Projeto DHM v0.4 ############# #### Beta RLS000100(Versão Funcional) #### #### Desenvolvido Por Marcelo Boeira #### #### Baseado nas Licenças GLP #### #### OpenSource Livre de Cópias #### #### Nгo Retire os Créditos #### #### Mais Info: mboeira.blogspot.com #### ########################################## ########################################## ######## Status do Projeto: ############ #### Acionamento Por Bluetooth: 0% #### #### Acionamento Por InfraVermelho:0% #### #### Acionamento Por Radio: 100% #### #### Leitura Digital das Teclas: 100% #### #### Menus LCD Shield: 100% #### #### Controle de Relés: 100% #### ########################################## */ #include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //pinagem LCD no Arduino Mega int up; int down; int nothing; int right; int left; int enter; int sel; int x; int y; int tecla_valor; boolean rele_sala01; boolean rele_sala02; boolean rele_sala03; boolean rele_sala04; boolean rele_sala05; boolean rele_sala06;
void setup() { lcd.begin(16, 2); sel = 1; x = 0; y = 0; up = 0; down = 0; right = 0; left = 0; enter = 0; nothing = 0; rele_sala01=0; rele_sala02=0; rele_sala03=0; rele_sala04=0; rele_sala05=0; rele_sala06=0; pinMode(22, INPUT); pinMode(23, INPUT); pinMode(31, OUTPUT); pinMode(32, OUTPUT); pinMode(33, OUTPUT); pinMode(34, OUTPUT); pinMode(35, OUTPUT); pinMode(36, OUTPUT); //~Inicia Apresentação do Projeto lcd.print(" DHM 0.4 BETA"); delay(3000); lcd.clear(); lcd.print("Desenvolvido por"); lcd.setCursor(0,1); lcd.print(" Marcelo Boeira"); delay(3000); } void loop(){ int tecla_valor = analogRead(0); if (tecla_valor == 1023){ up = 0; down = 0; right = 0; left = 0; enter = 0; nothing = 1; } enter = digitalRead(23); right = digitalRead(22);
if (tecla_valor == 0){ right = 1; } if ((tecla_valor >= 120) & (tecla_valor <= 146)){ up = 1; } if ((tecla_valor >= 300) & (tecla_valor <= 350)){ down = 1; } if ((tecla_valor >= 500) & (tecla_valor <= 530)){ left = 1; } if ((tecla_valor >= 700) & (tecla_valor <= 790)) { enter = 1; } delay(250); if (right == 1){ sel++; } if (left == 1){ sel--; } if (sel <= 0){ sel=1; } if (sel==7){ sel=1; } if (sel<=1){ lcd.clear(); lcd.setCursor(0,0); lcd.print(" Sala01 >> "); lcd.setCursor(0,1); lcd.print("Estado:"); if (rele_sala01==1) lcd.print("Ligado"); else lcd.print("Desligado"); if (enter == 1){ rele_sala01 = !rele_sala01; delay(100); } } if (sel==2){ lcd.clear(); lcd.setCursor(0,0); lcd.print(" Sala02 >> "); lcd.setCursor(0,1); lcd.print("Estado:"); if (rele_sala02==1) lcd.print("Ligado"); else lcd.print("Desligado"); if (enter == 1){ rele_sala02 = !rele_sala02; delay(100); } } if (sel==3){ lcd.clear(); lcd.setCursor(0,0); lcd.print(" Sala03 >> "); lcd.setCursor(0,1); lcd.print("Estado:"); if (rele_sala03==1) lcd.print("Ligado"); else lcd.print("Desligado"); if (enter == 1){ rele_sala03 = !rele_sala03; delay(100); } } if (sel==4){ lcd.clear(); lcd.setCursor(0,0); lcd.print(" Sala04 >> "); lcd.setCursor(0,1); lcd.print("Estado:"); if (rele_sala04==1) lcd.print("Ligado"); else lcd.print("Desligado"); if (enter == 1){ rele_sala04 = !rele_sala04; delay(100); } } if (sel==5){ lcd.clear(); lcd.setCursor(0,0); lcd.print(" Sala05 >> "); lcd.setCursor(0,1); lcd.print("Estado:"); if (rele_sala05==1) lcd.print("Ligado"); else lcd.print("Desligado"); if (enter == 1){ rele_sala05 = !rele_sala05; delay(100); } }
if (sel==6){ lcd.clear(); lcd.setCursor(0,0); lcd.print(" Sala06 >> "); lcd.setCursor(0,1); lcd.print("Estado:"); if (rele_sala06==1) lcd.print("Ligado"); else lcd.print("Desligado"); if (enter == 1){ rele_sala06 = !rele_sala06; delay(100); } } if (rele_sala01==1){ digitalWrite(31, HIGH); } if (rele_sala01==0){ digitalWrite(31, LOW); } if (rele_sala02==1){ digitalWrite(32, HIGH); } if (rele_sala02==0){ digitalWrite(32, LOW); } if (rele_sala03==1){ digitalWrite(33, HIGH); } if (rele_sala03==0){ digitalWrite(33, LOW); } if (rele_sala04==1){ digitalWrite(34, HIGH); } if (rele_sala04==0){ digitalWrite(34, LOW); } if (rele_sala05==1){ digitalWrite(35, HIGH); } if (rele_sala05==0){ digitalWrite(35, LOW); } if (rele_sala06==1){ digitalWrite(36, HIGH); } if (rele_sala06==0){ digitalWrite(36, LOW); } }
|
|
|
|
|
Logged
|
My Toys: Raspberry Pi (Model B)Arduino MEGA 1280: ( Shield LCD 16x2, Ethernet, RFID ) Freescale Kinetis KL25Z ATtiny85 Dell XPS L502X (Corei5 3GHz|6GB DDR3|1333MHz|GT525M-1GB|LED Screen 15.6 1920x1080 ) Apple iPod Touch 4G ------------------------------------- I'm Software Engineer at http://freaktags.com Know more at http://blog.marceloboeira.com/
|
|
|
|
|