Помощь с клавиатурой 4х4
- Войдите на сайт для отправки комментариев
Сб, 07/01/2017 - 00:49
Помогите написать код, который будет считывать значения с матричной клавиатуры, и когда наберется 7 значений они отправлялись в сериал
Помогите написать код
Нет, это называется сделайте за меня. Помогите, это когда ты выкладываешь свой код (пусть и не рабочий) и задаёшь конкретные вопросы, что у тебя не получается.
Я пробовал разными способами, результат один- не ждет, пока я введу все 7 символов, а шлет в сериал всякий мусор непрерывно. Вот одна из попыток :
#include <Keypad.h> char num[6]; int i = 0; const byte ROWS = 4; const byte COLS = 3; char keys[ROWS][COLS] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'#','0','*'} }; byte rowPins[ROWS] = {5, 4, 3, 2}; byte colPins[COLS] = {8, 7, 6}; Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup(){ pinMode(13,OUTPUT); Serial.begin(9600); digitalWrite(13,LOW); } void loop(){ char key = keypad.getKey(); if (key){ num[i]=key; i++;} for(i = 0;i<=6;i++){ Serial.print(num[i]); } }Пока писал уже ответили
Удалил, т.к. выше сам неправильно написал...
Ну мне нужно вывести весь этот массив в сериал только после того, как я введу все его 7 элементов. с if он сразу же начнет непрерывно писать первый же введенный элемент, может как-то можно buffer применить?
http://arduino.ru/Reference/String
Вроде так?
#include <Keypad.h> char num[6]; int i = 0; const byte ROWS = 4; const byte COLS = 3; char keys[ROWS][COLS] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'#','0','*'} }; byte rowPins[ROWS] = {5, 4, 3, 2}; byte colPins[COLS] = {8, 7, 6}; Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup(){ pinMode(13,OUTPUT); Serial.begin(9600); digitalWrite(13,LOW); } void loop(){ char key = keypad.getKey(); if (key){ num[i]=key; i++;} if (i == 7){ for (int i=0; i<=6; i++){ Serial.print(num[i]); } i = 0; } }Спасибо конечно, но как это поможет? Данные с кнопки char, массив тоже char. Какой бы тип я не выбрал- главная проблема в том, чтобы весь масив вывелся только после того как я его введу с матричной клавиатуры(фотка выше). Может кто-то сталкивался уже, я с библиотеками разными пробовал- не получается
Serial не дисплей. Или надо набирать 7 цифр в слепую, а потом пачкой кидать в сериал. Или же пирамидой- сначало 1 , потом 2 . Похоже на обновление информации без стирания, но переводом на новую строку. И так до 7 цифр.
Вот я и хочу, вслепую, а потом - пачкой закинуть в сериал
Эм, код в посте #7 не работает так, как Вам надо?
Спасибо, заработало наконец, только на 31ой строке i==6 . Только последним символом отправляеть хрень, но как надо-7 элементов. Причина неясна
Так я ссылку для кого кинул. Создай массив char, заполни его числами, поставь в конце 0, и выпихни в принт без []. как вариант воспльзуйся указателями на этот массив.
Спасибо, заработало наконец, только на 31ой строке i==6 . Только последним символом отправляеть хрень, но как надо-7 элементов. Причина неясна
Нет, надо именно i==7, проверьте. Если i==6, то условие if выполнится раньше чем надо и не присвоится значение последнему элементу массива.
qwone, Jeka_M очень благодарен, проблему можно считать решенной, завтра исходя из ваших советов подправлю еще немного. С рождеством!
Теперь другая проблема, нужно чтобы устройство получило ATD+XXXXXXX, где ХХХХХХХ-7значений массива. Проблема в том, чтобы это все вывелость сразу
#include <Keypad.h> char num[6]; int i = 0; const byte ROWS = 4; const byte COLS = 3; char keys[ROWS][COLS] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'#','0','*'} }; byte rowPins[ROWS] = {5, 4, 3, 2}; byte colPins[COLS] = {8, 7, 6}; Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup(){ pinMode(13,OUTPUT); Serial.begin(9600); digitalWrite(13,LOW); } void loop(){ char key = keypad.getKey(); if (key){ num[i]=key; i++;} if (i == 7){ Serial.print("ATD+"); for (int i=0; i<=6; i++){ Serial.print(num[i]); } i = 0; } }То есть не циклом, а именно одним скажем так "сообщением". Если что -это отправка введенного номера на Sim800l.