51

Re: VU meter + oled 0.96'

Я уже неделю борюсь с этим дисплеем,тоже не понимаю ,не поддается. Сейчас код общий скину.

52

Re: VU meter + oled 0.96'

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7789.h>
#define CS        5
#define DC        2
#define MOSI      23
#define SCLK       18
#define RST       4

Adafruit_ST7789 tft = Adafruit_ST7789(CS, DC, RST);

#define GAIN      100 //1
#define STEP      3
#define LOW_SOUND 50 //1
#define MAX_SOUND 600 //260 // для первого дисплея

#define GAIN_TWO     1 // 100
#define STEP_TWO      3
#define LOW_SOUND_TWO 1 //50
#define MAX_SOUND_TWO 700 //600 // для второго дисплея

  int strela=-45;
  int hMeter = 65;                      
  int vMeter = 85;                      
  int rMeter = 80;
  int ur,urr;
 
  int strela_two=-45;
  int hMeter_two = 65;                      
  int vMeter_two = 85;                      
  int rMeter_two = 80;
  int ur_two,urr_two;
  int a1_old, a2_old;
  
void setup(void) {
    //SPI.begin();
    //tft.setSPISpeed(80000000);
    //Serial.begin(9600);
     tft.init(240, 320);
    //tft.init(240, 320,SPI_MODE3);
    tft.setRotation(3);
    tft.fillScreen(ST77XX_BLACK);
    delay(100);
    tft.setTextColor(ST77XX_GREEN);
    tft.setTextSize(1);
    //tft.setCursor(18, 82);
    //tft.print("Hello world!");
    pinMode(19, OUTPUT);
    digitalWrite(19,0);
    pinMode(32, INPUT);
}

