dio123 Posted July 16, 2012 at 09:36 PM Report #468957 Posted July 16, 2012 at 09:36 PM Boa noite, Venho aqui pedir ajuda, porque pesco pouco de c++, e tou com uma dificuldade onde nao estou a ver o meu proprio erro, resumo: tenho um teclado e o lcd ligado ao arduino. O codigo que estou tentar fazer é para introduzir o codigo 4 digitos e depois detectar se está certo ou errado. Se estiver certo aparecer no ecra "acesso livre" se estiver errado dizer "errado", O que funciona: Eu coloco os codigo o programa detecta o codigo está certo ou errado. Se acerto aparece a mensagem "acertou" mas depois nao passa para a mensagem "acesso livre. O break; nao deveria sair do ciclo while e depois continuar a fazer o que está no void loop() ? desde já agradeço. #include int keypressed =0; int keyboardPin = 0; int keyboardValue = 0; String tmpPass = ""; String password = "2146"; int estado = 0; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { pinMode(9, OUTPUT); lcd.begin(16, 2); inicio(); } void loop(){ readkeyboard(); if (keypressed == 7 ){ senha(); } if (estado == 2){ lcd.clear(); lcd.println("acesso livre"); delay(7000); } } void senha(){ while (tmpPass == password); delay(300); int count = 0; int x = 0; while (count<4 ) { readkeyboard(); if (x == 0) { keypressed == 0 ; keyboardValue== 0; readkeyboard(); lcd.clear(); lcd.println("Introduza Senha"); lcd.setCursor(0, 1); tmpPass == "" ; x = 1; } readkeyboard(); if (keyboardValue > 25 ) { tmpPass += keypressed; lcd.print("*"); count++; delay(300); if (tmpPass == password && count == 4 ) { tmpPass == ""; lcd.clear(); lcd.println("acertou"); estado == 2; break; break; } if (tmpPass != password && count == 4 ) { lcd.clear(); lcd.println("Errado"); delay(1000); x=0; lcd.clear(); lcd.println(tmpPass); tmpPass = "" ; delay(2000); count == 0; lcd.clear(); lcd.println("Introduza Senha"); lcd.setCursor(0, 1); } } } } void inicio(){ lcd.clear(); lcd.print("ALARME V1.0"); delay(500); lcd.setCursor(0, 1); lcd.println("desactivo"); } void readkeyboard(){ keyboardValue =0; keypressed = 0; // read the value (0-1023) keyboardValue = analogRead(keyboardPin); // read the value (0-1023) if (keyboardValue <25){ } if ((keyboardValue >25) && (keyboardValue < 67)){ keypressed = 1; } if ((keyboardValue >67) && (keyboardValue < 108)){ keypressed = 2; } if ((keyboardValue >108) && (keyboardValue < 162)){ keypressed = 3; } if ((keyboardValue >162) && (keyboardValue < 253)){ keypressed = 4; } if ((keyboardValue >253) && (keyboardValue < 361)){ keypressed = 5; } if ((keyboardValue >361) && (keyboardValue < 479)){ keypressed = 6; } if ((keyboardValue >479) && (keyboardValue < 619)){ keypressed = 7; } if ((keyboardValue >619) && (keyboardValue < 765)){ keypressed = 8; } if ((keyboardValue >765) && (keyboardValue < 819)){ keypressed = 9; } if ((keyboardValue >819) && (keyboardValue < 889)){ keypressed = '*' ; } if ((keyboardValue >889) && (keyboardValue < 938)){ keypressed = '*'; } if (keyboardValue >938){ keypressed = 0; } delay(50); }
bubulindo Posted July 17, 2012 at 07:37 AM Report #468978 Posted July 17, 2012 at 07:37 AM Se tivesses um bocado mais de atenção com os "=" ou "==", percebias o que se passa... if (tmpPass == password && count == 4 ) { tmpPass == "";// <----------------------errado lcd.clear(); lcd.println("acertou"); estado == 2; //<--------------------------errado... break; break; } include <ai se te avio> Mãe () { }
dio123 Posted July 17, 2012 at 03:44 PM Author Report #469014 Posted July 17, 2012 at 03:44 PM (edited) muito obrigado. Sei que o codigo está um bocado feito hà "sapateiro", até porque aquilo que fazia com arduino era coisas muitos simples e safava-me bem, e nunca dei c# na minha vida. Actualmente este é o 1º grande projecto que estou a fazer com o arduino. 1 problema que tive foi a impossibilidade de usar 2 bibliotecas do arduino include password e include keypad. Isto porque o meu teclado está apenas ligado a vcc -gnd - porta analogica. Assim tornou-se mais complicado para mim de programar. A minha duvida agora é como faço para por o alarme ficar sempre activo até que escolha para desactivar. Eu Clico na tecla 9, ponho a senha, depois escolho activar alarme. O alarme fica activo. Mas depois se clicar no novamente no 9 pede senha mas o alarme fica logo desactivo. #include <LiquidCrystal.h> int keypressed =0; int keyboardPin = 0; int keyboardValue = 0; String tmpPass = ""; String password = "2146"; int estado = 0; String alarme = "" ; int e = 0; int ini = 1; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { pinMode(9, OUTPUT); lcd.begin(16, 2); inicio(); } void loop(){ readkeyboard(); if (keypressed == 7 && estado == 0 ){ senha(); } if (estado == 2){ if (ini == 1){ lcd.clear(); lcd.println("Alarme v-1.0"); ini = 2; } if (keypressed == 8 ){ delay(500); if (e == 2){ lcd.setCursor(0, 1); lcd.println("Desactivar"); alarme ="Desactivado"; e=1; } else { lcd.setCursor(0, 1); lcd.println("Activar "); alarme = "Activado"; e = 2; } } if (keypressed == 6 ){ // estado = 1; lcd.clear(); lcd.println("Alarme v-1.0.0"); lcd.setCursor(0,1); lcd.println(alarme); estado = 0; ini = 1; } } if (alarme == "Activado" && estado == 0){ digitalWrite(9, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(9, LOW); // turn the LED off by making the voltage LOW delay(1000); } } void senha(){ while (tmpPass == password); delay(300); int count = 0; int x = 0; while (count<4 ){ readkeyboard(); if (x == 0){ keypressed = 0 ; keyboardValue = 0; readkeyboard(); lcd.clear(); lcd.println("Introduza Senha"); lcd.setCursor(0, 1); tmpPass = "" ; x = 1; } readkeyboard(); if (keyboardValue > 25 ){ tmpPass += keypressed; lcd.print("*"); count++; delay(300); if (tmpPass == password && count == 4 ){ tmpPass = ""; lcd.clear(); lcd.println("Autorizado"); estado = 2; keyboardValue =0; keypressed = 0; delay(1000); break; break; } if (tmpPass != password && count == 4 ){ lcd.clear(); lcd.println("Inválida"); delay(1000); x=0; lcd.clear(); lcd.println(tmpPass); tmpPass = "" ; delay(2000); count = 0; lcd.clear(); lcd.println("Introduza Senha"); lcd.setCursor(0, 1); } } } } void inicio(){ lcd.clear(); lcd.print("ALARME V1.0"); delay(500); lcd.setCursor(0, 1); lcd.println("desactivo"); } void readkeyboard(){ keyboardValue =0; keypressed = 0; // read the value (0-1023) keyboardValue = analogRead(keyboardPin); // read the value (0-1023) if (keyboardValue <25){ } if ((keyboardValue >25) && (keyboardValue < 67)){ keypressed = 1; } if ((keyboardValue >67) && (keyboardValue < 108)){ keypressed = 2; } if ((keyboardValue >108) && (keyboardValue < 162)){ keypressed = 3; } if ((keyboardValue >162) && (keyboardValue < 253)){ keypressed = 4; } if ((keyboardValue >253) && (keyboardValue < 361)){ keypressed = 5; } if ((keyboardValue >361) && (keyboardValue < 479)){ keypressed = 6; } if ((keyboardValue >479) && (keyboardValue < 619)){ keypressed = 7; } if ((keyboardValue >619) && (keyboardValue < 765)){ keypressed = 8; } if ((keyboardValue >765) && (keyboardValue < 819)){ keypressed = 9; } if ((keyboardValue >819) && (keyboardValue < 889)){ keypressed = '*' ; } if ((keyboardValue >889) && (keyboardValue < 938)){ keypressed = '*'; } if (keyboardValue >938){ keypressed = 0; } delay(50); } Edited July 17, 2012 at 03:47 PM by dio123
bubulindo Posted July 17, 2012 at 03:55 PM Report #469017 Posted July 17, 2012 at 03:55 PM Arduino não é C#. include <ai se te avio> Mãe () { }
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now