Advertisement
elektronek

Attila Csergo - mono VUmeter s u8g2

Sep 16th, 2019
340
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  *  originál původně pro knihovnu adafruit, přepsáno na u8g2 pro Attila Csergo
  3.  *  bitmapa generovana nově pomocí online nástroje BMP to XBM
  4.  *  RESET pin displeje připojen na VCC +5V, v init stringu jako U8X8_PIN_NONE
  5.  */
  6. #include <Arduino.h>
  7. #include <U8g2lib.h>
  8. #include <SPI.h>
  9.  
  10. U8G2_SH1106_128X64_NONAME_F_4W_HW_SPI u8g2(U8G2_R0, /*cs=*/ 10, /*dc=*/ 9, U8X8_PIN_NONE);
  11.  
  12. int analogInput = A0;                 // analog input for outside audio source
  13. int hMeter = 65;                      // horizontal center for needle animation
  14. int vMeter = 85;                      // vertical center for needle animation (outside of dislay limits)
  15. int rMeter = 80;                      // length of needle animation or arch of needle travel
  16.  
  17. const int sampleWindow = 50;          // sample window width in mS (50 mS = 20Hz)
  18. unsigned int sample;
  19.  
  20. static const unsigned char PROGMEM VUMeter[] = {
  21.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  22.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  23.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  24.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  25.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  26.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  27.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  28.   0x00, 0x00, 0x60, 0xC0, 0x00, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
  29.   0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x90, 0x20, 0x01, 0x84, 0x04, 0x00,
  30.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x19, 0x10, 0x60, 0xC0,
  31.   0x01, 0x84, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  32.   0x25, 0x08, 0x90, 0x00, 0x01, 0x84, 0x04, 0xE0, 0x00, 0x00, 0x00, 0x00,
  33.   0x00, 0x00, 0x00, 0x00, 0x25, 0x08, 0x60, 0xC0, 0x00, 0x04, 0x03, 0x00,
  34.   0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x25, 0x08, 0x00, 0x00,
  35.   0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x02,
  36.   0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3C, 0x00, 0x00,
  37.   0x00, 0x00, 0x5C, 0x02, 0x00, 0x00, 0x40, 0x80, 0x00, 0x02, 0x01, 0xE0,
  38.   0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x42, 0x02, 0x00, 0x10, 0x40, 0x80,
  39.   0x10, 0x02, 0x01, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x9E, 0x01,
  40.   0x20, 0x10, 0x40, 0x80, 0x10, 0x81, 0x08, 0x00, 0x00, 0x20, 0x00, 0x00,
  41.   0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x40, 0x80, 0x10, 0x81, 0x88, 0x20,
  42.   0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x40, 0x80,
  43.   0x10, 0x81, 0x84, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x21,
  44.   0x40, 0x20, 0xF0, 0xFF, 0xFF, 0xC3, 0x47, 0x20, 0x00, 0x00, 0x10, 0x00,
  45.   0x00, 0x00, 0x00, 0x43, 0x80, 0xE0, 0x0F, 0x00, 0x00, 0xDC, 0x7F, 0x10,
  46.   0x02, 0x02, 0x10, 0x00, 0x00, 0x7F, 0x00, 0x46, 0x80, 0x1F, 0x00, 0x00,
  47.   0x00, 0xC0, 0xFF, 0x17, 0x02, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x84,
  48.   0x78, 0x00, 0x20, 0x00, 0x01, 0x00, 0xFE, 0x7F, 0x01, 0x01, 0x10, 0x00,
  49.   0x00, 0x00, 0xC0, 0x8C, 0x07, 0x00, 0x20, 0x00, 0x01, 0x20, 0x80, 0xFF,
  50.   0x83, 0x00, 0x10, 0x00, 0x00, 0x00, 0xE0, 0x78, 0x00, 0x02, 0x00, 0x00,
  51.   0x00, 0x20, 0x00, 0xF8, 0x5F, 0x00, 0x10, 0x00, 0x00, 0x00, 0xE0, 0x0F,
  52.   0x00, 0x02, 0xDC, 0xE0, 0x06, 0x00, 0x00, 0x80, 0xFF, 0x00, 0x00, 0x00,
  53.   0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x2C, 0x81, 0x09, 0x33, 0x03, 0x00,
  54.   0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0xC0, 0x0C, 0x30, 0x41,
  55.   0x09, 0xCA, 0x04, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x02,
  56.   0x00, 0x13, 0xDC, 0x40, 0x06, 0xCA, 0x04, 0x00, 0x00, 0x7F, 0x00, 0x00,
  57.   0x00, 0x80, 0x01, 0x04, 0x80, 0x13, 0x00, 0x00, 0x00, 0x32, 0x03, 0x00,
  58.   0x00, 0xFC, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0xC0, 0x0C, 0x00, 0x00,
  59.   0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x10, 0x00, 0x30,
  60.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x00,
  61.   0x00, 0x0C, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  62.   0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x00, 0x00,
  63.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x05, 0x30,
  64.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  65.   0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x40, 0x40, 0x0C, 0x03, 0x00, 0x00,
  66.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xC0, 0x60,
  67.   0x0C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
  68.   0x00, 0x00, 0x80, 0x31, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  69.   0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x0C, 0x03, 0x00, 0x00,
  70.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x0E,
  71.   0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
  72.   0x00, 0x00, 0x00, 0x04, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  73.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  74.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  75.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  76.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  77.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  78.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  79.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  80.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  81.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  82.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  83.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  84.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  85.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  86.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  87.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  88.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  89.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  90.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  91.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  92.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  93.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  94.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  95.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  96.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  97.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  98.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  99.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  100.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  101.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  102.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  103.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  104.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  105.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  106.   0x00, 0x00, 0x00, 0x00, };
  107.  
  108. void setup(void) {
  109.   pinMode(analogInput, INPUT);
  110.   u8g2.begin();
  111.   u8g2.setBitmapMode(0);
  112. }
  113.  
  114. void loop(void) {
  115.   unsigned long startMillis = millis();                    // start of sample window
  116.   unsigned int PeaktoPeak = 0;                             // peak-to-peak level
  117.   unsigned int SignalMax = 0;
  118.   unsigned int SignalMin = 1024;
  119.  
  120.   while ( millis() - startMillis < sampleWindow ){
  121.     sample = analogRead(analogInput);
  122.     if (sample < 1024) {
  123.       if (sample > SignalMax){
  124.         SignalMax = sample;                                // saves just the max levels
  125.       }
  126.       else if (sample < SignalMin){
  127.         SignalMin = sample;                                // saves just the min levels
  128.       }
  129.     }
  130.   }
  131.  
  132.   PeaktoPeak = SignalMax - SignalMin;                      // max - min = peak-peak amplitude
  133.   float MeterValue = PeaktoPeak * 330 / 1024;              // convert volts to arrow information
  134.  
  135.   MeterValue = MeterValue - 34;                            // shifts needle to zero position
  136.  
  137.   u8g2.clearBuffer();                   // clear the internal memory
  138.   u8g2.drawXBMP(0,0, 128, 64, VUMeter);
  139.   int a1 = (hMeter + (sin(MeterValue / 57.296) * rMeter)); // meter needle horizontal coordinate
  140.   int a2 = (vMeter - (cos(MeterValue / 57.296) * rMeter)); // meter needle vertical coordinate
  141.   u8g2.drawLine(a1, a2, hMeter, vMeter);
  142.   u8g2.sendBuffer();                    // transfer internal memory to the display
  143.   //delay(1000);  
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement