Étape 3: programmation
Voici le programme Python que j’ai utilisé pour mon chien. Dans l’étape suivante, je vais expliquer comment modifier le programme pour le comportement de votre chien. N’exécutez pas le programme tout de suite car cela ne fonctionnera pas jusqu'à ce que vous faites à l’étape suivante.
<p>#!/usr/bin/python<br>import pyaudio import sys import thread from time import sleep from array import array import RPi.GPIO as GPIO</p><p>bark=0 howl=False hold=0 barkLength=5 delay=0 wait = 2 flag = 0 red = 7 green=5 exitFlag = False</p><p>def toggleLightRed(c): GPIO.setmode(GPIO.BOARD) GPIO.setup(red,GPIO.OUT) GPIO.output(c,True) sleep(10) GPIO.output(c,False) print("Red toggled")</p><p>def toggleLightGreen(c): GPIO.setmode(GPIO.BOARD) GPIO.setup(green,GPIO.OUT) GPIO.output(c,True) sleep(10) GPIO.output(c,False) print("Green toggled")</p><p>def main(): global bark global howl global hold global barkLength global delay global flag global red global green</p><p> chunk = 8192 FORMAT = pyaudio.paInt16 CHANNELS = 1 RATE = 44100 threshold = 3000 max_value = 0 p = pyaudio.PyAudio() stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, output=True, frames_per_buffer=chunk) GPIO.setmode(GPIO.BOARD) GPIO.setup(red,GPIO.OUT) GPIO.setup(green,GPIO.OUT) try: print "Detection initialized" while True: try: data = stream.read(chunk) except IOError as ex: if ex[1] != pyaudio.paInputOverflowed: raise data = '\x00' * chunk as_ints = array('h', data) max_value = max(as_ints) while max_value>threshold: delay=0 hold=hold+1 try: data = stream.read(chunk) except IOError as ex: if ex[1] != pyaudio.paInputOverflowed: raise data = '\x00' * chunk as_ints = array('h', data) max_value = max(as_ints) if hold>=barkLength: howl=True print "HOWL DETECTED" toggleLightGreen(green) GPIO.cleanup() elif hold>0 and hold<barklength: ="" bark+="1" print="" "bark="" detected"="" togglelightred(red)="" gpio.cleanup()="" hold="0" delay+="1" except="" (keyboardinterrupt,="" systemexit):="" "\rexiting"="" stream.stop_stream()="" stream.close()="" p.terminate()="" gpio.cleanup()<="" p=""></barklength:></p><p>if __name__ == '__main__': main()</p>