Jump to content

Recommended Posts

Posted

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);
}
Posted

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 () {

}

Posted (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 by dio123

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.