void loop() {
         tft.setTextSize(1);
       strela = map(log(analogRead(32))*GAIN, LOW_SOUND,MAX_SOUND, -45,45);
       strela = constrain(strela, -45, 45);
       urr = strela;if(urr<ur){ur=ur-STEP;}else{ur = strela;}

       strela_two = map(analogRead(33)*GAIN_TWO, LOW_SOUND_TWO,MAX_SOUND_TWO, -45,45);
       strela_two = constrain(strela_two, -45, 45);
       urr_two = strela_two;if(urr_two<ur_two){ur_two=ur_two-STEP_TWO;}else{ur_two = strela_two;}
      // adc0 = analogRead(33);
      // Serial.print("Voltage: ");
      // Serial.println(adc0);//Serial.println(" ");
 
       /////////////////////////////////// PRINT ///////////////////////////////////////// 
       //tft.fillScreen(ST77XX_BLACK);
       //tft.drawLine(28, 102, 84, 20, ST77XX_BLUE);// line 1
       //tft.drawLine(106, 102, 124, 20, ST77XX_BLUE);tft.drawLine(106, 101, 124, 19, ST77XX_BLUE);// line 2
       //tft.drawLine(21, 105, 84, 23, ST77XX_BLUE);// line3
       /*display.drawLine(10, 20, 84, 20, 1);// line 1
       display.drawLine(88, 20, 124, 20, 1);display.drawLine(88, 19, 124, 19, 1);// line 2
       display.drawLine(3, 23, 84, 23, 1);// line3*/
 
       byte b1_2[10]{95,108,124,10,33,60,84,50,68,77};
       byte c1_2[10]{15,15,15,15,15,15,15,17,17,17};

       byte b2_2[10]{95,108,124,10,33,60,84,50,68,77};
       byte c2_2[10]{15,15,15,15,15,15,15,17,17,17};

  
       //for(int i=0;i<10;i++){tft.drawLine(b1_2[i]+18, 102, b1_2[i], c1_2[i], ST77XX_BLUE);//display.drawLine(b2_2[i], 20, b2_2[i], c2_2[i], 1);} 
       byte b3[5]{3,25,48,67,84};
       byte b4[5]{3,25,48,67,84};
       //for(int i=0;i<5;i++){tft.drawLine(b3[i]+18, 105, b3[i], 27, ST77XX_BLUE);//display.drawLine(b4[i], 23, b4[i], 27, 1);}

       tft.setCursor(23, 87);
       tft.print("20");
       tft.setCursor(46, 87);
       tft.print("10");
       tft.setCursor(76, 87);
       tft.print("3");
       tft.setCursor(100, 87);
       tft.print("0");
       tft.setCursor(111, 87);
       tft.print("1");
       /*display.setCursor(5, 5);
       display.print("20");
       display.setCursor(28, 5);
       display.print("10");
       display.setCursor(58, 5);
       display.print("3");
       display.setCursor(82, 5);
       display.print("0");
       display.setCursor(93, 5);
       display.print("1");*/
       tft.setCursor(19, 112);
       tft.print("0");
       tft.setCursor(38, 112);
       tft.print("25");
       /*display.setCursor(1, 30);
       display.print("0");
       display.setCursor(20, 30);
       display.print("25");*/
       tft.setCursor(61, 112);
       tft.print("50");
      // display.setCursor(43, 30);
      // display.print("50");
       tft.setCursor(79, 112);
       tft.print("75");
      // display.setCursor(61, 30);
      // display.print("75");
       tft.setCursor(94, 112);
       tft.print("100");
      // display.setCursor(76, 30);
     //  display.print("100");
       tft.setCursor(124, 87);
       tft.print("2");
     //  display.setCursor(106, 5);
     //  display.print("2");
       tft.setCursor(140, 87);
       tft.print("3");
     //  display.setCursor(122, 5);
     //  display.print("3");
       tft.setCursor(21, 132);tft.print("-");tft.setCursor(137, 132);tft.print("+");
       tft.setCursor(58, 132);tft.print("VU meter");
     //  display.setCursor(3, 50);display.print("-");display.setCursor(119, 50);display.print("+");
    //   display.setCursor(40, 50);display.print("VU meter");
 
       int a1 = (hMeter + (sin(ur / 57.296) * rMeter)); // meter needle horizontal coordinate
       int a2 = (vMeter - (cos(ur / 57.296) * rMeter)); // meter needle vertical coordinate
      // Serial.println(a1);
      // Serial.println(a2);
      // int a3 = (hMeter_two + (sin(ur_two / 57.296) * rMeter_two)); // meter needle horizontal coordinate
     //  int a4 = (vMeter_two - (cos(ur_two / 57.296) * rMeter_two)); // meter needle vertical coordinate
     if(a1<8){a1=8;}
     if(a2<28){a2=28;}
     if(a1 !=8 && a2 !=28){
      tft.drawLine(a1_old+18, a2_old+82, hMeter+18, vMeter+82, ST77XX_BLACK);}
      tft.drawLine(a1+18, a2+82, hMeter+18, vMeter+82, ST77XX_BLUE);
       //display.drawLine(a3, a4, hMeter_two, vMeter_two, 1);
       a1_old = a1;
       a2_old = a2;
      
      // if (ur != strela_ups) {
      // tft.drawLine(a1+18, a2+82, hMeter+18, vMeter+82, ST77XX_BLACK);
          //tft.drawLine(a1+19, a2+83, hMeter+15, vMeter+85, ST77XX_BLACK);
      // strela_ups = ur;}
}

53

Re: VU meter + oled 0.96'

так пробовали?

if(a1<8){a1=8;}
     if(a2<28){a2=28;}

if(a1 !=8 && a2 !=28){
      tft.drawLine(a1_old+18, a2_old+82, hMeter+18, vMeter+82, ST77XX_BLACK);}
if(a1 >8 && a2 >28){
      tft.drawLine(8+18, 28+82, hMeter+18, vMeter+82, ST77XX_BLACK);}

tft.drawLine(a1+18, a2+82, hMeter+18, vMeter+82, ST77XX_BLUE);
     
       a1_old = a1;
       a2_old = a2;

54

Re: VU meter + oled 0.96'

liman324 пишет:

так пробовали?

if(a1<8){a1=8;}
     if(a2<28){a2=28;}

if(a1 !=8 && a2 !=28){
      tft.drawLine(a1_old+18, a2_old+82, hMeter+18, vMeter+82, ST77XX_BLACK);}
if(a1 >8 && a2 >28){
      tft.drawLine(8+18, 28+82, hMeter+18, vMeter+82, ST77XX_BLACK);}

tft.drawLine(a1+18, a2+82, hMeter+18, vMeter+82, ST77XX_BLUE);
     
       a1_old = a1;
       a2_old = a2;

Да,сейчас проверил. Тоже самое,срезанные стрелки сверху и не затирает.(как на фото ранее)