Inicialmente eu quero agradecer aos garagistas pela boa vontade e consiencia em compartilhar o conhecimento estou tentando imprimir no LCD e porta serial o sinal proveniente de um teclado membrana 4x4 acoplado ao arduino DUE bom tudo que eu acho que devia ser simples no DUE não e assim.

Eu consigo imprimir com a seguinte condição apertando o numero 1 ,10 vezes, o numero dois 30 vezes e assim por diante.

Nota eu instalei o codigo da biblioteca de exemplos Keypad / Custom ele imprime normal eu copio o o mesmo codigo para dentro do meu programa vira essa anarquia, alguem poderia por favor me ensinar como corrigir esse problema para que possa continuar com meu desenvolvimento.

O codigo que esta em desenvolvimento esta em anexo no arquivo 1

Exibições: 896

Anexos

As respostas para este tópico estão encerradas.

Respostas a este tópico

Sim, é possível. Essa é uma alternativa  boa e simples :)

Você pode criar uma condicional em que a leitura de cod de barras somente funciona após pressionar a tecla '#' do seu KeyPad.

Pode colocar um timeout ou uma tecla para cancelar a leitura, por exemplo, para caso o usuário aperte por engano ou não realize nenhuma leitura.

Exemplo:  

# = Iniciar Modo de Leitura de Cod Barras

* = Cancela o Modo Leitura

O código seria algo do tipo:


if(customKey == '#')

{

      while(customKeypad.getKey() != '*')

            usb.Task();

}

Você pode mostrar também esse estado. Se o modo leitura está ativo ou não, seja por uma informação no seu LCD ou um LED, por exemplo. Para facilitar o usuário a identificar o estado do seu sistema.

Sobre os valores na verificação das condicionais (if), terá que testar se será reconhecido pelo valor do char, como fiz, ou por um decimal específico para cada tecla.

Boa tarde colegas paz seja com todos, estamos progredindo graças ajuda de vocês

João utilizei o codigo conforme voce me orientou funcionou perfeitamente ai preciso fazer novas correções;

Quanto a digito a primeira tecla para entrar no modo de operação que esta descrito no programa com (Set_Operac) que e o Setupe de operação essa letra fica registrada no sistema o sistema imprime ela tanto no monitor serial como no LCD ai ela altera a senha e a leitura do codigo de barra inicial como eu resolvo isso?

Imagem monitor serial

Imagem LCD 20x4

Codigo atual em 19/04/2019


//Declaração da bibliotecas.
#include <Keypad.h>#include <LiquidCrystal.h>#include <KeyboardController.h>#include <due_can.h>
//Teclado membrana 4x4.
const byte ROWS = 4; //four rowsconst byte COLS = 4; //four columns //CONSTRUÇÃO DA MATRIZ DE CARACTERES
  char hexaKeys[ROWS][COLS] = {  {'1','2','3','A'},  {'4','5','6','B'},  {'7','8','9','C'},  {'*','0','#','D'}}; byte rowPins[ROWS] = {14, 15, 16, 17}; //connect to the row pinouts of the keypadbyte colPins[COLS] = {18, 19, 20, 21}; //connect to the column pinouts of the keypad //INICIALIZAÇÃO DO TECLADO
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); //Inicia LCD.LiquidCrystal lcd (12, 11, 5, 4, 3, 2);
USBHost usb;KeyboardController keyboard(usb);
String buffCadBarra  = "";String buffSenha ="";String codBarra = "";String auxBarra = "";String auxSenha = "";String Senha ="";String SenhaAux ="";
void keyPressed() { if(keyboard.getKey() != 19) { buffCadBarra += (char)keyboard.getKey(); } else { codBarra = buffCadBarra + '\0'; buffCadBarra = ""; } printKey();}
void printKey() {
  if(codBarra != "" && codBarra != NULL){            Serial.println(codBarra);          lcd.setCursor(2,0);      lcd.print("Set_Produc:");      lcd.setCursor(2,1);      auxBarra = codBarra.substring (0, 13);        lcd.print (auxBarra);      }    codBarra =""; }void setup(){  Serial.begin(9600); while(!Serial);    lcd.begin(20, 4);
}  void loop() {    char customKey = customKeypad.getKey();     if(customKey == 'B'){ //Inicia modo de produção lcd.clear(); lcd.setCursor(0,0); lcd.print("Set_Produc:"); while(customKeypad.getKey() != 'A') // Incerra modo de produção//Inica Set_operaacional usb.Task(); }  if (customKey){  buffSenha += customKey;  auxSenha = buffSenha + '\0';    SenhaAux = auxSenha.substring(0, 6);                        Serial.print(SenhaAux);                 Senha += SenhaAux;                     lcd.clear( );         lcd.setCursor(0,0);         lcd.print("Set_Operac:");         lcd.setCursor(0,1);         lcd.print("Senha: ");         lcd.print(Senha);   }              buffSenha = "";  }

As senhas são apenas numéricas ? Se sim, tente, na linha 93, esta modificação:

if( customKey >= ((int) '0')  && customKey  <= ((int) '9') )

Para tratar apenas os valores apenas dos caracteres 0 a 9 (estão sendo convertidos para o valor DEC deles com o cast (int)). Talvez requeira modificações, pois não tenho o keypad para testar.

Boa tarde,

Se vai usar senhas, acho que esse tutorial poderá ser útil :

Keypad Door Lock with Changeable Code

https://surtrtech.com/2019/04/12/arduino-door-lock-with-keypad-sole...

https://www.hackster.io/SurtrTech/keypad-door-lock-with-changeable-...

Obrigado colega Jose vou olha para aprender e ver o que eu posso melhorar no meu codigo.

Se quiser aprender como um teclado Keypad funciona :

http://blog.eletrogate.com/arduino-keypad-4x4-e-display-digital/

Boa noite a todos novamente eu quero agradecer a boa vontade e colaboração de todos os que direta e indiretamente participaram de mais esse tópico , visto como nesse projeto as variantes  vão ser tratadas no servidor, o seja senhas e demais opção vão ser confirmadas em um processo online por meio de um banco de dados no servidor MySQL não a motivo para aprimorar a logica, fora do ambiente online, dessa forma já alcançamos um resultado positivo o teclado  imprime no LCD e serial , assim também com a leitura do código de barras também e expressa no LCD e serial.

Então estaremos finalizando esse tópico para abertura do próximo onde iremos tratar de mais uma parte desse projeto.

Anexos

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço