Re: управление драйвером жк lc75823
Вот так будет правильней
int cpec = map(analogRead(A0), 0,13, 0,1024);
for(int i = 0; i<=13;i++){
vu[i]= (cpec<<i)&1;
}
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
forum.rcl-radio.ru → Примеры кода → управление драйвером жк lc75823
Вот так будет правильней
int cpec = map(analogRead(A0), 0,13, 0,1024);
for(int i = 0; i<=13;i++){
vu[i]= (cpec<<i)&1;
}
Написал все буквы, как допустим сделать анимацию движущегося текста "HELLO" с права на лево ?
и еще проблема с анализатором спектра, хоть что на него не подавай на нем цифра 14, и на дисплее ничего не происходит
Лучше использовать одну функцию для вывода цифр и букв, цифры от 0 до 9 а дальше буквы 10 11 12 13 и тд. Так будет удобней
h1 = segm(1); h2 = segm(2); h3 = segm(3);h4 = segm(4);h5 = segm(5);h6 = segm(6);h7 = segm(7);h8 = segm(8);
print_out();
delay(300);
h1 = segm(1); h2 = segm(2); h3 = segm(3);h4 = segm(4);h5 = segm(5);h6 = segm(6);h7 = segm(7);h8 = segm(8);
print_out();
delay(300);
h1 = segm(1); h2 = segm(2); h3 = segm(3);h4 = segm(4);h5 = segm(5);h6 = segm(6);h7 = segm(7);h8 = segm(8);
print_out();
delay(300);
Просто через delay меняете значение переменных и все, для движущего текста.
я понимаю как это сделать, но очень большой получится код. Думал у вас получится как нибудь покомпактней
int cpec = map(analogRead(A0), 0,1023, 0, 14);
for(int i = 0; i<=13;i++){
vu[i]= (cpec<<i)&1;
}
я понимаю как это сделать, но очень большой получится код. Думал у вас получится как нибудь покомпактней
Можно через цикл , но там надо создавать массив
int arr[12]={12,13,14,10,10,10,10};
for (int i=0;i<=12;i++){
h1 = segm(arr[i]); h2 = segm(i+1); h3 = segm(i+2);h4 = segm(i+3);h5 = segm(i+4);h6 = segm(i+5);h7 = segm(i+6);h8 = segm(i+7);
print_out();
delay(300);
}
Это работать не будет правильно, просто набросок, как пример.
Проще сделать длинно.
Все так же, в мониторе порта 14, на дисплее тишина
и анимацию движения текста также у меня не получается сделать. Помогите с ней пожалуйста
Если Вы не удаляли все Serial.print из функции write_byte и открыли монитор порта, то работать ни его не будет. Надо удалить все Serial
И посмотреть то выдает переменная vu
int cpec = map(analogRead(A0), 0,1023, 0, 14);
for(int i = 0; i<=13;i++){
vu[i]= (cpec>>i)&1;
Serial.print(vu[i]);
}
Serial.println();
ещё нужда функция для очистки h1,h2,h3,h4,h5,h6,h7,h8 от текста, одной командой
все serial.print я удалил.
void clear_lcd(){
h1 = segm(11); h2 = segm(11); h3 = segm(11);h4 = segm(11);h5 = segm(11);h6 = segm(11);h7 = segm(11);h8 = segm(11);
print_out();
}
Посмотрите монитор порта
int cpec = map(analogRead(A0), 0,1023, 0, 14);
for(int i = 0; i<=13;i++){
vu[i]= (cpec>>i)&1;
Serial.print(vu[i]);
}
Serial.println();
все равно не работает, горит только 2 значка и всё
int cpec = map(analogRead(A0), 0,1023, 0, 13);
Serial.println(cpec);
Что в мониторе порта, должны меняться значения от 0 до 13
Без подтяжки к земле нечего не происходит, цифры медленно опускаются от 3 до 1 и все, реакции не на что нету. А если подтянуть к земле то в мониторе порта цифра 13
Должно быть наоборот при GND 0 при 5В 13
поменял порт на A1 все заработала, что то с портом A0 у меня
int cpec = map(analogRead(A0), 0,1023, 0, 13);
Serial.println(cpec);
switch(cpec){
case 0: vu[0]=0;vu[1]=0;vu[2]=0;vu[3]=0;vu[4]=0;vu[5]=0;vu[6]=0;vu[7]=0;vu[8]=0;vu[9]=0;vu[10]=0;vu[11]=0;vu[12]=0;vu[13]=0;break;
case 1: vu[0]=0;vu[1]=0;vu[2]=0;vu[3]=0;vu[4]=0;vu[5]=0;vu[6]=0;vu[7]=0;vu[8]=0;vu[9]=0;vu[10]=0;vu[11]=0;vu[12]=0;vu[13]=1;break;
case 2: vu[0]=0;vu[1]=0;vu[2]=0;vu[3]=0;vu[4]=0;vu[5]=0;vu[6]=0;vu[7]=0;vu[8]=0;vu[9]=0;vu[10]=0;vu[11]=0;vu[12]=1;vu[13]=1;break;
case 3: vu[0]=0;vu[1]=0;vu[2]=0;vu[3]=0;vu[4]=0;vu[5]=0;vu[6]=0;vu[7]=0;vu[8]=0;vu[9]=0;vu[10]=0;vu[11]=1;vu[12]=1;vu[13]=1;break;
и так далее до 13
}
можно попробовать так
switch(cpec){
case 0: vu={0,0,0,0,0,0,0,0,0,0,0,0,0,0};break;
case 1: vu={0,0,0,0,0,0,0,0,0,0,0,0,0,1};break;
case 2: vu={0,0,0,0,0,0,0,0,0,0,0,0,1,1};break;
и так далее до 13
}
Значит начал я создавать меню для микросхемы tda7461(для него мы с вами разрабатывали скетч) и столкнулся с проблемой(проблему я записал на видео и положил в архив)
Вот скетч
#define CE 3
#define CL 4
#define DI 5
// sw=6 dt=7 clk=8
int w;
unsigned long byte_1,byte_2,byte_3,byte_4,byte_5;
unsigned long h1,h2,h3,h4,h5,h6,h7,h8;
unsigned long kav_1=0,dvoetoh=0,toch=0,kav_2=0;
unsigned long vu[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};
unsigned long scm=1, beat=0, soft=0,pop=0;
unsigned long rnd=0,prt=0,lond=0,cif_1=0;
unsigned long el_12,el_11,el_10,el_9,el_8,el_7,el_6,el_5,el_4,el_3,el_2,el_1;
#define CLK 8 // CLK ENCODER
#define DT 7 // DT ENCODER
#define SW 6 // SW ENCODER
#define IN 2 // BUTTON INPUT
#include <Wire.h>
#include <EEPROM.h>
#include <Encoder.h>
#include <MsTimer2.h>
#include <TDA7461.h>
TDA7461 tda;
Encoder myEnc(CLK, DT);
long times,oldPosition = -999,newPosition;
int vol,vol_d,menu,z,z0,z1,bass,treb,in,gain0,gain1,gain2,gain3,gain4,gain5,bass_d,treb_d,menu1;
bool w2,w1,www;
void setup() {
Wire.begin();Serial.begin(9600);
pinMode(CE, OUTPUT);
pinMode(CL, OUTPUT);
pinMode(DI, OUTPUT);
digitalWrite(CE,LOW);
digitalWrite(CL,LOW);
pinMode(A0, INPUT_PULLUP);
delay(200);
MsTimer2::set(1, to_Timer);MsTimer2::start();
pinMode(IN,INPUT_PULLUP);
pinMode(SW, INPUT_PULLUP);
audio();
/*
clear_lcd();
delay(2000);
h1 = buk(7);
h2 = buk(4);
h3 = buk(12);
h4 = buk(12);
h5 = buk(15);
print_out();
delay(1500);
h1 = buk(27);
h2 = buk(27);
h3 = buk(27);
h4 = buk(27);
h5 = buk(27);
print_out();
delay(300);
h1 = buk(0);
h2 = buk(21);
h3 = buk(24);
print_out();
*/
vol=111;
bass=0;
treb=0;
}
void loop() {
if(digitalRead(SW)==0){menu++;if(menu>2){menu=0;}clear_lcd();times=millis();w=1;w1=1;www=1;delay(200);}
/////////////// VOLUME /////////////////////////////////////////////////////////
if(menu==0){
if (newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
vol=vol+newPosition;myEnc.write(0);newPosition=0;times=millis();w2=1;w1=1;vol_func();tda.setVolume(vol, 1);}
vol_d=map(vol,111,0,0,48);
int sec = vol_d;
h2 = buk(22);h3 = buk(15);h4 = buk(12);h7 = segm(sec%10);h6 = segm(sec/10%10);
print_out();
}
////////////// BASS /////////////////////////////////////////////////////////
if(menu==1){
if (newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
bass=bass-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;bass_func();tda.setBassTreb(bass, treb);}
bass_d=map(bass,7,-7,14,0);
int sec1 = bass_d;
h1 = buk(1);h2 = buk(0);h3 = buk(19);h4 = buk(19);h7 = segm(sec1%10);h6 = segm(sec1/10%10);
print_out();
}
////////////// TREB /////////////////////////////////////////////////////////
if(menu==2){
if (newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
treb=treb-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;treb_func();tda.setBassTreb(bass, treb);}
treb_d=map(treb,7,-7,14,0);
int sec2 = treb_d;
h1 = buk(20);h2 = buk(18);h3 = buk(4);h4 = buk(1);h7 = segm(sec2%10);h6 = segm(sec2/10%10);
print_out();
Serial.println(treb);
}
if(millis()-times>5000 ){
menu1=1;menu=3;clear_lcd();}
if(menu1==0){
}
if(menu1==1){
h1 = buk(0);
h2 = buk(21);
h3 = buk(24);
print_out();
}
int cpec = map(analogRead(A1), 0,1023, 0, 14);
switch(cpec){
case 0: vu[0]=0;vu[1]=0;vu[2]=0;vu[3]=0;vu[4]=0;vu[5]=0;vu[6]=0;vu[7]=0;vu[8]=0;vu[9]=0;vu[10]=0;vu[11]=0;vu[12]=0;vu[13]=0;break;
case 1: vu[0]=0;vu[1]=0;vu[2]=0;vu[3]=0;vu[4]=0;vu[5]=0;vu[6]=0;vu[7]=0;vu[8]=0;vu[9]=0;vu[10]=0;vu[11]=0;vu[12]=0;vu[13]=1;break;
case 2: vu[0]=0;vu[1]=0;vu[2]=0;vu[3]=0;vu[4]=0;vu[5]=0;vu[6]=0;vu[7]=0;vu[8]=0;vu[9]=0;vu[10]=0;vu[11]=0;vu[12]=1;vu[13]=1;break;
case 3: vu[0]=0;vu[1]=0;vu[2]=0;vu[3]=0;vu[4]=0;vu[5]=0;vu[6]=0;vu[7]=0;vu[8]=0;vu[9]=0;vu[10]=0;vu[11]=1;vu[12]=1;vu[13]=1;break;
case 4: vu[0]=0;vu[1]=0;vu[2]=0;vu[3]=0;vu[4]=0;vu[5]=0;vu[6]=0;vu[7]=0;vu[8]=0;vu[9]=1;vu[10]=0;vu[11]=1;vu[12]=1;vu[13]=1;break;
case 5: vu[0]=0;vu[1]=0;vu[2]=0;vu[3]=0;vu[4]=0;vu[5]=0;vu[6]=0;vu[7]=0;vu[8]=0;vu[9]=1;vu[10]=1;vu[11]=1;vu[12]=1;vu[13]=1;break;
case 6: vu[0]=0;vu[1]=0;vu[2]=0;vu[3]=0;vu[4]=0;vu[5]=0;vu[6]=0;vu[7]=0;vu[8]=1;vu[9]=1;vu[10]=1;vu[11]=1;vu[12]=1;vu[13]=1;break;
case 7: vu[0]=0;vu[1]=0;vu[2]=0;vu[3]=0;vu[4]=0;vu[5]=0;vu[6]=1;vu[7]=0;vu[8]=1;vu[9]=1;vu[10]=1;vu[11]=1;vu[12]=1;vu[13]=1;break;
case 8: vu[0]=0;vu[1]=0;vu[2]=0;vu[3]=0;vu[4]=0;vu[5]=0;vu[6]=1;vu[7]=1;vu[8]=1;vu[9]=1;vu[10]=1;vu[11]=1;vu[12]=1;vu[13]=1;break;
case 9: vu[0]=0;vu[1]=0;vu[2]=0;vu[3]=0;vu[4]=1;vu[5]=0;vu[6]=1;vu[7]=1;vu[8]=1;vu[9]=1;vu[10]=1;vu[11]=1;vu[12]=1;vu[13]=1;break;
case 10: vu[0]=0;vu[1]=0;vu[2]=0;vu[3]=1;vu[4]=1;vu[5]=0;vu[6]=1;vu[7]=1;vu[8]=1;vu[9]=1;vu[10]=1;vu[11]=1;vu[12]=1;vu[13]=1;break;
case 11: vu[0]=0;vu[1]=0;vu[2]=0;vu[3]=1;vu[4]=1;vu[5]=1;vu[6]=1;vu[7]=1;vu[8]=1;vu[9]=1;vu[10]=1;vu[11]=1;vu[12]=1;vu[13]=1;break;
case 12: vu[0]=0;vu[1]=1;vu[2]=0;vu[3]=1;vu[4]=1;vu[5]=1;vu[6]=1;vu[7]=1;vu[8]=1;vu[9]=1;vu[10]=1;vu[11]=1;vu[12]=1;vu[13]=1;break;
case 13: vu[0]=1;vu[1]=1;vu[2]=0;vu[3]=1;vu[4]=1;vu[5]=1;vu[6]=1;vu[7]=1;vu[8]=1;vu[9]=1;vu[10]=1;vu[11]=1;vu[12]=1;vu[13]=1;break;
case 14: vu[0]=1;vu[1]=1;vu[2]=1;vu[3]=1;vu[4]=1;vu[5]=1;vu[6]=1;vu[7]=1;vu[8]=1;vu[9]=1;vu[10]=1;vu[11]=1;vu[12]=1;vu[13]=1;break;
}
print_out();
}
void to_Timer(){newPosition = myEnc.read()/4;}
void vol_func(){if(vol>111){vol=111;}if(vol<0){vol=0;}}
void gain_func(){if(gain0>7){gain0=7;}if(gain0<0){gain0=0;}}
void bass_func(){if(bass>7){bass=7;}if(bass<-7){bass=-7;}}
void treb_func(){if(treb>7){treb=7;}if(treb<-7){treb=-7;}}
вот архив
Данный контент доступен только зарегистрированным пользователям.
а проблема в том что надпись AUX мерцает, и при попытке снова вернуться в меню настроек надпись остается. Прошу помощи только в этом, с остальным я сам.
Задумка в том, чтобы при загрузке первым предлагалось выставить громкость, после чего если действий не было 5 секунд высвечивалась надпись AUX(в будущем этом будет индикатор входа). Если захотелось повысить громкость нужно покрутить энкодер, надпись должна погаснуть и загореться меню настройки громкости.
if(millis()-times>5000 ){
menu1=1;menu=3;clear_lcd();}
По условию, если times больше 5 секунд Вы выводите AUX (menu1=1) и тут же стираете экран clear_lcd() и так постоянно.
if(millis()-times>5000 ){
menu1=1;menu=3;}else{menu=0;menu1=0;}
какой из этих пунктов включает loudness ?
tda.setLoudness(0, 0, 0, 0);
// int loud_att = 0...15 >>> 0...-15 dB
// bool loud_filter = 0...1 >>> on...off
// bool loud_f = 0...1 >>> 200...400 Hz
// bool loud_q = 0...1 >>> low...normal
bool loud_filter = 0...1 >>> on...off
forum.rcl-radio.ru → Примеры кода → управление драйвером жк lc75823
Форум работает на PunBB, при поддержке Informer Technologies, Inc
|