Клавиатура на arduino
- Войдите на сайт для отправки комментариев
Пнд, 06/08/2018 - 23:46
Приветствую.
Имеется следующая проблема, плата lattepanda с leonardo на борту, написал программу для клавиатуры 8х8 . После загрузки работает отлично, но после перезагрузки уже не работает нужно снова загружать в контроллер. Код ниже. Может кто знает как вылечить?
#include <Keypad.h>
#include <Keyboard.h>
const byte ROWS = 8; //число строк
const byte COLS = 8; //число столбцов
char hexaKeys[ROWS][COLS] = {
{'1','2','3','4','5','6','7','8'},
{'9','0','a','b','c','d','e','f'},
{'g','h','i','j','k','l','m','n'},
{'o','p','q','r','s','t','u','v'},
{'w','x','y','z','A','B','C','D'},
{'E','F','G','H','I','J','K','L'},
{'M','N','O','P','Q','R','S','T'},
{'U','V','W','X','Y','Z','#','@'},
};
byte rowPins[ROWS] = {2, 3, 4, 5, 6, 18, 19, 20};
byte colPins[COLS] = {9, 10, 11, 12, 13, 21, 22, 23};
//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
Serial.begin(9600);
pinMode(7, INPUT_PULLUP);
Keyboard.begin();
}
void loop(){
/*
char customKey = customKeypad.getKey();
if (customKey){
Serial.println(customKey);
}
*/
if ( !digitalRead(7) )
{
doAction();
}
}
void doAction()
{
char customKey = customKeypad.getKey();
if ((customKey)=='D')
{
Keyboard.press('1');
delay(100);
Keyboard.release('1');
}
//if (customKeypad.getKey()=='C')
if ((customKey)=='C')
{
Keyboard.press('2');
delay(100);
Keyboard.release('2');
}
//if (customKeypad.getKey()=='B')
if ((customKey)=='B')
{
Keyboard.press('3');
delay(100);
Keyboard.release('3');
}
if ((customKey)=='z')
{
Keyboard.press('0');
delay(100);
Keyboard.release('0');
}
if ((customKey)=='L')
{
Keyboard.press('4');
delay(100);
Keyboard.release('4');
}
if ((customKey)=='K')
{
Keyboard.press('5');
delay(100);
Keyboard.release('5');
}
if ((customKey)=='J')
{
Keyboard.press('6');
delay(100);
Keyboard.release('6');
}
if ((customKey)=='T')
{
Keyboard.press('7');
delay(100);
Keyboard.release('7');
}
if ((customKey)=='S')
{
Keyboard.press('8');
delay(100);
Keyboard.release('8');
}
if ((customKey)=='R')
{
Keyboard.press('9');
delay(100);
Keyboard.release('9');
}
if ((customKey)=='A')
{
Keyboard.press('-');
delay(100);
Keyboard.release('-');
}
if ((customKey)=='y')
{
Keyboard.press('.');
delay(100);
Keyboard.release('.');
}
if ((customKey)=='m')
{
Keyboard.press('A');
delay(100);
Keyboard.release('A');
}
if ((customKey)=='k')
{
Keyboard.press('I');
delay(100);
Keyboard.release('I');
}
if ((customKey)=='j')
{
Keyboard.press('M');
delay(100);
Keyboard.release('M');
}
if ((customKey)=='l')
{
Keyboard.press('U');
delay(100);
Keyboard.release('U');
}
if ((customKey)=='i')
{
Keyboard.press('X');
delay(100);
Keyboard.release('X');
}
if ((customKey)=='h')
{
Keyboard.press('R');
delay(100);
Keyboard.release('R');
}
if ((customKey)=='g')
{
Keyboard.press('N');
delay(100);
Keyboard.release('N');
}
if ((customKey)=='e')
{
Keyboard.press('O');
delay(100);
Keyboard.release('O');
}
if ((customKey)=='c')
{
Keyboard.press('J');
delay(100);
Keyboard.release('J');
}
if ((customKey)=='b')
{
Keyboard.press('S');
delay(100);
Keyboard.release('S');
}
if ((customKey)=='d')
{
Keyboard.press('V');
delay(100);
Keyboard.release('V');
}
if ((customKey)=='a')
{
Keyboard.press('Y');
delay(100);
Keyboard.release('Y');
}
if ((customKey)=='0')
{
Keyboard.press('Q');
delay(100);
Keyboard.release('Q');
}
if ((customKey)=='9')
{
Keyboard.press('L');
delay(100);
Keyboard.release('L');
}
if ((customKey)=='7')
{
Keyboard.press('D');
delay(100);
Keyboard.release('D');
}
if ((customKey)=='5')
{
Keyboard.press('K');
delay(100);
Keyboard.release('K');
}
if ((customKey)=='4')
{
Keyboard.press('T');
delay(100);
Keyboard.release('T');
}
if ((customKey)=='6')
{
Keyboard.press('W');
delay(100);
Keyboard.release('W');
}
if ((customKey)=='3')
{
Keyboard.press('Z');
delay(100);
Keyboard.release('Z');
}
if ((customKey)=='2')
{
Keyboard.press('C');
delay(100);
Keyboard.release('C');
}
if ((customKey)=='1')
{
Keyboard.write(KEY_RETURN);
// delay(100);
// Keyboard.release(KEY_RETURN);
}
if ((customKey)=='#')
{
Keyboard.press('H');
delay(100);
Keyboard.release('H');
}
if ((customKey)=='Y')
{
Keyboard.press('G');
delay(100);
Keyboard.release('G');
}
if ((customKey)=='X')
{
Keyboard.press('F');
delay(100);
Keyboard.release('F');
}
if ((customKey)=='Z')
{
Keyboard.press('B');
delay(100);
Keyboard.release('B');
}
if ((customKey)=='W')
{
Keyboard.press('P');
delay(100);
Keyboard.release('P');
}
if ((customKey)=='V')
{
Keyboard.press('E');
delay(100);
Keyboard.release('E');
}
if ((customKey)=='8')
{
Keyboard.press(KEY_RIGHT_CTRL);
Keyboard.press(KEY_RIGHT_SHIFT);
Keyboard.press(KEY_RIGHT_ALT);
Keyboard.press('R');
delay(100);
Keyboard.releaseAll();
}
if ((customKey)=='r')
{
Keyboard.press(KEY_RIGHT_CTRL);
Keyboard.press(KEY_RIGHT_SHIFT);
Keyboard.press(KEY_RIGHT_ALT);
Keyboard.press('I');
delay(100);
Keyboard.releaseAll();
}
if ((customKey)=='U')
{
Keyboard.press(KEY_BACKSPACE);
delay(100);
Keyboard.release(KEY_BACKSPACE);
}
if ((customKey)=='N')
{
Keyboard.press(KEY_RIGHT_CTRL);
Keyboard.press(KEY_RIGHT_SHIFT);
Keyboard.press(KEY_RIGHT_ALT);
Keyboard.press('H');
delay(100);
Keyboard.releaseAll();
}
if ((customKey)=='s')
{
Keyboard.press('KEY_F2');
delay(100);
Keyboard.release('KEY_F2');
}
if ((customKey)=='I')
{
Keyboard.press('KEY_F5');
delay(100);
Keyboard.release('KEY_F5');
}
}
Так не бывает. Код не причем.
Если бы рассказали подробее, что Вы понимаете по "после загрузки" и "после перезагрузки", чем "кормите" плату в обоих случаях и т.п., то хтоь что-то можно было бы подумать. А так ... вот посмотрите похожую тему, там есть советы что попробовать и как. Если ничего не помжет, то отпишитесь но с поробностями из той темы и результатми тестов из неё же.
http://arduino.ru/forum/obshchii/arduino-uno-ne-sokhranyaet-cketch
распишите пояснения в строки с 36 по 59... в какой строке у этой либы чтение клавы (в какой момент)?
распишите пояснения в строки с 36 по 59... в какой строке у этой либы чтение клавы (в какой момент)?
Чтение клавиатуры и вывод выполняется в doAction, при нажатии кнопки с фиксакцией что бы контролировать выполнение кода.
Если бы рассказали подробее, что Вы понимаете по "после загрузки" и "после перезагрузки", чем "кормите" плату в обоих случаях и т.п., то хтоь что-то можно было бы подумать. А так ... вот посмотрите похожую тему, там есть советы что попробовать и как. Если ничего не помжет, то отпишитесь но с поробностями из той темы и результатми тестов из неё же.
http://arduino.ru/forum/obshchii/arduino-uno-ne-sokhranyaet-cketch
"после перезагрузки" - это после включении питания
"после загрузки" - код выполняется без каких либо проблем после повторной загрузки его в МК, отключить/включить питание, прога не работает, при этом IDE не запущено. Раньше таких проблем не испытывал
Питанеи платы, 5В, 3А, стабилизированный БП mean well
flying, а после ресета ардуиновской части работает? Похоже на несоответствие бутлоадера тому, что прописано в IDE.
flying, а после ресета ардуиновской части работает? Похоже на несоответствие бутлоадера тому, что прописано в IDE.
После ресета также не работает. На плате уже была установлена IDE, попробую завтра обновить.
Чтение клавиатуры и вывод выполняется в doAction, при нажатии кнопки с фиксакцией что бы контролировать выполнение кода.
это строка 053 следит за кнопкой с фиксацией??? " if ( !digitalRead(7) ) " ... я не силен в коде, но эта строка не может ловить кнопку с фиксацией.
После обновления ide проблема не решилась. Заметил ещё такое, после подачи питания на плату код работает, и есть передача на com порт, но как только начинает загружаться винда происходит сброс ардуины, и в порт уже ничего не идёт.