INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Zusammenführen von Scetchen; MSGEQ7/WS2812B
16.03.2016, 20:44 (Dieser Beitrag wurde zuletzt bearbeitet: 17.03.2016 20:17 von ardu_arne.)
Beitrag #1
Zusammenführen von Scetchen; MSGEQ7/WS2812B
Hi,
ich stehe beim Arduino noch immer am Anfang und habe jezt ein Projekt angesetzt mit einer 7fach Spectrum Analyser Anzeige (MSGEQ7 mit Nano) das auch wunderbar läuft.
Ich möchte dieses Script mit einem weiteren zusammenführen, dass wenn am analogen Eingang das Signal zu gering ist die WS2812B mit einem Zufallsmuster laufen.
In meinen 3 Arduino-Büchern habe ich auch rausgefunden das es mit if und else gehen sollte. Nur ich finde meinen Fehler nicht.
Der Vollständigkeit halber muss ich hier noch erwähnen das die Scetche nicht von mir sondern aus dem Internet sind und ich die für meine Zwecks angepasst habe.

Bitte nicht so genau hinschauen, ich hab die kompletten Scetche hier reinkopiert, ohne setup und loop zu trennen. Und die Bezeichnungen von den Ein-/Ausgängen sollte ich in den beiden Scetchen auch noch vereinheitlichen.

