Объединить 2 скетча в один

polok
Offline
Зарегистрирован: 18.09.2016

Проблема в следующем:

Поскольку я в программировании полный ноль, использовл чужие скетчи изменённые под свои задачи.

Два работающих отдельно скетча объединяю в один - не работает.

Прошу указать на ошибку.

#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;
    }
  }
}


 

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

А что они должны делать? В чём выражается, что не работают? Нам надо самим исследование проводить? И, кстати, как он может работать, если он элементарно не компилируется?

polok
Offline
Зарегистрирован: 18.09.2016

Скетч компилируется ( может быть не компилируется из-за библиотек, библиотеки изменённые), иначе я бы не

смог залить его в ардуину.

Первый скетч работает с подрулевыми кнопками как hid клавиатура.

Второй - получает данные с планшета через bt и с подрулевых кнопок, далее выводит на передачу по IR .

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

Все понятно. У меня он и не думает компилироваться. В чём проблема Вы та и не объяснили. Видать, так надо.

Ну, удачи!

polok
Offline
Зарегистрирован: 18.09.2016

Странно, проверил ещё раз.

polok
Offline
Зарегистрирован: 18.09.2016

Для обработки кнопок как HID клавиатуры, изменена библиотека под Arduino v 1.0.5 и изменена библеотека IRemote, удалена модуляция IR кода ( нужно для того чтобы подать код на вход Remote магнитолы).

Два скетча, 1й - с 1 по 186 строку и 2й - с 187 по 272 строку, как отдельные скетчи работают при объединении в один скетч не работает (кнопки срабатывают не с первого нажатия, системы нет). Пробовал переставлять, в начало ставил 2й скетч результат тот же. Закоментить один из скетчей - долгое и глупое занятие. Может какие то операторы конфликтуют? Проблема в обработке кнопок, в двойной обработке - для IR и для HID.

polok
Offline
Зарегистрирован: 18.09.2016

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

Все понятно. У меня он и не думает компилироваться. В чём проблема Вы та и не объяснили. Видать, так надо.

Ну, удачи!

И на том спасибо, и вам не хворать!

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

polok пишет:

И на том спасибо, и вам не хворать!

А чего Вы хотели?

Вас спросили в чём проблема и сказали, что не компилируется.

Вопрос "в чём проблема" Вы проигнорировали, а про компиляцию, сказали, что библиотеки изменены, но так не дали мне этих изменённых библиотек.

Конечно, можно было попробовать вытащить из Вас клещами и их, но ... кому это нужно, мне или Вам? Мне то нафига что-то из Вас вытягивать? Не хотите - не надо.

Запомните общее правило: если Вам нужна помощь - не создавайте искусственных проблем тому, кто хотел помочь. А Вы именно этим и занимались в данном топике.

Удачи!

polok
Offline
Зарегистрирован: 18.09.2016

С помощью вашей удачи, удалось найти ошибку. В 009 строке большая задержка, уменьшил до 50, всё работает.

Всего хорошего!

polok
Offline
Зарегистрирован: 18.09.2016

 Тему закрываю.

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

Ну, вот и змечательно. Всего-то полгода прошло. Молодец! :)

bwn
Offline
Зарегистрирован: 25.08.2014

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

Ну, вот и змечательно. Всего-то полгода прошло. Молодец! :)

Евгений Петрович, год проморгали.))))

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

bwn пишет:

Евгений Петрович, год проморгали.))))

Целых два :-)

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

Тем более :)