1

Тема: VU meter LGT8F328 OLED 0,91'

#include <Wire.h>
#include <Adafruit_GFX.h>     // https://github.com/adafruit/Adafruit-GFX-Library
#include <Adafruit_SSD1306.h> // https://github.com/adafruit/Adafruit_SSD1306
 Adafruit_SSD1306 display(128, 32, &Wire);

 int an_izm_r,an_izm_l;
 int ur_l,urr_l,ur_r,urr_r;

void setup() {
 Serial.begin(9600);
 Wire.begin();Wire.setClock(800000L);
 display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
 analogReadResolution(8);
 analogReference(INTERNAL1V024);
 pinMode(A0,INPUT);
 pinMode(A1,INPUT);
}

void loop() {
 an_izm_r = analogRead(A0);
 an_izm_l = analogRead(A1);
   urr_l = an_izm_l;
   urr_r = an_izm_r;
  if(urr_l<ur_l){ur_l=ur_l-4;}else{ur_l = an_izm_l;}
  if(urr_r<ur_r){ur_r=ur_r-4;}else{ur_r = an_izm_r;}
 testfillrect();
}


void testfillrect(void) {
  display.clearDisplay();
for(int i=0;i<=ur_l;i+=4){
  display.fillRect(i, 0, 2, 8, SSD1306_INVERSE);
}
  display.setTextSize(1); 
  display.setTextColor(SSD1306_WHITE);
  display.drawLine(0, 9, 125, 9, SSD1306_WHITE);
  display.setCursor(0,11);   
  display.println("-20  -10   -3");
  display.drawLine(90, 10, 125, 10, SSD1306_WHITE);
  display.setCursor(90,11);   
  display.setTextColor(SSD1306_BLACK, SSD1306_WHITE);
  display.println(" 0  +3");
  display.drawLine(0, 19, 125, 19, SSD1306_WHITE);
for(int i=0;i<=ur_r;i+=4){
  display.fillRect(i, 21, 2, 8, SSD1306_INVERSE);
}
  display.display();
}

2 (2023-07-08 23:48:37 отредактировано serega.grien.79)

Re: VU meter LGT8F328 OLED 0,91'

Ура, всё получилось, спасибо, но есть одно но, после подачи питания дисплей ничего не показывает, а начинает работать после нажатия на кнопку сброс(перезагрузка), что не есть хорошо, есть ли возможность исправить

3

Re: VU meter LGT8F328 OLED 0,91'

