Программирование экрана и клавиатуры
- Войдите на сайт для отправки комментариев
Пт, 17/03/2017 - 17:33
Помогите новичку. Мне надо вывести на экран два символа (казалось бы всего то) да не тут то было. Подскажите что не так.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2); // Устанавливаем дисплей
int PinOut[4] {5, 4, 3, 2}; // пины выходы
int PinIn[4] {9, 8, 7, 6}; // пины входа
int val = 0;
const char value[4][4]
{ {'1', '4', '7', '*'},
{'2', '5', '8', '0' },
{'3', '6', '9', '#'},
{'A', 'B', 'C', 'D'}
};
// двойной массив, обозначающий кнопку
int b = 0; // переменная, куда кладется число из массива(номер кнопки)
void setup()
{
Serial.begin(9600);
Wire.begin();
lcd.init();
lcd.backlight();// Включаем подсветку дисплея
pinMode (2, OUTPUT); // инициализируем порты на выход (подают нули на столбцы)
pinMode (3, OUTPUT);
pinMode (4, OUTPUT);
pinMode (5, OUTPUT);
pinMode (6, INPUT); // инициализируем порты на вход с подтяжкой к плюсу (принимают нули на строках)
digitalWrite(6, HIGH);
pinMode (7, INPUT);
digitalWrite(7, HIGH);
pinMode (8, INPUT);
digitalWrite(8, HIGH);
pinMode (9, INPUT);
digitalWrite(9, HIGH);
Serial.begin(9600); // открываем Serial порт
}
char matrix () // создаем функцию для чтения кнопок
{
for (int i = 1; i <= 4; i++) // цикл, передающий 0 по всем столбцам
{
digitalWrite(PinOut[i - 1], LOW); // если i меньше 4 , то отправляем 0 на ножку
for (int j = 1; j <= 4; j++) // цикл, принимающих 0 по строкам
{
if (digitalRead(PinIn[j - 1]) == LOW) // если один из указанных портов входа равен 0, то..
{
delay(200);
return value[i - 1][j - 1];
}
}
digitalWrite(PinOut[i - 1], HIGH); // подаём обратно высокий уровень
}
}
void loop()
{
char sym1 = matrix();
lcd.setCursor(0, 0);
lcd.print(sym1);
delay(2000);
char sym2 = matrix();
lcd.setCursor(0, 1);
lcd.print(sym2);
}
Если выводить один символ, то работает, а два нет.
Т.Е. если loop такой
void loop()
{
char sym1 = matrix();
lcd.setCursor(0, 0);
lcd.print(sym1);
}
то все в порядке.
Что не так?
Все так.
Этот код и должен выводить один символ.
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
Здравствуйте,
мне не понятно почему при повторном вызове функции matrix пропадает как первый символ, так и второй и на экране появляются в этих позициях непонятные значки
Здравствуйте,
мне не понятно почему при повторном вызове функции matrix пропадает как первый символ, так и второй и на экране появляются в этих позициях непонятные значки
Добрый день, а мне непонятно, почему Вы упорно игнорируете правила форума и отказываетесь вставить код как положено? В таком виде 90% за то, что его и читать-то никто не будет.
...почему Вы упорно игнорируете правила форума и отказываетесь вставить код как положено? В таком виде 90% за то, что его и читать-то никто не будет.
Вопрос к ТС: что возвращает matrix (), если ничего не нажато?
Отвечу за ТC: ничего путнего он не возвращает. Точнее это зависит от реализации компилятора: может 0, а может вообще неопределенное значение.
Но хуже другое: когда кнопка нажата и matrix() возвращает нормальное значение, одна ножка микроконтроллера из PinOut[] остается в состоянии LOW. Поэтому поведение matrix() при повторном вызове может не соотвествовать ожиданиям ТС.
Отвечу за ТC
Вопрос был адресован тому, кому было необходимо получение знаний и опыта отладки, которые несоизмеримы со знанием простого ответа.