Подскажите как опросить клавиатуру?

MaxSave
Offline
Зарегистрирован: 26.10.2014

Подскажите как опросить клавиатуру из 5 кнопок. Четыре кнопки - это код. Пятая результат.

Написал пока мало:

#include <Bounce.h>

const int ledPin[] = {8,9,10,11,12};
const int errLed = 13;

/*Кнопки*/
Bounce KH1 = Bounce(6, 1);
Bounce KH2 = Bounce(5, 1);
Bounce KH3 = Bounce(4, 1);
Bounce KH4 = Bounce(3, 1);
Bounce KH5 = Bounce(2, 1);

const int OUT = 10;

int KHT[5];
int TEMP[5];

boolean FKH1 = false;
boolean FKH2 = false;
boolean FKH3 = false;
boolean FKH4 = false;
boolean FKH5 = false;

void setup() {

  pinMode(2, INPUT);
  pinMode(3, INPUT);
  pinMode(4, INPUT);
  pinMode(5, INPUT);
  pinMode(6, INPUT);
  for (int i=0; i<5; i++){
    pinMode(ledPin[i], OUTPUT);
    digitalWrite(ledPin[i], LOW);
  }
 pinMode(errLed, OUTPUT);
 digitalWrite(errLed, LOW);
 
 Serial.begin(9600);
  
}

int btnState(){
  
  if (KH1.update()) {     //если произошло событие
    if (KH1.read()==0) {    //если кнопка нажата
      return 1;
    }
   else return 0;
  }   
 
if (KH2.update()) {     //если произошло событие
    if (KH2.read()==0) {    //если кнопка нажата
      return 2;
   } 
   else return 0;
  } 

if (KH3.update()) {     //если произошло событие
    if (KH3.read()==0) {    //если кнопка нажата
      return 3;
    } 
    else return 0;
  }     
 
 if (KH4.update()) {     //если произошло событие
    if (KH4.read()==0) {    //если кнопка нажата
      return 4;
    } 
    else return 0;
  }        
 
if (KH5.update()) {     //если произошло событие
    if (KH5.read()==0) {    //если кнопка нажата
      return 5;
    }
   else return 0;
  } 
  
}

void nLed(){
 digitalWrite(ledPin[4], HIGH); 
   delay(3000); 
     digitalWrite(ledPin[4], LOW);
   for (int i=0; i<4; i++){
     digitalWrite(ledPin[i], LOW);
   }
} 

void loop() {
  


do
{
   
      
  }  while (btnState() != 5 );
      
nLed();

}

Дальше не знаю как. Если кто знает, подскажите пожалуйста.

art100
Offline
Зарегистрирован: 09.03.2014

5 кнопок - я за решение резистивное одной ножкой

купите или найдите щиток LCDShield там все хорошо 

http://chingachgook.net/arduino/podklyuchenie-lcd-keypad-shield-k-arduino.html

// include the library code: 
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup() { 
  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2); 
  // Print a message to the LCD. 
  lcd.setCursor(0,0); 
  lcd.print("LCD Key Shield"); 
  lcd.setCursor(0,1); 
  lcd.print("Press Key:"); 
}

void loop() { 
  int x; 
  x = analogRead (0); 
  lcd.setCursor(10,1); 
  if (x < 60) { 
    lcd.print ("Right "); 
  } 
  else if (x < 200) { 
    lcd.print ("Up    "); 
  } 
  else if (x < 400){ 
    lcd.print ("Down  "); 
  } 
  else if (x < 600){ 
    lcd.print ("Left  "); 
  } 
  else if (x < 800){ 
    lcd.print ("Select"); 
  } 
}

я бы себе просто купил и забыл массу проблем

я повторял просто на весу подпаяв резисторы

MaxSave
Offline
Зарегистрирован: 26.10.2014

Это тоже не решает проблему. Это еще одно решение как подключить кнопки. Проблема что дальше делать? В моем коде уже есть опрос состояний кнопок,  а вот как дальше я не могу дойти... Нужно ввести четырехзначный код, причем если два раза ошибся то блок на минуту, а пятой кнопкой результат.

Snubist
Offline
Зарегистрирован: 18.02.2013
String Read_Keyboard;
String Pass="1234";




void loop() {

do
{
if (btnState() !=0) Read_Keyboard=Read_Keyboard+String(btnState(), DEC);   
      
  }  while (btnState() != 5 );
if ( Read_Keyboard == Pass)
     {
     // Выполняем код
     
     }
Read_Keyboard ="";
nLed();

}

Это только направление куда идти. Так слишком много нюансов, например дребезг кнопок...

MaxSave
Offline
Зарегистрирован: 26.10.2014

О! Свежая мысль! Спасибо:) От дребезга кнопок избавила библиотека bounce.h