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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.