Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer
LCD2004 с I2C модулем
А под него новый скетч нужен с библиотекой?
Вижу, что в скетче уже есть изменения под новый дисплей, так?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
forum.rcl-radio.ru → Библиотеки → BD37534FV - Sound Processor with Built-in 3-band Equalizer
LCD2004 с I2C модулем
А под него новый скетч нужен с библиотекой?
Вижу, что в скетче уже есть изменения под новый дисплей, так?
Эта та же библиотека которая используется для модуля I2C PCF8574 для LCD1602
LiquidCrystal_I2C.h // http://forum.rcl-radio.ru/misc.php?acti … download=1
Если нет PCF8574, то можно использовать простое (параллельное подключение) на любые 6 цифровых выходов (если не хватает свободных (не хватит, это точно), то часть кнопок можно перекинуть на аналоговый порт)
Эта та же библиотека которая используется для модуля I2C PCF8574 для LCD1602
LiquidCrystal_I2C.h // http://forum.rcl-radio.ru/misc.php?acti … download=1
Если нет PCF8574, то можно использовать простое (параллельное подключение) на любые 6 цифровых выходов (если не хватает свободных (не хватит, это точно), то часть кнопок можно перекинуть на аналоговый порт)
Да, у меня сейчас стоит дисплей LCD1602 с I2c адаптером.
Можно просто заменить его на LCD2004 с I2C модулем без изменения скетча?
Можно, но у Вас нижние строки будут пустые.
Может этот вариант Вам подойдет - http://forum.rcl-radio.ru/viewtopic.php?id=133
Можно, но у Вас нижние строки будут пустые.
Может этот вариант Вам подойдет - http://forum.rcl-radio.ru/viewtopic.php?id=133
Да, может
Не помогло при delay 100, сделал delay равным даже 500, пульт начал работать медленно. Но все равно, тот же параметр изменения фазы при установке на 180 меняется медленно на 0 и потом снова на 180. Как-будто происходит двойное нажатие кнопки пульта. Такое есть и при переборе параметров других функций в Menu 2. Например Bass Q изменяется с энкодера 0,5-1-1,5-2, а с пульта ИК - 0,5-1,5-2. Параметр 2 пропускается.
Вернул как было - убрал delay из строки.Создайте отдельную функцию:
void cl2(){ir.value=0;delay(300);}и там где нужна меньшая скорость переключения вместо cl1() укажите cl2()
Например:
if(ir.value==IR_3){faza++;gr1=1;gr2=0;cl2();w2=1;faza_func();audio();}// кнопка > if(ir.value==0xFFFFFFFF and gr1==1){faza++;gr2=0;cl2();w2=1;faza_func();audio();}// кнопка >>>>>> if(ir.value==IR_4){faza--;gr1=0;gr2=1;cl2();w2=1;faza_func();audio();}// кнопка < if(ir.value==0xFFFFFFFF and gr2==1){faza--;gr1=0;cl2();w2=1;faza_func();audio();}// кнопка <<<<<<
А можно подробнее о функции? В каком месте скетча ее создавать?
Есть функция:
void cl1(){ir.value=0;delay(100);}
сделайте такую же, но lc2()
void cl2(){ir.value=0;delay(300);}// увеличите время задержки
расположите ее после(или перед - это не имеет значения):
void cl1(){ir.value=0;delay(100);}
там где нужно медленно укажите cl2(), например при смене фазы:
if(ir.value==IR_3){faza++;gr1=1;gr2=0;cl2();w2=1;faza_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){faza++;gr2=0;cl2();w2=1;faza_func();audio();}// кнопка >>>>>>
if(ir.value==IR_4){faza--;gr1=0;gr2=1;cl2();w2=1;faza_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){faza--;gr1=0;cl2();w2=1;faza_func();audio();}// кнопка <<<<<<
там где надо быстро, используйте cl1();
Есть функция:
void cl1(){ir.value=0;delay(100);}
сделайте такую же, но lc2()
void cl2(){ir.value=0;delay(300);}// увеличите время задержки
расположите ее после(или перед - это не имеет значения):
void cl1(){ir.value=0;delay(100);}там где нужно медленно укажите cl2(), например при смене фазы:
if(ir.value==IR_3){faza++;gr1=1;gr2=0;cl2();w2=1;faza_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){faza++;gr2=0;cl2();w2=1;faza_func();audio();}// кнопка >>>>>>
if(ir.value==IR_4){faza--;gr1=0;gr2=1;cl2();w2=1;faza_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){faza--;gr1=0;cl2();w2=1;faza_func();audio();}// кнопка <<<<<<там где надо быстро, используйте cl1();
Это в самом конце скетча?
да, в самом конце
да, в самом конце
Спасибо, попробую!
liman324 пишет:Есть функция:
void cl1(){ir.value=0;delay(100);}
сделайте такую же, но lc2()
void cl2(){ir.value=0;delay(300)d;}// увеличите время задержки
расположите ее после(или перед - это не имеет значения):
void cl1(){ir.value=0;delay(100);}там где нужно медленно укажите cl2(), например при смене фазы:
if(ir.value==IR_3){faza++;gr1=1;gr2=0;cl2();w2=1;faza_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){faza++;gr2=0;cl2();w2=1;faza_func();audio();}// кнопка >>>>>>
if(ir.value==IR_4){faza--;gr1=0;gr2=1;cl2();w2=1;faza_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){faza--;gr1=0;cl2();w2=1;faza_func();audio();}// кнопка <<<<<<там где надо быстро, используйте cl1();
Это в самом конце скетча?
Попробовал так сделать - не помогло. Иногда при смене фазы с пульта параметр 180 меняется на 0, и затем самопроизвольно меняется на 180. Т.е. все осталось как было, только изменения чуть замедлились, delay=300.
Так же и в других параметрах, где выбор идет по кольцу, некоторые параметры самопроизвольно проскакивают, например после 1 должен быть 1,5, а он проскакивает далее на 2.
Использовал уже 2 типа ИК приемников.
С энкодера управление работает отлично, без таких сбоев.
if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();time=millis();w=1;}// IR приемник - чтение, в мониторе порта отображаются коды кнопок
замените на
if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();time=millis();w=1;delay(200);}// IR приемник - чтение, в мониторе порта отображаются коды кнопок
Заметил интересную особенность - если нажимать кнопку пульта однократно для изменения параметра фазы, например, то иногда параметр меняется с 0 на 180 и снова на 0. И при этом на Ардуино светодиод TX мигает дважды! Как будто кнопка пульта была нажата дважды! При нормальной работе светодиод TX при нажатии кнопки мигает однократно.
Это похоже на дребезг кнопок пульта. Такое иногда еще встречается при изменении громкости.
Можно ли как-то в скетче сделать работу кнопок ИК пульта более четкой?
if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();time=millis();w=1;}// IR приемник - чтение, в мониторе порта отображаются коды кнопок
замените на
if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();time=millis();w=1;delay(200);}// IR приемник - чтение, в мониторе порта отображаются коды кнопок
Не помогло (((.
Задержка при переключениях увеличилась, но нажатия с дребезгом иногда есть.
новая переменная:
long t_ir;
if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();time=millis();w=1;delay(200);t_ir=millis();}// IR приемник - чтение, в мониторе порта отображаются коды кнопок
if(millis()-t_ir>300){
if(ir.value==IR_3){faza++;gr1=1;gr2=0;cl2();w2=1;faza_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){faza++;gr2=0;cl2();w2=1;faza_func();audio();}// кнопка >>>>>>
if(ir.value==IR_4){faza--;gr1=0;gr2=1;cl2();w2=1;faza_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){faza--;gr1=0;cl2();w2=1;faza_func();audio();}// кнопка <<<<<<
}
В каком месте скетча ее вставить?
unsigned long time,oldPosition = -999,newPosition;
заменить на
unsigned long time,oldPosition = -999,newPosition,t_ir;
if(ir.value==IR_3){faza++;gr1=1;gr2=0;cl2();w2=1;faza_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){faza++;gr2=0;cl2();w2=1;faza_func();audio();}// кнопка >>>>>>
if(ir.value==IR_4){faza--;gr1=0;gr2=1;cl2();w2=1;faza_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){faza--;gr1=0;cl2();w2=1;faza_func();audio();}// кнопка <<<<<<
заменить на
if(millis()-t_ir>300){
if(ir.value==IR_3){faza++;gr1=1;gr2=0;cl2();w2=1;faza_func();audio();}// кнопка >
if(ir.value==0xFFFFFFFF and gr1==1){faza++;gr2=0;cl2();w2=1;faza_func();audio();}// кнопка >>>>>>
if(ir.value==IR_4){faza--;gr1=0;gr2=1;cl2();w2=1;faza_func();audio();}// кнопка <
if(ir.value==0xFFFFFFFF and gr2==1){faza--;gr1=0;cl2();w2=1;faza_func();audio();}// кнопка <<<<<<
}
if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();time=millis();w=1;delay(200);}// IR приемник - чтение, в мониторе порта отображаются коды кнопок
заменить на
if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();time=millis();w=1;delay(200);t_ir=millis();}// IR приемник - чтение, в мониторе порта отображаются коды кнопок
unsigned long time,oldPosition = -999,newPosition;
заменить на
unsigned long time,oldPosition = -999,newPosition,t_ir;
------ а это в каком месте скетча?
Ну или просто добавить в конце новую переменную t_ir
unsigned long time,oldPosition = -999,newPosition,t_ir;
Ну или просто добавить в конце новую переменную t_ir
unsigned long time,oldPosition = -999,newPosition,t_ir;
В самый конец скетча?
Нет, там где объявлены все переменные (в начале скетча):
byte a1[8] = {0b00000,0b10101,0b10101,0b10101,0b10101,0b10101,0b10101,0b00000};
byte a2[8] = {0b00000,0b10100,0b10100,0b10100,0b10100,0b10100,0b10100,0b00000};
byte a3[8] = {0b00000,0b10000,0b10000,0b10000,0b10000,0b10000,0b10000,0b00000};
unsigned long time,oldPosition = -999,newPosition, t_ir ;
int gr1,gr2,vol,vol_d,z,z0,z1,w,w2,menu,treb,treb_d,middle,middle_d,bass,bass_d,in,mute,power,menu2=100,www,gain0,gain1,gain2,gain3,gain_d,lon_f,lon,lon_d;
int out,vol_out,rf,lf,rt,lt,sab,treb_c,mid_c,bas_c,sab_f,treb_q,mid_q,bas_q,faza;
Все сделал. Часть скетча с фазой должна выглядеть так?
Вот крупнее масштаб
Протестировал - и все так же, иногда отсылаются двойные команды, светодиод TX мигает дважды при однократном нажатии на кнопки ИК пульта. Причем расстояние от пульта до приемника роли не играет.
forum.rcl-radio.ru → Библиотеки → BD37534FV - Sound Processor with Built-in 3-band Equalizer
Форум работает на PunBB, при поддержке Informer Technologies, Inc
|