Поблема с опросом клавиатуры 3х3
- Войдите на сайт для отправки комментариев
Вс, 11/01/2015 - 14:11
Всем привет! вообщем пытаюсь опросить клавиатуру 3х3, и с нажатием кнопки зажечь светодиод!не выходит что то... в чем ошибка не могу понять...
int rows[3]={
6,7,8}; //указываем пины строк клавы
int cols[3]={
3,4,5}; //и столбцов
void setup()
{
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
// Инициализация вывода светодиода
pinMode(9, OUTPUT);
}
void loop() {
for(int i=0;i<3;i++){ //цикл для перехода по всем строкам
digitalWrite(rows[i], HIGH); //подаем на текущую строку высокий уровень
for(int j=0;j<3;j++){ //цикл для переходов по всем столбцам
if(digitalRead(cols[j])==HIGH){ //если уровень высокий, то кнопка нажата
digitalWrite(9, HIGH); // Вкл. светодиод
}
}
digitalWrite(rows[i], LOW); //выключаем высокий уровень для пройденной строки
digitalWrite(9, LOW); //Выключаем светодиод
}
}
Возможно, в строке 33 светодиод слишком быстро выключается.
Для отладки скетча включите в setup() вывод в монитор последовательного порта (Serial.begin) и далее выводите в него (Serial.println) состояние пинов, переменные и что еще надо. Тогда Вам легче будет понять, что там внутри циклов собственно происходит.
А может проще с Matrix Keypad library будет ? Вот здесь почитайте: http://playground.arduino.cc/Main/KeypadTutorial#Example
Возможно, в строке 33 светодиод слишком быстро выключается.
не все так просто видимо, т.к. пробывал ставить задержку delay(1000);, это бы решило проблему... но нет
сыллку посмотрю обязательно, спасибо
Delay не самое лучшее, лучше для пробы закоментируй строку 33, и не гаси светодиод совсем
или так
int rows[3]={ 6,7,8}; //указываем пины строк клавы int cols[3]={ 3,4,5}; //и столбцов void setup() { pinMode(3, INPUT); pinMode(4, INPUT); pinMode(5, INPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); // Инициализация вывода светодиода pinMode(9, OUTPUT); } void loop() { for(int i=0;i<3;i++){ //цикл для перехода по всем строкам digitalWrite(rows[i], HIGH); //подаем на текущую строку высокий уровень for(int j=0;j<3;j++){ //цикл для переходов по всем столбцам if(digitalRead(cols[j])==HIGH && rows[i]==6 ){ //если уровень высокий, то кнопка нажата на верхней строке digitalWrite(9, HIGH); // Вкл. светодиод } else if(digitalRead(cols[j])==HIGH && rows[i]==8 ){ //если уровень высокий, то кнопка нажата на нижней строке digitalWrite(9, LOW); // Выкл. светодиод } } digitalWrite(rows[i], LOW); //выключаем высокий уровень для пройденной строки } }