клавиатура 4*4 вывод цифр на светодиодный индикатор
- Войдите на сайт для отправки комментариев
Доброго времени суток бьюсь вот над такой проблемой
имеется клавиатура 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;
}
}
Необходимо ввести с клавиатуры 2х значное число.
...вводятся 4 цифры коректно, затем какуюто чушь отображает
Мне кажется, что у двухзначного числа должно "корректно вводиться" не более двух цифр.
Ну и на всякеий случай: максимальное значение допустимое для int равно 32767, если нужно больше, следует использовать более длинный тип данных.
Нужно сделать чтобы максимально можно было ввести 4х значное число. И сброс этого числа с кнопки к примеру "C"
Сейчас можно ввести как минимум 7 значное число а то и больше, нужно ограничить до 4х.
В общем получилось сделать сброс отображения на экране при нажатии на буквы "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(); } } } }Вот как сделать чтобы максимум можно ввести с клавиатуры не более 4х цифр в идеале всего 2 Уже сломал всю голову
Очевидно - считать количество введенных цифр.
Можно также перед вводом очередной проверять, что число не более 999. В общем - как душеньке угодно.
А подробнее можно?
Можно.
Задавайие конкретные вопросы.
Вроде, как и задавал
Как сделать чтобы максимум можно ввести с клавиатуры не более 4х цифр в идеале всего 2
Только на практике можно с примером
Перечитайте пост №5. Там все необходимое, чтобы сделать это самостоятельно.
А за готовым кодом - в раздел "Ищу исполнителя".
Вот, если бы знал то не просил бы помощи
Блин, ну неужели так сложно чуточку подумать?????!!!!!! Да простит меня andriano
data=(data%10)*10 + key-48
Спасибо большое, не то чтобы сложно, просто нехватает знаний. Программирование только начал изучать,