Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * originál původně pro knihovnu adafruit, přepsáno na u8g2 pro Attila Csergo
- * bitmapa generovana nově pomocí online nástroje BMP to XBM
- * RESET pin displeje připojen na VCC +5V, v init stringu jako U8X8_PIN_NONE
- */
- #include <Arduino.h>
- #include <U8g2lib.h>
- #include <SPI.h>
- U8G2_SH1106_128X64_NONAME_F_4W_HW_SPI u8g2(U8G2_R0, /*cs=*/ 10, /*dc=*/ 9, U8X8_PIN_NONE);
- int analogInput = A0; // analog input for outside audio source
- int hMeter = 65; // horizontal center for needle animation
- int vMeter = 85; // vertical center for needle animation (outside of dislay limits)
- int rMeter = 80; // length of needle animation or arch of needle travel
- const int sampleWindow = 50; // sample window width in mS (50 mS = 20Hz)
- unsigned int sample;
- static const unsigned char PROGMEM VUMeter[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x60, 0xC0, 0x00, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x90, 0x20, 0x01, 0x84, 0x04, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x19, 0x10, 0x60, 0xC0,
- 0x01, 0x84, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x25, 0x08, 0x90, 0x00, 0x01, 0x84, 0x04, 0xE0, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x25, 0x08, 0x60, 0xC0, 0x00, 0x04, 0x03, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x01, 0x25, 0x08, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x02,
- 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3C, 0x00, 0x00,
- 0x00, 0x00, 0x5C, 0x02, 0x00, 0x00, 0x40, 0x80, 0x00, 0x02, 0x01, 0xE0,
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x42, 0x02, 0x00, 0x10, 0x40, 0x80,
- 0x10, 0x02, 0x01, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x9E, 0x01,
- 0x20, 0x10, 0x40, 0x80, 0x10, 0x81, 0x08, 0x00, 0x00, 0x20, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x40, 0x80, 0x10, 0x81, 0x88, 0x20,
- 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x40, 0x80,
- 0x10, 0x81, 0x84, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x21,
- 0x40, 0x20, 0xF0, 0xFF, 0xFF, 0xC3, 0x47, 0x20, 0x00, 0x00, 0x10, 0x00,
- 0x00, 0x00, 0x00, 0x43, 0x80, 0xE0, 0x0F, 0x00, 0x00, 0xDC, 0x7F, 0x10,
- 0x02, 0x02, 0x10, 0x00, 0x00, 0x7F, 0x00, 0x46, 0x80, 0x1F, 0x00, 0x00,
- 0x00, 0xC0, 0xFF, 0x17, 0x02, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x84,
- 0x78, 0x00, 0x20, 0x00, 0x01, 0x00, 0xFE, 0x7F, 0x01, 0x01, 0x10, 0x00,
- 0x00, 0x00, 0xC0, 0x8C, 0x07, 0x00, 0x20, 0x00, 0x01, 0x20, 0x80, 0xFF,
- 0x83, 0x00, 0x10, 0x00, 0x00, 0x00, 0xE0, 0x78, 0x00, 0x02, 0x00, 0x00,
- 0x00, 0x20, 0x00, 0xF8, 0x5F, 0x00, 0x10, 0x00, 0x00, 0x00, 0xE0, 0x0F,
- 0x00, 0x02, 0xDC, 0xE0, 0x06, 0x00, 0x00, 0x80, 0xFF, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x2C, 0x81, 0x09, 0x33, 0x03, 0x00,
- 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0xC0, 0x0C, 0x30, 0x41,
- 0x09, 0xCA, 0x04, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x02,
- 0x00, 0x13, 0xDC, 0x40, 0x06, 0xCA, 0x04, 0x00, 0x00, 0x7F, 0x00, 0x00,
- 0x00, 0x80, 0x01, 0x04, 0x80, 0x13, 0x00, 0x00, 0x00, 0x32, 0x03, 0x00,
- 0x00, 0xFC, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0xC0, 0x0C, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x10, 0x00, 0x30,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x00,
- 0x00, 0x0C, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x02, 0x48, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x05, 0x30,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x40, 0x40, 0x0C, 0x03, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xC0, 0x60,
- 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
- 0x00, 0x00, 0x80, 0x31, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x0C, 0x03, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x0E,
- 0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
- 0x00, 0x00, 0x00, 0x04, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, };
- void setup(void) {
- pinMode(analogInput, INPUT);
- u8g2.begin();
- u8g2.setBitmapMode(0);
- }
- void loop(void) {
- unsigned long startMillis = millis(); // start of sample window
- unsigned int PeaktoPeak = 0; // peak-to-peak level
- unsigned int SignalMax = 0;
- unsigned int SignalMin = 1024;
- while ( millis() - startMillis < sampleWindow ){
- sample = analogRead(analogInput);
- if (sample < 1024) {
- if (sample > SignalMax){
- SignalMax = sample; // saves just the max levels
- }
- else if (sample < SignalMin){
- SignalMin = sample; // saves just the min levels
- }
- }
- }
- PeaktoPeak = SignalMax - SignalMin; // max - min = peak-peak amplitude
- float MeterValue = PeaktoPeak * 330 / 1024; // convert volts to arrow information
- MeterValue = MeterValue - 34; // shifts needle to zero position
- u8g2.clearBuffer(); // clear the internal memory
- u8g2.drawXBMP(0,0, 128, 64, VUMeter);
- int a1 = (hMeter + (sin(MeterValue / 57.296) * rMeter)); // meter needle horizontal coordinate
- int a2 = (vMeter - (cos(MeterValue / 57.296) * rMeter)); // meter needle vertical coordinate
- u8g2.drawLine(a1, a2, hMeter, vMeter);
- u8g2.sendBuffer(); // transfer internal memory to the display
- //delay(1000);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement