Объединить 2 скетча в один
- Войдите на сайт для отправки комментариев
Втр, 20/09/2016 - 13:53
Проблема в следующем:
Поскольку я в программировании полный ноль, использовл чужие скетчи изменённые под свои задачи.
Два работающих отдельно скетча объединяю в один - не работает.
Прошу указать на ошибку.
#include <IRremote.h> #include <EEPROM.h> IRsend irsend; int ledPin = 9; // 3 для Nano, 9 для Leonardo unsigned long a; const int read1 = A0; //блок кнопок float val1 = 0; float lastval1 = 0; int pause1 = 180; //Задержка после нажатия кнопок int analogPin = A0; // пин для подключения кнопок, по умолчанию A0 //// Значение кнопок //// int release_button = 1023; // значение при отпущенных кнопках int button_release_range = 20; // диапазон значения + - при отпущенных кнопках int button_range = 5; // диапазон значения нажатых кнопок + - int time_holding = 800; // время для удержания кнопок в миллисекундах int time_tinkling = 50; // время исключающее дребезг контактов в миллисекундах int vol_up = 778; // значение кнопки увеличить громкость int vol_down = 922; // значение кнопки уменьшить громкость int alt_tab; // значение кнопки которая будет работать как Alt + Tab int next = 614; // значение кнопки которая будет работать как Next при коротком нажатии и Fast Forward при удержании int previous = 451; // значение кнопки которая будет работать как Previous при коротком нажатии и Rewind при удержании int play_pause = 305; // значение кнопки которая будет работать как Play/Pause при коротком нажатии и Mute при удержании int data; unsigned long flag = 0; unsigned long eventTime = 0; unsigned long pauseMillis = 0; void setup() { Serial.begin(9600); Serial.setTimeout(4); pinMode(ledPin, OUTPUT); pinMode (read1, INPUT); analogReference(DEFAULT); // подключение внутреннего напряжение AVCC к выводу AREF (опорное напряжение) Keyboard.begin(); } void loop() { data=analogRead(analogPin); if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 0) { eventTime=millis(); } //********************** Громкость ************************************ if(millis()-eventTime<time_tinkling && millis()-eventTime<time_holding-1 && data >= vol_up - button_range && data <= vol_up + button_range && flag == 0) { Remote.increase(); flag = 5; delay(10); Remote.clear(); } if(millis()-eventTime>time_holding && data >= vol_up - button_range && data <= vol_up + button_range && flag == 5 || data >= vol_up - button_range && data <= vol_up + button_range && flag && flag == 3) { Remote.increase(); flag = 3; Remote.clear(); delay(100); } if(millis()-eventTime<time_tinkling && millis()-eventTime<time_holding-1 && data >= vol_down - button_range && data <= vol_down + button_range && flag == 0) { Remote.decrease(); flag = 6; delay(10); Remote.clear(); } if(millis()-eventTime>time_holding && data >= vol_down - button_range && data <= vol_down + button_range && flag == 6 || data >= vol_down - button_range && data <= vol_down + button_range && flag == 3) { Remote.decrease(); flag = 3; Remote.clear(); delay(100); } //********************** AltTab + Ещё что то ************************************ if(millis()-eventTime<time_tinkling && millis()-eventTime<time_holding-1 && data >= alt_tab - button_range && data <= alt_tab + button_range) { flag = 1; } if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 1 && pauseMillis == 0) { Keyboard.press(KEY_LEFT_ALT); Keyboard.press(KEY_TAB); Keyboard.release(KEY_TAB); Keyboard.press(KEY_TAB); Keyboard.release(KEY_TAB); flag = 0; pauseMillis = millis(); } if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 1 && pauseMillis != 0) { Keyboard.press(KEY_TAB); Keyboard.release(KEY_TAB); flag = 0; pauseMillis = millis(); } if(pauseMillis && millis()-pauseMillis >= 800 && data>=release_button - button_release_range && data<=release_button + button_release_range) { flag = 0; pauseMillis = 0; Keyboard.releaseAll(); } if(millis()-eventTime>time_holding && data >= alt_tab - button_range && data <= alt_tab + button_range && flag == 1) { flag = 0; } //********************** Next и Fast Forward ************************************ if(millis()-eventTime<time_tinkling && millis()-eventTime<time_holding-1 && data >= next - button_range && data <= next + button_range) { flag = 2; } if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 2) { Remote.next(); flag = 0; delay(10); Remote.clear(); } if(millis()-eventTime>time_holding && data >= next - button_range && data <= next + button_range && flag == 2 || data >= next - button_range && data <= next + button_range && flag == 3) { Remote.forward(); flag = 3; Remote.clear(); delay(100); } //********************** Previous и Rewind ************************************ if(millis()-eventTime<time_tinkling && millis()-eventTime<time_holding-1 && data >= previous - button_range && data <= previous + button_range) { flag = 4; } if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 4) { Remote.previous(); flag = 0; delay(10); Remote.clear(); } if(millis()-eventTime>time_holding && data >= previous - button_range && data <= previous + button_range && flag == 4 || data >= previous - button_range && data <= previous + button_range && flag == 3) { Remote.rewind(); flag = 3; Remote.clear(); delay(100); } //********************** Play/pause + Mute ************************************ if(millis()-eventTime<time_tinkling && millis()-eventTime<time_holding-1 && data >= play_pause - button_range && data <= play_pause + button_range) { flag = 7; } if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 7) { Remote.play_pause(); flag = 0; delay(10); Remote.clear(); } if(millis()-eventTime>time_holding && data >= play_pause - button_range && data <= play_pause + button_range && flag == 7) { Remote.mute(); flag = 0; delay(100); Remote.clear(); } if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 3 || data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 5 || data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 6) { flag = 0; } if (Serial.available()) // bt { a = Serial.parseInt(); //bt-21 строка if (a==1) { irsend.sendSony(0x4621, 15); // Sony Car preset- delay(40); irsend.sendSony(0x4621, 15); // Sony Car preset- delay(40); irsend.sendSony(0x4621, 15); // Sony Car preset- delay(40); } if (a==3) { irsend.sendSony(0x621, 15); // Sony Car preset+ delay(40); irsend.sendSony(0x621, 15); // Sony Car preset+ delay(40); irsend.sendSony(0x621, 15); // Sony Car preset+ delay(40); } if (a==5) { irsend.sendSony(0x2421, 15); // Sony Car vol+ delay(40); irsend.sendSony(0x2421, 15); // Sony Car vol+ delay(40); irsend.sendSony(0x2421, 15); // Sony Car vol+ delay(40); } if (a==4) { irsend.sendSony(0x6421, 15); // Sony Car vol- delay(40); irsend.sendSony(0x6421, 15); // Sony Car vol- delay(40); irsend.sendSony(0x6421, 15); // Sony Car vol- delay(40); } } val1 = analogRead(read1); //Обработка блока кнопок if (val1>10 && val1<1000) //фильтр от помех кнопок if (val1 != lastval1) //если значение изменилось {delay (pause1); //задержка if (val1>697&&val1<849) //Громкость + { irsend.sendSony(0x2421, 15); delay(40); irsend.sendSony(0x2421, 15); delay(40); irsend.sendSony(0x2421, 15); delay(40); lastval1=val1; } if (val1>851&&val1<994) //Громкость - { irsend.sendSony(0x6421, 15); delay(40); irsend.sendSony(0x6421, 15); delay(40); irsend.sendSony(0x6421, 15); delay(40); lastval1=val1; } if (val1>533&&val1<695) //Вперёд { irsend.sendSony(0x621, 15); //preset+ delay(40); irsend.sendSony(0x621, 15); //preset+ delay(40); irsend.sendSony(0x621, 15); //preset+ delay(40); lastval1=val1; } if (val1>380&&val1<532) //Назад { irsend.sendSony(0x4621, 15); //preset- delay(40); irsend.sendSony(0x4621, 15); //preset- delay(40); irsend.sendSony(0x4621, 15); //preset- delay(40); lastval1=val1; } } }
А что они должны делать? В чём выражается, что не работают? Нам надо самим исследование проводить? И, кстати, как он может работать, если он элементарно не компилируется?
Скетч компилируется ( может быть не компилируется из-за библиотек, библиотеки изменённые), иначе я бы не
смог залить его в ардуину.
Первый скетч работает с подрулевыми кнопками как hid клавиатура.
Второй - получает данные с планшета через bt и с подрулевых кнопок, далее выводит на передачу по IR .
Все понятно. У меня он и не думает компилироваться. В чём проблема Вы та и не объяснили. Видать, так надо.
Ну, удачи!
Странно, проверил ещё раз.
Для обработки кнопок как HID клавиатуры, изменена библиотека под Arduino v 1.0.5 и изменена библеотека IRemote, удалена модуляция IR кода ( нужно для того чтобы подать код на вход Remote магнитолы).
Два скетча, 1й - с 1 по 186 строку и 2й - с 187 по 272 строку, как отдельные скетчи работают при объединении в один скетч не работает (кнопки срабатывают не с первого нажатия, системы нет). Пробовал переставлять, в начало ставил 2й скетч результат тот же. Закоментить один из скетчей - долгое и глупое занятие. Может какие то операторы конфликтуют? Проблема в обработке кнопок, в двойной обработке - для IR и для HID.
Все понятно. У меня он и не думает компилироваться. В чём проблема Вы та и не объяснили. Видать, так надо.
Ну, удачи!
И на том спасибо, и вам не хворать!
И на том спасибо, и вам не хворать!
А чего Вы хотели?
Вас спросили в чём проблема и сказали, что не компилируется.
Вопрос "в чём проблема" Вы проигнорировали, а про компиляцию, сказали, что библиотеки изменены, но так не дали мне этих изменённых библиотек.
Конечно, можно было попробовать вытащить из Вас клещами и их, но ... кому это нужно, мне или Вам? Мне то нафига что-то из Вас вытягивать? Не хотите - не надо.
Запомните общее правило: если Вам нужна помощь - не создавайте искусственных проблем тому, кто хотел помочь. А Вы именно этим и занимались в данном топике.
Удачи!
С помощью вашей удачи, удалось найти ошибку. В 009 строке большая задержка, уменьшил до 50, всё работает.
Всего хорошего!
Тему закрываю.
Ну, вот и змечательно. Всего-то полгода прошло. Молодец! :)
Ну, вот и змечательно. Всего-то полгода прошло. Молодец! :)
Евгений Петрович, год проморгали.))))
Евгений Петрович, год проморгали.))))
Целых два :-)
Тем более :)