Tot codul pentru placa Arduino se află în fișierul airdrums.ino, iar encodarea sunetelor se află în fișierul sounds.h.
Pentru redarea sunetelor, am folosit biblioteca PCM.h.
Pentru a știi pe ce adrese sunt accelerometrii, am folosit un program I2C scanner. După ce am găsit adresele, le-am salvat în 2 variabile globale. Pentru a detecta dacă un băț a fost mișcat, folosesc variabile globale pentru coordonatele lor în spațiu. O variabilă bool este folosită pentru a spune dacă bățul a fost mișcat destul de repede pentru a mima lovitura tobei.
Pentru a obține coordonatele bățului, se citește de la accelerometrii în funcția getCoords. Pentru că se citesc doar câte 8 biți, dar valorile necesare sunt pe 16 biți, se face o shiftare a primilor 8 biți și se adaugă următorii 8. În funcție de care accelerometru este mișcat, se reactualizează coordonatele respective lui.
Pentru a vedea dacă trebuie să se redea un sunet, în funcția checkToPlay se calculează distanța dintre coordonatele anterioare și noile coordonate, în funcție de care accelerometru a detectat mișcarea. Dacă mișcarea este detectată, se alege la întâmplare unul din două sunete encodate pentru acel accelerometru.
În funcția setup(), se pornesc accelerometrele, iar pentru a schimba senzitivitatea lor, la 0x31 se scrie 3, care face senzitivitatea mai mică. Se apelează getCoords pentru a lua coordonatele inițiate.
În funcția loop() doar se verifică dacă trebuie să se redea un sunet pe difuzor.
Pentru encodarea sunetelor, am găsit un pachet de sunete online care avea câteva sunete de tobe. Am luat pachetul și am folosit Audacity pentru a converti la un sunet PCM, apoi am folosit un program EncodeAudio pentru a obține un vector ce reprezintă encodarea frecvenței sunetului. Fiecare băț are doar câte două sunete, deoarece ocupă mult spațiu și nu am putut adăuga astfel alte sunete.