Клавиатура на arduino

flying
Offline
Зарегистрирован: 12.11.2011
Приветствую.
Имеется следующая проблема, плата 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');    
  }
  
  
 
}

 

 
 
b707
Offline
Зарегистрирован: 26.05.2017

flying пишет:

Приветствую.
Имеется следующая проблема, написал программу  . После загрузки работает отлично, но после перезагрузки уже не работает нужно снова загружать в контроллер.

 

Так не бывает. Код не причем.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Если бы рассказали подробее, что Вы понимаете по "после загрузки" и "после перезагрузки", чем "кормите" плату в обоих случаях и т.п., то хтоь что-то можно было бы подумать. А так ... вот посмотрите похожую тему, там есть советы что попробовать и как. Если ничего не помжет, то отпишитесь но с поробностями из той темы и результатми тестов из неё же.

http://arduino.ru/forum/obshchii/arduino-uno-ne-sokhranyaet-cketch

Гриша
Offline
Зарегистрирован: 27.04.2014

распишите пояснения в строки с  36 по 59... в какой строке у этой либы чтение клавы (в какой момент)?

flying
Offline
Зарегистрирован: 12.11.2011

Гриша пишет:

распишите пояснения в строки с  36 по 59... в какой строке у этой либы чтение клавы (в какой момент)?

 

Чтение клавиатуры и вывод выполняется в doAction, при нажатии кнопки с фиксакцией что бы контролировать выполнение кода.

flying
Offline
Зарегистрирован: 12.11.2011

ЕвгенийП пишет:

Если бы рассказали подробее, что Вы понимаете по "после загрузки" и "после перезагрузки", чем "кормите" плату в обоих случаях и т.п., то хтоь что-то можно было бы подумать. А так ... вот посмотрите похожую тему, там есть советы что попробовать и как. Если ничего не помжет, то отпишитесь но с поробностями из той темы и результатми тестов из неё же.

http://arduino.ru/forum/obshchii/arduino-uno-ne-sokhranyaet-cketch

"после перезагрузки" - это после включении питания

"после загрузки" - код выполняется без каких либо проблем после повторной загрузки его в МК, отключить/включить питание, прога не работает, при этом IDE не запущено. Раньше таких проблем не испытывал 

Питанеи платы, 5В, 3А, стабилизированный БП mean well

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

flying, а после ресета ардуиновской части работает? Похоже на несоответствие  бутлоадера тому, что прописано в IDE.

flying
Offline
Зарегистрирован: 12.11.2011

dimax пишет:

flying, а после ресета ардуиновской части работает? Похоже на несоответствие  бутлоадера тому, что прописано в IDE.


После ресета также не работает. На плате уже была установлена IDE, попробую завтра обновить.

Гриша
Offline
Зарегистрирован: 27.04.2014

flying пишет:

Чтение клавиатуры и вывод выполняется в doAction, при нажатии кнопки с фиксакцией что бы контролировать выполнение кода.

это строка 053 следит за кнопкой с фиксацией???  " if ( !digitalRead(7) ) " ... я не силен в коде, но эта строка не может ловить кнопку с фиксацией.

flying
Offline
Зарегистрирован: 12.11.2011

После обновления ide проблема не решилась. Заметил ещё такое, после подачи питания на плату код работает, и есть передача на com порт, но как только начинает загружаться винда происходит сброс ардуины, и в порт уже ничего не идёт.