Frage zu digitaler Anzeige

Hallo zusammen,
hab gestern die TonUINO-Box und das Forum hier entdeckt und bin echt begeistert.

Da noch nicht alle Bauteile da sind, ich aber zu Hause noch einen Arduino Uno rumfliegen hatte mit diversen Teilen dazu, hab ich mich direkt an eine kleine Erweiterung gemacht.

Mit Hilfe einer 8x8 LED-Matrix… (so sieht die aus:)

…habe ich ein kleines Programm geschrieben, dass bei den verschiedenen Lautstärkestufen in Form einer größer werdenden Pyramide die Lautstärke anzeigt.
Das Programm funktioniert auch gut, leider bin ich nicht versiert genug, um zu entscheiden, an welcher Stelle ich das in die 1800 Zeilen Code einfügen muss.
Vielleicht könnte mir hier jemand weiterhelfen.
(Die Variable volume habe ich in meinem Programm nur testhalber festgelegt, der Wert wird dann natürlich übernommen)

Hier mein kleines Programm, das man sicher gesehen haben muss, um die Frage zu beantworten. Gerne auch zum weiterbenutzen!

#include "LedControl.h"


  int volume = 10;
/*
 
 pin 12 is connected to the DataIn 
 pin 11 is connected to LOAD(CS)
 pin 10 is connected to the CLK 
 We have only a single MAX72XX.
 */
LedControl lc=LedControl(12,10,11,1);

/* we always wait a bit between updates of the display */
unsigned long delaytime1=1000;
unsigned long delaytime2=50;
void setup() {
  /*
   The MAX72XX is in power-saving mode on startup,
   we have to do a wakeup call
   */
  lc.shutdown(0,false);
  /* Set the brightness to a medium values */
  lc.setIntensity(0,8);
  /* and clear the display */
  lc.clearDisplay(0);
}

void volumeIsOne()  {
  
  byte a[8]={B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000001};
   
  lc.setRow(0,0,a[0]);
  lc.setRow(0,1,a[1]);
  lc.setRow(0,2,a[2]);
  lc.setRow(0,3,a[3]);
  lc.setRow(0,4,a[4]);
  lc.setRow(0,5,a[5]);
  lc.setRow(0,6,a[6]);
  lc.setRow(0,7,a[7]);
}

void volumeIsTwo()  {
  
  byte a[8]={B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000011,B00000001};
   
  lc.setRow(0,0,a[0]);
  lc.setRow(0,1,a[1]);
  lc.setRow(0,2,a[2]);
  lc.setRow(0,3,a[3]);
  lc.setRow(0,4,a[4]);
  lc.setRow(0,5,a[5]);
  lc.setRow(0,6,a[6]);
  lc.setRow(0,7,a[7]);
}

void volumeIsThree()  {
  
  byte a[8]={B00000000,B00000000,B00000000,B00000000,B00000000,B00000111,B00000011,B00000001};
   
  lc.setRow(0,0,a[0]);
  lc.setRow(0,1,a[1]);
  lc.setRow(0,2,a[2]);
  lc.setRow(0,3,a[3]);
  lc.setRow(0,4,a[4]);
  lc.setRow(0,5,a[5]);
  lc.setRow(0,6,a[6]);
  lc.setRow(0,7,a[7]);
}

void volumeIsFour()  {
  
  byte a[8]={B00000000,B00000000,B00000000,B00000000,B00001111,B00000111,B00000011,B00000001};
   
  lc.setRow(0,0,a[0]);
  lc.setRow(0,1,a[1]);
  lc.setRow(0,2,a[2]);
  lc.setRow(0,3,a[3]);
  lc.setRow(0,4,a[4]);
  lc.setRow(0,5,a[5]);
  lc.setRow(0,6,a[6]);
  lc.setRow(0,7,a[7]);
}

void volumeIsFive()  {
  
  byte a[8]={B00000000,B00000000,B00000000,B00011111,B00001111,B00000111,B00000011,B00000001};
   
  lc.setRow(0,0,a[0]);
  lc.setRow(0,1,a[1]);
  lc.setRow(0,2,a[2]);
  lc.setRow(0,3,a[3]);
  lc.setRow(0,4,a[4]);
  lc.setRow(0,5,a[5]);
  lc.setRow(0,6,a[6]);
  lc.setRow(0,7,a[7]);
}

void volumeIsSix()  {
  
  byte a[8]={B00000000,B00000000,B00111111,B00011111,B00001111,B00000111,B00000011,B00000001};
   
  lc.setRow(0,0,a[0]);
  lc.setRow(0,1,a[1]);
  lc.setRow(0,2,a[2]);
  lc.setRow(0,3,a[3]);
  lc.setRow(0,4,a[4]);
  lc.setRow(0,5,a[5]);
  lc.setRow(0,6,a[6]);
  lc.setRow(0,7,a[7]);
}

void volumeIsSeven()  {
  
  byte a[8]={B00000000,B01111111,B00111111,B00011111,B00001111,B00000111,B00000011,B00000001};
   
  lc.setRow(0,0,a[0]);
  lc.setRow(0,1,a[1]);
  lc.setRow(0,2,a[2]);
  lc.setRow(0,3,a[3]);
  lc.setRow(0,4,a[4]);
  lc.setRow(0,5,a[5]);
  lc.setRow(0,6,a[6]);
  lc.setRow(0,7,a[7]);
}

void volumeIsEight()  {
  
  byte a[8]={B11111111,B01111111,B00111111,B00011111,B00001111,B00000111,B00000011,B00000001};
   
  lc.setRow(0,0,a[0]);
  lc.setRow(0,1,a[1]);
  lc.setRow(0,2,a[2]);
  lc.setRow(0,3,a[3]);
  lc.setRow(0,4,a[4]);
  lc.setRow(0,5,a[5]);
  lc.setRow(0,6,a[6]);
  lc.setRow(0,7,a[7]);
}

void loop() { 
  if (volume >=25)  {
    volumeIsEight();
  }
  else if (volume >=22)  {
    volumeIsSeven();
  }
  else if (volume >=19)  {
    volumeIsSix();
  }
  else if (volume >=16)  {
    volumeIsFive();
  }
  else if (volume >=13)  {
    volumeIsFour();
  }
  else if (volume >=10)  {
    volumeIsThree();
  }
  else if (volume >=7)  {
    volumeIsTwo();
  }
  else {
    volumeIsOne();
  }
  
  
}

Vielen Dank schonmal im Vorraus :slight_smile:

Ich hatte sowas in meiner FW auch mal drin. Musste dann aus Platzgründen wichtigeren Funktionen weichen.

Ist das mit i2c angebunden? Da als Tip: Programmiere das so, daß es nicht ständig neu aktualisiert wird sondern nur wenn sich die Lautstärke ändert. Ich hatte bei mir massive Probleme mit Störgeräuschen.

Voll cool. Muss mir so eine Matrix mal bestellen.
Ich experimeniere gerade mit einem SSD1306 128x32 Display.
Da zeigts halt den Track und die Lautstärke als Zahl an.
Da find ich deins aber besser und sinnvoller (für die kleinen)

Versuche das bei Gelegenheit mal einzubauen. Danke für den Code.