Помогите разобраться со скетчом...
Вот пример:
PHP код:
/* CarPC
*/
#include <Keypad.h>
const byte ROWS = 4; // Four rows
const byte COLS = 4; // Three columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = { 2, 3, 4, 5 };
byte colPins[COLS] = { 6, 7, 8, 9 };
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
int Stop=0;
void setup()
{
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
digitalWrite(13, HIGH);
keypad.addEventListener(keypadEvent); //add an event listener for this keypad
}
void loop()
{
char key = keypad.getKey();
digitalWrite(11, HIGH);
delay(300);
digitalWrite(11, LOW);
delay(300);
}
//take care of some special events
void keypadEvent(KeypadEvent key){
switch (keypad.getState()){
case RELEASED:
switch (key){
case '*':
digitalWrite(13,!digitalRead(13));
break;
case '1':
digitalWrite(10,!digitalRead(10));
break;
case '2':
strobe();
break;
case 'D':
Stop=1;
break;
}
break;
}
}
void strobe()
{
do
{
for (int i=0; i < 3; i++) {
digitalWrite(12, HIGH);
delay(70);
digitalWrite(12, LOW);
delay(70);
char key = keypad.getKey();
}
for (int i=0; i < 3; i++) {
digitalWrite(10, HIGH);
delay(70);
digitalWrite(10, LOW);
delay(70);
char key = keypad.getKey();
}
} while (Stop != 1);
Stop=0;
}
Проблемы 2-е.
1. Когда выполняется главная программа, в момент задержки (delay(300)) соответственно не работает кейпад, т.э. не реагируют клавиши... Но как я понял они должны реагировать на событие (прерывание)? Как это побороть, чтобы в любой момент регистрировалось нажатие клавиши?
2. Реально ли сделать так, чтобы выполнялось сразу две подпрограммы, например, как в этом скетче, чтобы когда вызывается функция строб, основная продолжала работать. т.э. чтобы выводы 10 и 12 перемиговались + с основной перемигивался 11?