Поблема с опросом клавиатуры 3х3

neid86@gmail.com
Offline
Зарегистрирован: 28.10.2014

Всем привет! вообщем пытаюсь опросить клавиатуру 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); //Выключаем светодиод
  }
}

 

Araris
Offline
Зарегистрирован: 09.11.2012

Возможно, в строке 33 светодиод слишком быстро выключается.

Для отладки скетча включите в setup() вывод в монитор последовательного порта (Serial.begin) и далее выводите в него (Serial.println) состояние пинов, переменные и что еще надо. Тогда Вам легче будет понять, что там внутри циклов собственно происходит.

А может проще с Matrix Keypad library будет ? Вот здесь почитайте: http://playground.arduino.cc/Main/KeypadTutorial#Example

neid86@gmail.com
Offline
Зарегистрирован: 28.10.2014

Araris пишет:

Возможно, в строке 33 светодиод слишком быстро выключается.

не все так просто видимо, т.к. пробывал ставить задержку delay(1000);, это бы решило проблему... но нет
сыллку посмотрю обязательно, спасибо

Snubist
Offline
Зарегистрирован: 18.02.2013

Delay не самое лучшее, лучше для пробы закоментируй строку 33, и не гаси светодиод совсем

Snubist
Offline
Зарегистрирован: 18.02.2013

или так

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);  //выключаем высокий уровень для пройденной строки

  }
}