клавиатура 4*4 вывод цифр на светодиодный индикатор

uu4juw
Offline
Зарегистрирован: 17.01.2017

Доброго времени суток бьюсь вот над такой проблемой

имеется клавиатура 4*4 http://arduino.ru/sites/default/files/u23855/matrix_keyboard_4x4_16_key.jpg

Дисплей TM1637  http://transistorz.ru/wp-content/uploads/2017/02/TM1637-display-800x800.jpg

и Arduino uno

Необходимо ввести с клавиатуры 2х значное число. Нажав на не цифровую кнопку, оно должно сброситься или на любую другую кнопку к примеру "С"

Вот что у меня получилось, (После штудирования 1000 и 1 темы в интернете) вводятся 4 цифры коректно, затем какуюто чушь отображает

В программировании я на уровне младенца, подскажите, как переделать этот код под мои нужды чтобы вводилось не больше 2х знаков на индикатор и была кнопка сброс.

Зараннее спасибо

#include <Wire.h>
#include "TM1637.h"
#define CLK 12
#define DIO 13
TM1637 disp(CLK,DIO);
#include <Keypad.h> 
const byte ROWS = 4; 
const byte COLS = 4; 
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
}; 

byte rowPins[ROWS] = {11,10, 9, 8}; 
byte colPins[COLS] = {7, 6, 5, 4};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
int data=0;
boolean first=true;
void setup()
{
  disp.set(5);
  disp.init(D4056A);    
  Serial.begin(9600);
}

void loop(){
  char key = keypad.getKey(); //опрос клавиатуры
  if(key){
    if(first){
   first=false;
   if(isDigit(key)){
     data = data*10+key-48;
     disp.display(key);     
     disp.display(data);   
   }else{
    //обрабатываем нажатие не цифровых клавиш
   }
    }
  }else if (!first){
 first=true;
  }
}

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

uu4juw пишет:

Необходимо ввести с клавиатуры 2х значное число.

...вводятся 4 цифры коректно, затем какуюто чушь отображает

Мне кажется, что у двухзначного числа должно "корректно вводиться" не более двух цифр.

Ну и на всякеий случай: максимальное значение допустимое для int равно 32767, если нужно больше, следует использовать более длинный тип данных.

uu4juw
Offline
Зарегистрирован: 17.01.2017

Нужно сделать чтобы максимально можно было ввести 4х значное число. И сброс этого числа с кнопки к примеру "C"
Сейчас можно ввести как минимум 7 значное число а то и больше, нужно ограничить до 4х.

uu4juw
Offline
Зарегистрирован: 17.01.2017
 delay(3000);
  disp.clearDisplay();
эта функция не подходит для сброса дисплея 
Совсем голову сломал ( 
uu4juw
Offline
Зарегистрирован: 17.01.2017

В общем получилось сделать сброс отображения на экране при нажатии на буквы "A","B","C","D", происходит сброс данных на Дисплее ТМ1637

Вот как сделать чтобы максимум можно ввести с клавиатуры не более 4х цифр в идеале всего 2 Уже сломал всю голову 

Просьбва знающих помочь

Вот код, что у меня получился на данный момент

#include <Wire.h>
#include "TM1637.h"
#define CLK 12
#define DIO 13
TM1637 disp(CLK,DIO);
#include <Keypad.h> 
const byte ROWS = 4; 
const byte COLS = 4; 
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
}; 
byte rowPins[ROWS] = {11,10, 9, 8}; 
byte colPins[COLS] = {7, 6, 5, 4};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
int data=0;
boolean first=true;
void(* resetFunc) (void) = 0;
void setup()
{
  disp.set(7);
  disp.init(D4056A);
  Serial.begin(9600);
}
void loop(){
  char key = keypad.getKey(); //опрос клавиатуры
  if(key){
   if(isDigit(key)){    
     data = key-48+10*data;     
     disp.display(data); 
     Serial.print(key);      
   }else{
    //обрабатываем нажатие не цифровых клавиш
 if(isAlpha(key)){
resetFunc(); 
  }  }  }  }

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

uu4juw пишет:

Вот как сделать чтобы максимум можно ввести с клавиатуры не более 4х цифр в идеале всего 2 Уже сломал всю голову 

 

Очевидно - считать количество введенных цифр.

Можно также перед вводом очередной проверять, что число не более 999. В общем - как душеньке угодно.

uu4juw
Offline
Зарегистрирован: 17.01.2017

А подробнее можно?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Можно.

Задавайие конкретные вопросы.

uu4juw
Offline
Зарегистрирован: 17.01.2017

Вроде, как и задавал
Как сделать чтобы максимум можно ввести с клавиатуры не более 4х цифр в идеале всего 2
Только на практике можно с примером

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Перечитайте пост №5. Там все необходимое, чтобы сделать это самостоятельно.

А за готовым кодом - в раздел "Ищу исполнителя".

uu4juw
Offline
Зарегистрирован: 17.01.2017

Вот, если бы знал то не просил бы помощи

T.Rook
Offline
Зарегистрирован: 05.03.2016

Блин, ну неужели так сложно чуточку подумать?????!!!!!! Да простит меня andriano

data=(data%10)*10 + key-48

uu4juw
Offline
Зарегистрирован: 17.01.2017

Спасибо большое, не то чтобы сложно, просто нехватает знаний. Программирование только начал изучать,