Skocz do zawartości

Jak edytować bibliotekę I2S w Arduino?


Mateusz1978

Pomocna odpowiedź

Witam, 

Do mojego projektu potrzebuję wykorzystać bibliotekę I2S.h. W moim projekcie funkcja I2S.read() obsługuje tylko jeden mikrofon, a ja potrzebuję więcej. W tym celu chciałbym edytować tą bibliotekę, a nie wiem jak to zrobić. Bardzo proszę o pomoc 

Poniżej wklejam kod źródłowy mojego programu:

#include <I2S.h>    // Jak edytować tą bibliotekę ?!

void setup() {
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);

  digitalWrite(4, LOW); 
  digitalWrite(5, HIGH); 

  
  digitalWrite(4, HIGH); 
  // Open serial communications and wait for port to open:
  // A baud rate of 115200 is used instead of 9600 for a faster data rate
  // on non-native USB ports

  
  Serial1.begin(9600);
  while (!Serial1) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
   
  // start I2S at 16 kHz with 32-bits per sample
  if (!I2S.begin(I2S_PHILIPS_MODE, 16000, 32)) {
    Serial1.println("Failed to initialize I2S!");
    while (1); // do nothing
  }
}

#define SAMPLES 128 // make it a power of two for best DMA performance

void loop() {
  // read a bunch of samples:
  int samples[SAMPLES];
  float minsample[4];
  float meanval[4];
  float maxsample[4];
  int mikrofon_nr = 0;


  mikrofon_nr = 0;
  
  while(mikrofon_nr < 4 )
  {  
    for (int i=0; i<SAMPLES; i++) 
    {
      int sample = 0; 
      while ((sample == 0) || (sample == -1) ) 
      {
        sample = I2S.read();
      }
      // convert to 18 bit signed
      sample >>= 14; 
      samples[i] = sample;
    }
  
    // ok we hvae the samples, get the mean (avg)
    meanval[mikrofon_nr] = 0;
    for (int i=0; i<SAMPLES; i++) {
      meanval[mikrofon_nr] += samples[i];
    }
    meanval[mikrofon_nr] /= SAMPLES;
    //Serial.print("# average: " ); Serial.println(meanval[mikrofon_nr]);
  
    // subtract it from all sapmles to get a 'normalized' output
    for (int i=0; i<SAMPLES; i++) {
      samples[i] -= meanval[mikrofon_nr];
      //Serial.println(samples[i]);
    }
  
    // find the 'peak to peak' max
    float maxsample[mikrofon_nr], minsample[mikrofon_nr];  
    maxsample[mikrofon_nr] = -100000;
    minsample[mikrofon_nr] = 100000;
    for (int i=0; i<SAMPLES; i++) {
      minsample[mikrofon_nr] = min(minsample[mikrofon_nr], samples[i]);
      maxsample[mikrofon_nr] = max(maxsample[mikrofon_nr], samples[i]);  
    }
    
   /*
    if(mikrofon_nr == 0) 
    {
      digitalWrite(4, LOW); 
      digitalWrite(5, HIGH); 
    }
    else
    {
      digitalWrite(5, LOW); 
      digitalWrite(4, HIGH); 
    }
*/

    delay(10);
  
    mikrofon_nr++;  
  }
  
  

  
  String ramka_danych = "AT+#";
  
  mikrofon_nr = 0;
  while(mikrofon_nr < 4 )
  {
    ramka_danych += minsample[mikrofon_nr];
    ramka_danych += "#";
    ramka_danych += meanval[mikrofon_nr];
    ramka_danych += "#";
    ramka_danych += maxsample[mikrofon_nr];
    ramka_danych += "#";

    mikrofon_nr++;
  }
 
   ramka_danych += "koniec#";

  Serial1.println(ramka_danych);
  delay(10000);

}

 

Link do komentarza
Share on other sites

Sam sobie odpowiadasz - by edytować bibliotekę należy otworzyć plik(i) biblioteki w edytorze tekstowym (Notatnik, Arduino IDE....) i poddać edycji. Pliki źródłowe są zwykłymi plikami tekstowymi.

W Arduino IDE skopiuj pliki biblioteki do folderu szkicu i zobaczysz je w dodatkowych zakładkach - chociaż lepiej użyć zewnętrznego edytora tekstu. Po modyfikacjach nie zapomnij by je zapisać w oryginalnym miejscu instalacji biblioteki, a jeśli nie chcesz zmieniać oryginału to pozostaw w swoim folderze roboczym (tam gdzie jest szkic)  i w swoim szkicu możesz je dołączyć do programu za pomocą:

#include "mojabiblioteka.h"

Znaki cudzysłowu wskazują własną lokalizację biblioteki - tu folder roboczy szkicu.

Edytowano przez Belferek
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.