Объединить 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, всё работает.
Всего хорошего!
Тему закрываю.
Ну, вот и змечательно. Всего-то полгода прошло. Молодец! :)
Ну, вот и змечательно. Всего-то полгода прошло. Молодец! :)
Евгений Петрович, год проморгали.))))
Евгений Петрович, год проморгали.))))
Целых два :-)
Тем более :)