Прошу помощи, зависает Arduino Pro Micro
- Войдите на сайт для отправки комментариев
Пт, 20/09/2019 - 14:22
Доброго дня, Я не давно с arduino. Не могу разобраться почему зависает моя ардуино.
Прошу гляньте на код, и не судите строго). После минут 5 работы, перестает реагировать на внешнии раздражители.
Заранее благодарен
#include "Keyboard.h"
#include "Keypad.h"
int pauseM = 50;
int pause = 50;
int KluchPin = A0;
const byte ROWS = 8; //four rows
const byte COLS = 4; //four columns
byte rowPins[ROWS] = {15, 14, 16, 10, 9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad
char keys[ROWS][COLS] = {
{'A', 'B', 'C', 'D'}, //Выход, КОД, ШК, С\\ 24(ESC) 16(F5) 8(F6) 0(F12)
{'E', 'F', 'G', 'H'}, //Секция, Ред. цену, Ред. кол., Сторно\\ 25(LShift F1) 17(LAlt F8) 9(LAlt F7) 1(Keypad -)
{'7', '8', '9', 'I'}, // 7, 8, 9, Х\\ 26(Keypad 7) 18(Keypad 8) 10(Keypad 9) 2(Keypad *)
{'4', '5', '6', 'J'}, // 4, 5, 6,пром итог\\ 27(Keypad 4) 19(Keypad 5) 11(Keypad 6) 3(Keypad /)
{'1', '2', '3', 'K'}, // 1, 2, 3, Оплата\\ 28(Keypad 1) 20(Keypad 2) 12(Keypad 3) 31(ENTER)
{'0', 'L', 'M', 'N'}, // 0, ., 00, Ключ0 \\ 4(Keypad 0) 29(Keypad .) 21(Keypad +) 100(Ключ0)
{'O', 'P', 'Q', 'R'}, //Сервис, вверх, откр.ящик Ключ1 \\ 13(LCtrl F7) 5 (Стрелка вверх) 30(LCtrl F6) 101(Ключ1)
{'S', 'T', 'U', 'V'} // лево, вниз, вправо Ключ2 \\ 22(Стрелка влево) 14(Стрелка вниз) 6(Стрелка вправо) 102(Ключ2)
};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void(* resetFunc) (void) = 0;
void setup() {
Keyboard.begin(); // initialize control over the keyboard
// Serial.begin(9600);
}
void loop() {
char key = keypad.getKey();
if (key) {
//Проверка Статусов и Выравнивание
bool NUM_LOCK = Keyboard.getLedStatus(LED_NUM_LOCK);
if (NUM_LOCK == 0) {Keyboard.press(0xDB);}
bool CAPS_LOCK = Keyboard.getLedStatus(LED_CAPS_LOCK);
if (CAPS_LOCK == 1) {Keyboard.press(0xC1);}
bool SCROLL_LOCK = Keyboard.getLedStatus(LED_SCROLL_LOCK);
if (SCROLL_LOCK == 1) {Keyboard.press(0xCF);}
//Serial.println(key);
switch (key) {
case 'A': //ESC Выход
Keyboard.press(KEY_ESC); delay(pause); Keyboard.releaseAll(); break;
case 'B': //F5 Код
Keyboard.press(KEY_F5); delay(pause); Keyboard.releaseAll(); break;
case 'C': //F6 ШК
Keyboard.press(KEY_F6); delay(pause); Keyboard.releaseAll(); break;
case 'D': //F12 С
Keyboard.press(KEY_F12); delay(pause); Keyboard.releaseAll(); break;
case 'E': //LShift + F1 Секция
Keyboard.press(KEY_LEFT_SHIFT); delay(pauseM); Keyboard.press(KEY_F1); delay(pause); Keyboard.releaseAll(); break;
case 'F': //LAlt + F8 Ред. цену
Keyboard.press(KEY_LEFT_ALT); delay(pauseM); Keyboard.press(KEY_F8); delay(pause); Keyboard.releaseAll(); break;
case 'G': //LAlt + F7 Ред. кол.
Keyboard.press(KEY_LEFT_ALT); delay(pauseM); Keyboard.press(KEY_F7); delay(pause); Keyboard.releaseAll(); break;
case 'H': //Keypad - Сторно ???
Keyboard.press('\336'); delay(pause); Keyboard.releaseAll(); break;
case '7': //Keypad 7
Keyboard.press('\347'); delay(pause); Keyboard.releaseAll(); break;
case '8': //Keypad 8
Keyboard.press('\350'); delay(pause); Keyboard.releaseAll(); break;
case '9': //Keypad 9
Keyboard.press('\351'); delay(pause); Keyboard.releaseAll(); break;
case 'I': //Keypad * - X
Keyboard.press('\335'); delay(pause); Keyboard.releaseAll(); break;
case '4': //Keypad 4
Keyboard.press('\344'); delay(pause); Keyboard.releaseAll(); break;
case '5': //Keypad 5
Keyboard.press('\345'); delay(pause); Keyboard.releaseAll(); break;
case '6': //Keypad 6
Keyboard.press('\346'); delay(pause); Keyboard.releaseAll(); break;
case 'J': // Keypad / - пром итог
Keyboard.press('\334'); delay(pause); Keyboard.releaseAll(); break;
case '1': //Keypad 1
Keyboard.press('\341'); delay(pause); Keyboard.releaseAll(); break;
case '2': //Keypad 2
Keyboard.press('\342'); delay(pause); Keyboard.releaseAll(); break;
case '3': //Keypad 3
Keyboard.press('\343'); delay(pause); Keyboard.releaseAll(); break;
case 'K': //Оплата ENTER
Keyboard.press('\340'); delay(pause); Keyboard.releaseAll(); break;
case '0': //Keypad 0
Keyboard.press('\352'); delay(pause); Keyboard.releaseAll(); break;
case 'L': //Keypad .
Keyboard.press('\353'); delay(pause); Keyboard.releaseAll(); break;
case 'M': //Keypad +
Keyboard.press('\337'); delay(pause); Keyboard.releaseAll(); break;
case 'O': //Сервис LCtrl F7
Keyboard.press(KEY_LEFT_CTRL); delay(pauseM); Keyboard.press(KEY_F7); delay(pause); Keyboard.releaseAll(); break;
case 'P': // вверх Стрелка вверх
Keyboard.press(KEY_UP_ARROW); delay(pause); Keyboard.releaseAll(); break;
case 'Q': //откр.ящик LCtrl F6
Keyboard.press(KEY_LEFT_CTRL); delay(pauseM); Keyboard.press(KEY_F6); delay(pause); Keyboard.releaseAll(); break;
case 'S': //лево
Keyboard.press(KEY_LEFT_ARROW); delay(pause); Keyboard.releaseAll(); break;
case 'T': //вниз
Keyboard.press(KEY_DOWN_ARROW); delay(pause); Keyboard.releaseAll(); break;
case 'U': //вправо
Keyboard.press(KEY_RIGHT_ARROW); delay(pause); Keyboard.releaseAll(); break;
case 'N': //100(Ключ0)
break;
case 'R': //Ключ1
break;
case 'V': //Ключ2
break;
}
}
}
byte Kluch(){
int val = analogRead(KluchPin); // считываем значение с аналогового входа и записываем в переменную val
if (val < 50) return 1; // сверяем переменную, если val меньше 50 возвращаем 1 (первая кнопка)
else if (val < 150) return 2; // если val меньше 150 вторая кнопка
else if (val < 350) return 5; // если val меньше 350 третья кнопка
else if (val < 500) return 4; // если val меньше 500 четвертая кнопка
else return 0;
}
Ахмед, спашивай у автора кода, а не у нас
Меня зовут Руслан, фамилия у меня Ахмедбеков, просто). И я и есть автор кода. И к сожалению у меня не хватает опыта понять в чем проблема, поэтому у вас и спрашиваю.
Я могу предположить что заканчивается память, только как ее освобождать еще не понял.
Если ты автор кода, ответствуй, зачем тебе строка 27?
Это программный резет) я думал уже счетчик поставить и на 1000 разе резет нажимать
Чота ржу. Удачи.
Руслан, у меня два вопроса:
1. Вы уверены, что библиотека понимает такую запись кода кнопки:
Keyboard.press('\337');
что такое \377 - это восьмеричное число? почему не написать просто 255?
2. Строки 115 и далее, процедура Kluch() - первая кнопка возвращает единицу, вторая двойку... четвертая - четверку, а вот кнопка три почемуто возвращает пять. Это не ошибка?
Я. правда. не знаю. насколько это критично , процедура нигде в коде не используется. Но если этот индекс использовать при адресации массива, с учетом того что кнопок всего пять - такая ошибка может вызвать переполнение и перезагрузку МК
Все коды кнопок верны. Это коды цифр numpad. Kluch пока не используется. Сам я давно программирую в 1с и простейшие основы програмирование хорошо знаю. Но никогда не писал ничего для такого небольшого железа как arduino.a
Смысл кода сводиться к тому что на матричной клавиатуре нажимаеться клавиша а ардуино передает компу какую клавишу нажать. Смотрел в сторону питания думал может usb не вытягивает. Подключил внешний и на питания платы поставил 100 микрофарад. Эффекта не дало.
строки 106-110 не имеют смысла
027 строка зачем? Зачем принудительно заставлять контроллер уходить в Reset?
Можно удалить 027 строку ничего не поменяется. 106-110 еще не доделаны, но ведь они никак не могут повлиять на зависание ардуинки.
Откуда вы взяли код? Сами писали или этот код уже был?
Сам писал
Поэтому и есть пустые функции