- Now that all our variables have been set and our functions defined, we can program the main program loop where the actual functionality will be built.
- We want some way to continuously check for noise into the microphone to know when to sound the current pitch.
- We can do this with a "while True" loop as the true condition will always be true as long as the program is running and thus will go on as long as the board is on.
- We record a short clip of audio into the samples array we created earlier.
- Next we take the RMS of the sample to get our magnitude.
- We have a print statement here to be able to check our magnitude values in the REPL.
while True: #We begin recording samples from the board's mic mic.record(samples, len(samples)) magnitude = normalized_rms(samples) print("mag = ", magnitude) #print the magnitude of the input blowing so we can track values in the serial console
- Next we will create an "if" statement to check for button presses and track each press.
- We want a button that moves up pitches and one that moves down pitches.
- Each time a button is pressed we will have a new NeoPixel value so we must reset the other pixels before setting the new one. Pixels.fill((0,0,0)) does exactly that.
- To track button presses we will increment the counter by 1 if the up button is pressed and decrement by 1 if the down is pressed.
- Lastly we need to “debounce” the buttons. When a button is pressed by a human, it’s actually held down for a tiny amount of time that we perceive as just an instant but is actually several thousandths of a second. Thus without debouncing the button it will actually get triggered multiple times when pressed.
- To prevent this we debounce the button by adding a short delay of 2/10s of a second after a button is pressed.
#If statements to know when up or down buttons are pushed #We will use a counter to track which pitch is selected if buttonU.value == True: # If Up button is pushed then move up a pitch pixels.fill((0, 0, 0)) #turn all neopixels off counter += 1 #increase the counter by 1 time.sleep(debounceTime) #to ensure button isn't triggered multiple times in one press we must "debounce" the button by creating a short delay after pressing it elif buttonD.value == True: #Do the same for the down button pixels.fill((0, 0, 0)) # If Down button is pushed then move down a pitch counter -= 1 #decrease counter by one time.sleep(debounceTime) #debounce button
Page last edited March 08, 2024
Text editor powered by tinymce.