После
void setup() {

добавьте

delay(500);

4

Re: VU meter LGT8F328 OLED 0,91'

Вечер добрый. Не могу загрузить данный скетч. Программа выдает ошибку :  c:\Users\���\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.h:12:10: fatal error: Adafruit_I2CDevice.h: No such file or directory
#include <Adafruit_I2CDevice.h>
          ^~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

exit status 1

Compilation error: exit status 1

Что посоветуете в данном случае.

5

Re: VU meter LGT8F328 OLED 0,91'

Установите библиотеки с источника - Данный контент доступен только зарегистрированным пользователям.


http://forum.rcl-radio.ru/uploads/images/2023/11/aa8fd29c05453ef53509a0ed885d4dd5.png

6

Re: VU meter LGT8F328 OLED 0,91'

Большое спасибо, сейчас попробую.

7

Re: VU meter LGT8F328 OLED 0,91'

Всё равно выдаёт такую же ошибку.  \Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.h:12:10: fatal error: Adafruit_I2CDevice.h: No such file or directory
#include <Adafruit_I2CDevice.h>
          ^~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

exit status 1

Compilation error: exit status 1

8

Re: VU meter LGT8F328 OLED 0,91'

фото компиляции http://forum.rcl-radio.ru/uploads/images/2023/11/daf085a6375c89be46f272c222a92021.jpg

9

Re: VU meter LGT8F328 OLED 0,91'

У меня версия Arduino IDE 1.8.15  попробуйте установить эту версию.

10

Re: VU meter LGT8F328 OLED 0,91'

Спасибо, хорошо попробую.

11

Re: VU meter LGT8F328 OLED 0,91'

Вечер добрый! Пробовал заливать в Arduino IDE 1.8.19 таже история.

12

Re: VU meter LGT8F328 OLED 0,91'

Вечер добрый! Сегодня специально установил Arduino IDE 1.8.15 результат такой же отрицательный. Похоже тут дело ни в версии Arduino IDE, а в чём - то другом.http://forum.rcl-radio.ru/uploads/images/2023/12/6120c5cfa619b4c9c83e741fbd2f4cbc.png

13

Re: VU meter LGT8F328 OLED 0,91'

В Вашем случае рекомендуют поставить дополнительно библиотеку - https://github.com/adafruit/Adafruit_BusIO.git

14 (2023-12-02 20:27:24 отредактировано Laysteed)

Re: VU meter LGT8F328 OLED 0,91'

Добрый вечер. Сейчас занимаюсь этим же, по вашему совету поставил быблиотеку выше. Теперь при компиляции выдает ошибку.http://forum.rcl-radio.ru/uploads/images/2023/12/c37a9f636b6b817aa736383ddcc26712.png
Не подскажите, что можно сделать?

Сразу скажу, что хочу на голом мк atmega328 сделать, может это как-то влияет? Сейчас просто компилирую, поэтому не обращайте внимания на Arduino Uno снизу.

15

Re: VU meter LGT8F328 OLED 0,91'

Вы используете не LGT8F328.

16

Re: VU meter LGT8F328 OLED 0,91'

Да, т.е. ничего нельзя сделать? Хотел минимального размера платы, поэтому на atmega328 делаю

17

Re: VU meter LGT8F328 OLED 0,91'

Удалите эти строки

analogReadResolution(8);
analogReference(INTERNAL1V024);

18

Re: VU meter LGT8F328 OLED 0,91'

Спасибо всё заработало! А можно настроить VU meter так чтобы он сохранял пики на долю секунды, как в других проектах.

19

Re: VU meter LGT8F328 OLED 0,91'

А можно настроить VU meter так чтобы он сохранял пики на долю секунды, как в других проектах.

Возможно позже я доработаю этот проект.

20

Re: VU meter LGT8F328 OLED 0,91'

Спасибо большое, было бы не плохо !

21

Re: VU meter LGT8F328 OLED 0,91'

Здравствуйте, Вы пока так и не нашли время доработать проект ?

22

Re: VU meter LGT8F328 OLED 0,91'

Нужно протестировать доработку

#include <Wire.h>
#include <Adafruit_GFX.h>     // https://github.com/adafruit/Adafruit-GFX-Library
#include <Adafruit_SSD1306.h> // https://github.com/adafruit/Adafruit_SSD1306
                              // https://github.com/adafruit/Adafruit_BusIO.git
 Adafruit_SSD1306 display(128, 32, &Wire);

 int an_izm_r,an_izm_l;
 int ur_l,urr_l,ur_r,urr_r;
 int u_l0[20],u_r0[20];
 int ur,ul,urr,ull,urrr,ulll;
 int x,i1,u_maxr,u_maxl;

void setup() {
 Serial.begin(9600);
 Wire.begin();Wire.setClock(800000L);
 delay(500);
 display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
 analogReadResolution(8);
 analogReference(INTERNAL1V024);
 pinMode(A0,INPUT);
 pinMode(A1,INPUT);
}

void loop() {
 an_izm_r = analogRead(A0);
 an_izm_l = analogRead(A1);
   urr_l = an_izm_l;
   urr_r = an_izm_r;
  if(urr_l<ur_l){ur_l=ur_l-4;}else{ur_l = an_izm_l;}
  if(urr_r<ur_r){ur_r=ur_r-4;}else{ur_r = an_izm_r;}

  if(urr_l>124){urr_l=124;}
  if(urr_r>124){urr_r=124;}

  if(ur_l>124){ur_l=124;}
  if(ur_r>124){ur_r=124;}

  i1++;if(i1<15){u_l0[i1]=abs(urr_l);u_r0[i1]=abs(urr_r);}else{i1=0;}
  if(i1==14){u_maxr=0;u_maxl=0;
    for(x=1;x<=15;x++){
      u_maxl=max(u_maxl,u_l0[x]);
      u_maxr=max(u_maxr,u_r0[x]);}}
 
  if(u_maxl<ulll){ulll=ulll-4;}else{ulll = u_maxl;}
  if(u_maxr<urrr){urrr=urrr-4;}else{urrr = u_maxr;}
 
  if(u_maxl<=urr_l){u_maxl=urr_l+4;} 
  if(u_maxr<=urr_r){u_maxr=urr_r+4;} 
  
 testfillrect();
}


void testfillrect(void) {
  display.clearDisplay();
if(ulll>4) { display.fillRect(ulll, 0, 2, 8, SSD1306_INVERSE);}
for(int i=0;i<=ur_l;i+=4){
  display.fillRect(i, 0, 2, 8, SSD1306_INVERSE);
}
  display.setTextSize(1); 
  display.setTextColor(SSD1306_WHITE);
  display.drawLine(0, 9, 125, 9, SSD1306_WHITE);
  display.setCursor(0,11);   
  display.println("-20  -10   -3");
  display.drawLine(90, 10, 125, 10, SSD1306_WHITE);
  display.setCursor(90,11);   
  display.setTextColor(SSD1306_BLACK, SSD1306_WHITE);
  display.println(" 0  +3");
  display.drawLine(0, 19, 125, 19, SSD1306_WHITE);
 if(urrr>4) {display.fillRect(urrr, 21, 2, 8, SSD1306_INVERSE);}
for(int i=0;i<=ur_r;i+=4){
  display.fillRect(i, 21, 2, 8, SSD1306_INVERSE);
} 
  display.display();
}

23

Re: VU meter LGT8F328 OLED 0,91'

#include <Wire.h>
#include <Adafruit_GFX.h>     // https://github.com/adafruit/Adafruit-GFX-Library
#include <Adafruit_SSD1306.h> // https://github.com/adafruit/Adafruit_SSD1306
                              // https://github.com/adafruit/Adafruit_BusIO.git
 Adafruit_SSD1306 display(128, 32, &Wire);

 int an_izm_r,an_izm_l;
 int ur_l,urr_l,ur_r,urr_r;
 int u_l0[20],u_r0[20];
 int ur,ul,urr,ull,urrr,ulll;
 int x,i1,u_maxr,u_maxl;

void setup() {
 Serial.begin(9600);
 Wire.begin();Wire.setClock(800000L);
 delay(500);
 display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
 analogReadResolution(8);
 analogReference(INTERNAL1V024);
 pinMode(A0,INPUT);
 pinMode(A1,INPUT);
}

void loop() {
 an_izm_r = analogRead(A0);
 an_izm_l = analogRead(A1);
   urr_l = an_izm_l;
   urr_r = an_izm_r;
  if(urr_l<ur_l){ur_l=ur_l-2;}else{ur_l = an_izm_l;}
  if(urr_r<ur_r){ur_r=ur_r-2;}else{ur_r = an_izm_r;}

  if(urr_l>124){urr_l=124;}
  if(urr_r>124){urr_r=124;}

  if(ur_l>124){ur_l=124;}
  if(ur_r>124){ur_r=124;}

  i1++;if(i1<15){u_l0[i1]=abs(urr_l);u_r0[i1]=abs(urr_r);}else{i1=0;}
  if(i1==14){u_maxr=0;u_maxl=0;
    for(x=1;x<=15;x++){
      u_maxl=max(u_maxl,u_l0[x]);
      u_maxr=max(u_maxr,u_r0[x]);}}
 
  if(u_maxl<ulll){ulll=ulll-4;}else{ulll = u_maxl;}
  if(u_maxr<urrr){urrr=urrr-4;}else{urrr = u_maxr;}
 
  if(u_maxl<=urr_l){u_maxl=urr_l+4;} 
  if(u_maxr<=urr_r){u_maxr=urr_r+4;} 
  
 testfillrect();
}


void testfillrect(void) {
  display.clearDisplay();
if(ulll>4) { display.fillRect(ulll, 0, 2, 8, SSD1306_INVERSE);}
for(int i=0;i<=ur_l;i+=4){
  display.fillRect(i, 0, 2, 8, SSD1306_INVERSE);
}
  display.setTextSize(1); 
  display.setTextColor(SSD1306_WHITE);
  display.drawLine(0, 9, 125, 9, SSD1306_WHITE);
  display.setCursor(0,11);   
  display.println("-20  -10   -3");
  display.drawLine(90, 10, 125, 10, SSD1306_WHITE);
  display.setCursor(90,11);   
  display.setTextColor(SSD1306_BLACK, SSD1306_WHITE);
  display.println(" 0  +3");
  display.drawLine(0, 19, 125, 19, SSD1306_WHITE);
 if(urrr>4) {display.fillRect(urrr, 21, 2, 8, SSD1306_INVERSE);}
for(int i=0;i<=ur_r;i+=4){
  display.fillRect(i, 21, 2, 8, SSD1306_INVERSE);
} 
  display.display();
}

24

Re: VU meter LGT8F328 OLED 0,91'

Спасибо большое, обязательно завтра протестирую !!!

25

Re: VU meter LGT8F328 OLED 0,91'

Оба варианта рабочие. Большое спасибо за Ваш труд.
Второй вариант работает чуть плавнее.