cyberplant.py

1638472760 / AE511202

#DDH, based on code from Adafruit industries, mrGPL

import os,glob

import pygame

DRUM_FOLDER = "KidsDay/drums2"

BANK = os.path.join(os.path.dirname(__file__), DRUM_FOLDER)

 

pygame.mixer.init(44100, -16, 1, 512)

pygame.mixer.set_num_channels(16)

 

files = glob.glob(os.path.join(BANK, "*.wav"))

files.sort()

 

samples = [pygame.mixer.Sound(f) for f in files]

 

 

import sys

import time

 

import Adafruit_MPR121.MPR121 as MPR121

print('Adafruit MPR121 Capacitive Touch Sensor Test')

 

# Create MPR121 instance.

cap = MPR121.MPR121()

 

if not cap.begin():

    print('Error initializing MPR121.  Check your wiring!')

    sys.exit(1)

 

def handle_hit(sensor_id):

    # event.channel is a zero based channel index for each pad

    # event.pad is the pad number from 1 to 8

    samples[sensor_id].play(loops=0)

    print("You hit pad {}, playing: {}".format(sensor_id,files[sensor_id]))

 

# Alternatively, specify a custom I2C address such as 0x5B (ADDR tied to 3.3V),

# 0x5C (ADDR tied to SDA), or 0x5D (ADDR tied to SCL).

#cap.begin(address=0x5B)

 

# Also you can specify an optional I2C bus with the bus keyword parameter.

#cap.begin(busnum=1)

 

# Main loop to print a message every time a pin is touched.

print('Press Ctrl-C to quit.')

last_touched = cap.touched()

while True:

    current_touched = cap.touched()

    # Check each pin's last and current state to see if it was pressed or released.

    for i in range(12):

        # Each pin is represented by a bit in the touched value.  A value of 1

        # means the pin is being touched, and 0 means it is not being touched.

        pin_bit = 1 << i

        # First check if transitioned from not touched to touched.

        if current_touched & pin_bit and not last_touched & pin_bit:

            print('{0} touched!'.format(i))

            handle_hit(i)

        # Next check if transitioned from touched to not touched.

        if not current_touched & pin_bit and last_touched & pin_bit:

            print('{0} released!'.format(i))

    # Update last state and wait a short period before repeating.

    last_touched = current_touched

    time.sleep(0.1)