Прошу помощи, зависает 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 еще не доделаны, но ведь они никак не могут повлиять на зависание ардуинки.
Откуда вы взяли код? Сами писали или этот код уже был?
Сам писал
Поэтому и есть пустые функции