Also im void loop müsste ich anfangen mit if (AnalogPin < 10) {
//dann führe aus :
Code:
#include<FastLED.h>

#define LED_PIN     5
#define BRIGHTNESS  96
#define LED_TYPE    WS2812B
#define COLOR_ORDER GRB
int AnalogPin = A0;

const uint8_t kMatrixWidth  = 10;
const uint8_t kMatrixHeight = 17;
const bool    kMatrixSerpentineLayout = false;



#define NUM_LEDS (kMatrixWidth * kMatrixHeight)
#define MAX_DIMENSION ((kMatrixWidth>kMatrixHeight) ? kMatrixWidth : kMatrixHeight)

// The leds
CRGB leds[kMatrixWidth * kMatrixHeight];

// The 16 bit version of our coordinates
static uint16_t x;
static uint16_t y;
static uint16_t z;


uint16_t speed = 10; // speed is set dynamically once we've started up


uint16_t scale = 30; // scale is set dynamically once we've started up

// This is the array that we keep our computed noise values in
uint8_t noise[MAX_DIMENSION][MAX_DIMENSION];

CRGBPalette16 currentPalette( PartyColors_p );
uint8_t       colorLoop = 1;

void setup() {
  delay(3000);
  LEDS.addLeds<LED_TYPE,LED_PIN,COLOR_ORDER>(leds,NUM_LEDS);
  LEDS.setBrightness(BRIGHTNESS);

  // Initialize our coordinates to some random values
  x = random16();
  y = random16();
  z = random16();
}



void fillnoise8() {

  uint8_t dataSmoothing = 0;
  if( speed < 50) {
    dataSmoothing = 200 - (speed * 4);
  }
  
  for(int i = 0; i < MAX_DIMENSION; i++) {
    int ioffset = scale * i;
    for(int j = 0; j < MAX_DIMENSION; j++) {
      int joffset = scale * j;
      
      uint8_t data = inoise8(x + ioffset,y + joffset,z);


      data = qsub8(data,16);
      data = qadd8(data,scale8(data,39));

      if( dataSmoothing ) {
        uint8_t olddata = noise[i][j];
        uint8_t newdata = scale8( olddata, dataSmoothing) + scale8( data, 256 - dataSmoothing);
        data = newdata;
      }
      
      noise[i][j] = data;
    }
  }
  
  z += speed;
  
  // apply slow drift to X and Y, just for visual variation.
  x += speed / 8;
  y -= speed / 16;
}

void mapNoiseToLEDsUsingPalette()
{
  static uint8_t ihue=0;
  
  for(int i = 0; i < kMatrixWidth; i++) {
    for(int j = 0; j < kMatrixHeight; j++) {
      // We use the value at the (i,j) coordinate in the noise
      // array for our brightness, and the flipped value from (j,i)
      // for our pixel's index into the color palette.

      uint8_t index = noise[j][i];
      uint8_t bri =   noise[i][j];


      if( colorLoop) {
        index += ihue;
      }


      if( bri > 127 ) {
        bri = 255;
      } else {
        bri = dim8_raw( bri * 2);
      }

      CRGB color = ColorFromPalette( currentPalette, index, bri);
      leds[XY(i,j)] = color;
    }
  }
  
  ihue+=1;
}

void loop() {
  
  // Periodically choose a new palette, speed, and scale
  ChangePaletteAndSettingsPeriodically();

  // generate noise data
  fillnoise8();
  
  // convert the noise data to colors in the LED array
  // using the current palette
  mapNoiseToLEDsUsingPalette();

  LEDS.show();
  // delay(10);
}


#define HOLD_PALETTES_X_TIMES_AS_LONG 1

void ChangePaletteAndSettingsPeriodically()
{
  uint8_t secondHand = ((millis() / 1000) / HOLD_PALETTES_X_TIMES_AS_LONG) % 60;
  static uint8_t lastSecond = 99;
  
  if( lastSecond != secondHand) {
    lastSecond = secondHand;
    if( secondHand ==  0)  { currentPalette = RainbowColors_p;         speed = 20; scale = 30; colorLoop = 1; }
    if( secondHand ==  5)  { SetupPurpleAndGreenPalette();             speed = 10; scale = 50; colorLoop = 1; }
    if( secondHand == 10)  { SetupBlackAndWhiteStripedPalette();       speed = 20; scale = 30; colorLoop = 1; }
    if( secondHand == 15)  { currentPalette = ForestColors_p;          speed =  8; scale =120; colorLoop = 0; }
    if( secondHand == 20)  { currentPalette = CloudColors_p;           speed =  4; scale = 30; colorLoop = 0; }
    if( secondHand == 25)  { currentPalette = LavaColors_p;            speed =  8; scale = 50; colorLoop = 0; }
    if( secondHand == 30)  { currentPalette = OceanColors_p;           speed = 20; scale = 90; colorLoop = 0; }
    if( secondHand == 35)  { currentPalette = PartyColors_p;           speed = 20; scale = 30; colorLoop = 1; }
    if( secondHand == 40)  { SetupRandomPalette();                     speed = 20; scale = 20; colorLoop = 1; }
    if( secondHand == 45)  { SetupRandomPalette();                     speed = 50; scale = 50; colorLoop = 1; }
    if( secondHand == 50)  { SetupRandomPalette();                     speed = 90; scale = 90; colorLoop = 1; }
    if( secondHand == 55)  { currentPalette = RainbowStripeColors_p;   speed = 30; scale = 20; colorLoop = 1; }
  }
}


void SetupRandomPalette()
{
  currentPalette = CRGBPalette16(
                      CHSV( random8(), 255, 32),
                      CHSV( random8(), 255, 255),
                      CHSV( random8(), 128, 255),
                      CHSV( random8(), 255, 255));
}


void SetupBlackAndWhiteStripedPalette()
{
  // 'black out' all 16 palette entries...
  fill_solid( currentPalette, 16, CRGB::Black);
  // and set every fourth one to white.
  currentPalette[0] = CRGB::White;
  currentPalette[4] = CRGB::White;
  currentPalette[8] = CRGB::White;
  currentPalette[12] = CRGB::White;

}

// This function sets up a palette of purple and green stripes.
void SetupPurpleAndGreenPalette()
{
  CRGB purple = CHSV( HUE_PURPLE, 255, 255);
  CRGB green  = CHSV( HUE_GREEN, 255, 255);
  CRGB black  = CRGB::Black;
  
  currentPalette = CRGBPalette16(
    green,  green,  black,  black,
    purple, purple, black,  black,
    green,  green,  black,  black,
    purple, purple, black,  black );
}



uint16_t XY( uint8_t x, uint8_t y)
{
  uint16_t i;
  if( kMatrixSerpentineLayout == false) {
    i = (y * kMatrixWidth) + x;
  }
  if( kMatrixSerpentineLayout == true) {
    if( y & 0x01) {
      // Odd rows run backwards
      uint8_t reverseX = (kMatrixWidth - 1) - x;
      i = (y * kMatrixWidth) + reverseX;
    } else {
      // Even rows run forwards
      i = (y * kMatrixWidth) + x;
    }
  }
  return i;
}


else // macht hier Sinn, da hier der zweite Sketch ist
//---------------------------------------------------------------------------------------------


{
/*
msgeq7 ws2812 led equalizer
http://llancaster.com/2014/12/msgeq7-graphic-equalizerspectrum-analyzer/
*/
#include <Adafruit_NeoPixel.h>
//#include "WS2812_Definitions.h"       //add this if you want

#define LED_PIN         9       //pin for led strip
#define LED_COUNT       105  //# of leds in strip
#define LED_IN_BAND     15      //# of leds per band
#define STROBE_PIN      2       //Strobe pin for msgeq7
#define RESET_PIN       3       //Reset pin for msgeq7
#define ANLG_IN_PIN     A7      //analog input pin for msgeq7
#define BRIGHT_PIN      A0      //pin for brightness potentiometer
#define COLOR_PIN       A1      //pin for color potentiometer

//setup strip values
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_RGB + NEO_KHZ800);

/*call out pins for msgeq7*/
int analogPin = ANLG_IN_PIN;    //output pin to read bands for eq7
int strobePin = STROBE_PIN;     //strobe pin for eq7
int resetPin = RESET_PIN;       //reset pin for eq7
int bandValue[15];              // to hold a2d values
int bandMap[15];                //hold mapped values for the band
long lightState[15][15];        //multidim array to hold light color use later or struct for lights


/*color and brightness  */
int brightPin = BRIGHT_PIN;     //pot pin
int bright = 0;                //variable to store value for brightness
int brightVal = 0;             //brightness value

int colorPin = COLOR_PIN;               //pot for color adj
int color = 0;                                  //variable to store the pot value for color
int colorMap = 0;                               //temp value to store mapped color value
long adjColor[15] = {0xFF0000, 0x00FF00, 0x0000FF, 0xFFD700, 0xDAA520, 0xFF00FF, 0xFFFFFF, 0x00BFFF, 0xFF6347, 0x00FF7F, 0x87CEEB, 0x00BFFF, 0xFF00FF, 0x8B0000, 0x9ACD32};
long colorVal = 0;                              //value for color of led strip
int ledsInBand = LED_IN_BAND;   //leds in band, in defines



void setup()
{
  Serial.begin(9600);
  //Serial.print("\eSP F");  // tell to use 7-bit control codes
  //Serial.print("\e[?25l"); // hide cursor
  //Serial.print("\e[?12l"); // disable cursor highlighting

  strip.begin();        //      LED strip setup
  strip.show();         // Initialize all pixels to 'off'

  //initialize the msgeq7
  pinMode(analogPin, INPUT);
  pinMode(strobePin, OUTPUT);
  pinMode(resetPin, OUTPUT);
  analogReference(DEFAULT);
  digitalWrite(resetPin, LOW);
  digitalWrite(strobePin, HIGH);
}

void loop() {
//read pots for led color and brightness
    colorbright();
//read the msgeq7
    readMSGEQ7();
//put the eq values into array
//fillLights();

    for(int band=0; band<7; band++) {
      for (int led=0; led<ledsInBand; led++) {
        lightState[band][led] = (led<=bandMap[band])?colorVal:0;
      }
    }
  
    for(int band=0; band<7; band++) {
      for (int led=0; led<ledsInBand; led++) {
        strip.setPixelColor(band*15+led, lightState[band][led]);
      }
    }
  
    for (int i=0;i<14;i++)
      {
      Serial.print(bandMap[i]);
      Serial.print(" ");
      }
    Serial.println();
  
    strip.setBrightness(brightVal);
    strip.show();
}


/*
Function to set strip color and brightness    
*/

void colorbright() {
    bright = analogRead(brightPin);                             //read pot to get brightness for strip
    brightVal = map(bright, 0, 1023, 0, 255);   //map led brightness value for strip

    color = analogRead(colorPin);                               //read pin to find color value from pot
    colorMap = map(color, 0, 1023, 0, 15);               //map pin value to # of available colors set in adjColor
    colorVal = adjColor[colorMap];                              //set color to list of colors above
}


/*
Function to read the msgeq7
*/
void readMSGEQ7() {
    digitalWrite(resetPin, HIGH);
    digitalWrite(resetPin, LOW);
    for(int i=0; i<7; i++)
      {
      digitalWrite(strobePin,LOW); // strobe pin on the shield - kicks the IC up to the next band
      delayMicroseconds(1); //
      bandValue[i] = analogRead(analogPin); // store left band reading
      bandMap[i] = map(bandValue[i], 150, 1023, 0, 15);  //map the band values to light positions
      //right[band] = analogRead(1); // implement later
      digitalWrite(strobePin,HIGH);
      }
}

Ich hoffe dass ich von Euch einen Tipp bekomme, den ich dann sogar verstehe.


MfG

Modinox

Edit: Codebereich formatiert
Gruß Arne
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.03.2016, 20:52
Beitrag #2
RE: Zusammenführen von Scetchen; MSGEQ7/WS2812B
Mein Tipp, lerne die Grundlagen.
Ein Sketch darf niemals 2 Setup und 2 Loop enthalten.
Das kann nicht funktionieren und wird auch nicht kompiliert.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.03.2016, 15:10
Beitrag #3
RE: Zusammenführen von Scetchen; MSGEQ7/WS2812B
Entscheide dich für eine Scetchdatei (Scetch_1). Dann kopierst du erst einmal alle Funktionen (bis auf die setup() und loop()) der zweiten Datei in die erste (Scetch_1).
Die Einträge der Setup() aus Scetch_2 fügst du dann noch in die Setup()-Funktion von Scetch_1 ein.

Jetzt musst du noch überprüfen, welche Befehle in der loop() aus Scetch_2 in die loop() von Scetch_1 kopiert werden müssen.

ABER, wenn in beiden Dateien identisch bezeichnete Variablen vorkommen, musst du diese ggf. anpassen/umbezeichnen.

Wie man merkt, ganz schööön fummelig Big Grin

Gruß
Torsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.03.2016, 09:22
Beitrag #4
RE: Zusammenführen von Scetchen; MSGEQ7/WS2812B
Danke torsten_156 ,

ich werde mich dieses WE mal darauf konzentrieren die Scetche so zusammenzufügen.
Ich hoffe das ich dann nicht zuviele Fehlermeldungen bekomme.
Schließlich ist bald das Gehäuse eher fertig als der Scetch (ursprüglich hatte ich nur den Spectrum-Analyser).

MfG

Modinox
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.03.2016, 19:04
Beitrag #5
RE: Zusammenführen von Scetchen; MSGEQ7/WS2812B
@ hotsystems,

ich habs auch schon bemerkt, dass ich die Setups und loops komplett reinkopiert habe

@ Arne,

habe gerade auch bemerkt das Du liebenswerter Weise bereits an dem Scetch geändert hast. Ich bekomme jetzt nicht mehr so viele Fehler wie bei meinen Versuchen...

@ hotsystems,
Ich bin erst vor kurzen aus der Elektronik auf den Arduino umgeschwenkt und versuche beides zu verknüpfen.
Leiterplatten machen und auch mit SMD (passiv) bestücken kann ich wohl besser. Da hab ich auf alle Fälle mehr Ausdauer als wie mit den Programmieren.

Greats
Modinox
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.03.2016, 19:26
Beitrag #6
RE: Zusammenführen von Scetchen; MSGEQ7/WS2812B
Hallo Modinox,

ich hatte dein Programm wegen der besseren Lesbarkeit nur in eine Codebox verfrachtet. Am eigentlichen Code habe ich nicht geändert.
Wenn du jetzt weniger Fehlermeldungen bekommst muss das andere Ursachen haben.

Kannst ja künftig selbst mal versuchen deinen Code entsprechend hier einzufügen.
1. die # aus der Toolbar anklicken (markiert Codeanfang)
2. deinen Sketch einkopieren
3. nochmal die # aus der Toolbar anklicken (markiert Codeende)

Gruß
Arne

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.03.2016, 20:15 (Dieser Beitrag wurde zuletzt bearbeitet: 19.03.2016 21:52 von hotsystems.)
Beitrag #7
RE: Zusammenführen von Scetchen; MSGEQ7/WS2812B
(19.03.2016 19:04)Modinox schrieb:  @ hotsystems,
Ich bin erst vor kurzen aus der Elektronik auf den Arduino umgeschwenkt und versuche beides zu verknüpfen.
Leiterplatten machen und auch mit SMD (passiv) bestücken kann ich wohl besser. Da hab ich auf alle Fälle mehr Ausdauer als wie mit den Programmieren.

Das passt doch gut zusammen, Elektronik und Arduin (Programmieren).
Du musst nur die Grundlagen üben und lernen, dann klappt auch das.
Du solltest auch versuchen, Sketche selbst zu erstellen. Nur kopierten Code wird dir nicht weiterhelfen, da du zu wenig über die Abläufe weißt.
Natürlich helfen wir gern, aber bei kopierten Code ist es immer schwer, da du uns zu wenig Infos über den Code geben kannst und uns kostet das viel zeit, ohne Unterstützung da reinzulesen.

Also lege los und passe deine Sketch an.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.03.2016, 19:49
Beitrag #8
RE: Zusammenführen von Scetchen; MSGEQ7/WS2812B
Toller Tipp, ich hab nur ein Problem- zu wenig "Speicher". ;-)

Wenn ich 10 Zeilen unten bin, weiß ich nicht mehr was ich oben gemacht habe.l Vielleicht sollte ich mir mehr notizen machen.....
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Hilfe: IR Remote Steuerung, MSGEQ7 + RGB-LED Streifen dastob 1 125 14.10.2016 21:40
Letzter Beitrag: hotsystems
  Leonardo- Anzeige von MIDI-Daten an ws2812b Modinox 7 483 26.01.2016 13:11
Letzter Beitrag: Bitklopfer
  WS2812B LED 6er Modus Wampo 10 1.676 06.12.2014 17:18
Letzter Beitrag: Thorsten Pferdekämper
  RC Blaulicht mit ws2812b grinch2787 0 875 23.06.2014 09:17
Letzter Beitrag: grinch2787

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste