[156] Arduino i perkusja z sampli

[156] Arduino i perkusja z sampli

Skoro tak nam tu ostatnio wszystko świetnie zagrało, zróbmy jeszcze jeden projekt, tym razem naprawdę użyteczny. Wykorzystam tutaj szkic z artykułu, w którym Arduino grało krakowski hejnał. Akurat można go zagrać pięcioma przyciskami znajdującymi się na płytce edukacyjnej TME. Z tym, że czwarty port zajęła mi biblioteka, ale to nic. Płytka edukacyjna ma matrycę wejść i peryferiów. Wystarczy skrosować lewy przycisk na port trzeci, pierwotnie przeznaczony dla odbiornika podczerwieni. Przyjrzyjmy się szkicowi.


#include <SimpleSDAudio.h>  // Biblioteka odtwarzania sampli z karty SD.

const byte bass = 5;  // Adresy pstryczków włączających odtwarzanie sampli.
const byte snare = 3;
const byte hihat = 8;
const byte ride = 7;
const byte crash = 6;

void setup() {
  SdPlay.init(SSDA_MODE_FULLRATE | SSDA_MODE_MONO | SSDA_MODE_AUTOWORKER);  // Inicjalizacja biblioteki.

  pinMode(bass, INPUT_PULLUP);  // Deklaruj linie pstryczków jako wejścia podciągnięte wewnętrznie do wysokiego stanu.
  pinMode(snare, INPUT_PULLUP);
  pinMode(hihat, INPUT_PULLUP);
  pinMode(ride, INPUT_PULLUP);
  pinMode(crash, INPUT_PULLUP);
}
void loop() {

  if (digitalRead(bass) == HIGH) {       // Jeśli przycisk "bass" zostanie wciśnięty...
    SdPlay.setFile("bass.afm");          // Pobierz plik bass.afm
    SdPlay.play();                       // Odtwarzaj go...
    while (digitalRead(bass) == HIGH) {  // Do czasu aż przycisk zostanie puszczony...
    }                                    // Albo przerwie go rozkaz odtworzenia nowego pliku.
  }

  if (digitalRead(snare) == HIGH) {  // Przycisk "snare".
    SdPlay.setFile("snare.afm");
    SdPlay.play();
    while (digitalRead(snare) == HIGH) {
    }
  }

  if (digitalRead(hihat) == HIGH) {  // Przycisk "hihat".
    SdPlay.setFile("hihat.afm");
    SdPlay.play();
    while (digitalRead(hihat) == HIGH) {
    }
  }

  if (digitalRead(ride) == HIGH) {  // Przycisk "ride".
    SdPlay.setFile("ride.afm");
    SdPlay.play();
    while (digitalRead(ride) == HIGH) {
    }
  }

  if (digitalRead(crash) == HIGH) {  // Przycisk "crash".
    SdPlay.setFile("crash.afm");
    SdPlay.play();
    while (digitalRead(crash) == HIGH) {
    }
  }
}

Na początku mamy deklarację wejść. Nazwałem je nazwami instrumentów perkusyjnych, bo właśnie to chcę tutaj zrobić: prostą elektroniczną perkusję wykorzystującą sample. Zaraz potem ujrzymy inicjację biblioteki. Sample mam w wersji mono, ale nic nie szkodzi, by załadować stereofoniczne.

Kolejno deklarujemy wejścia i przechodzimy do głównej pętli, w której znajduje się pięć bliźniaczych bloków. Jeśli dany przycisk jest wciśnięty, pobieramy plik zgodnie z nazwą i zaczynamy go odtwarzać. To dzieje się samo, że tak powiem, więc musimy tylko pilnować puszczenia przycisku i jeśli potem wciśniemy jakiś inny, odtwarzanie pliku zostanie natychmiast przerwane i nastąpi odtworzenie kolejnego sampla. Albowiem biblioteka jest tak napisana, że rozkaz kolejnego odtwarzania przerywa poprzednie automatycznie. Oczywiście nieprzerwane sample brzmią do końca i odtwarzanie się zatrzymuje.

W załączniku znajdziemy zestaw sampli perkusyjnych, lecz każdy może przygotować własne odgłosy czy na przykład komunikaty słowne, które będzie aktywował wciskaniem wybranych przycisków. Miłej zabawy :)

Załączniki
zalacznilk.zip69 KB

Powiązane tematy

Płytka edukacyjna TME-EDU-ARD-2Płytka edukacyjna TME-EDU-ARD-2Sprawdź tutaj

Przeczytaj również

Nasi partnerzy

TMETech Master EventTME EducationPoweredby
Copyright © 2026 arduino.pl