Ge din katt Twitter befogenheter (5 / 9 steg)
Steg 5: Upptäcka växla staten bearbetning
När din katt först hoppar på sängen eller flyttas runt ett gäng, våra switch värden kommer studsa antagligen mellan på och av ett tag. För att undvika att skjuta bort massor av falska uppdateringsmeddelanden, ska vi "Dämpningstid" vår växel genom att kräva att värdet har stabiliserats för ett antal iterationer innan vi eld händelser.Här är bearbetning kod som initierar Arduino och kontrollerar switch status i dess viktigaste loop:
importera cc.arduino.*;import processing.serial.*;// upptäcka Arduino switch staten från bearbetning / / via Firmata, med debouncing / /---ARDUINO VARS---Arduino arduino; int matPin = 2; vilka ingångsstift är vi anslutna till? int matCounter = 0; räknare för debouncing växla inputint bounceLimit = 100. debouncing limitint curMatState = Arduino.HIGH; aktuella switch stateint lastMatState = Arduino.HIGH; senast växla stateint lastMatEvent = Arduino.LOW; senaste händelsen vi firedvoid setup() {/ / ARDUINO arduino = nya Arduino (detta, Arduino.list()[0]); / / v2 arduino.pinMode (matPin, Arduino.INPUT); //set ingångsstift arduino.digitalWrite (matPin, Arduino.HIGH); //enable pull-up} makulera draw() {/ / läsa aktuella mat stat pollMatState(); / / vänta en bit delay(10);} Läsa aktuella matta tillstånd med debounce timer och växla check / / kallar fireMatEvent() när läget för matta förändrats och har varit stabil för en whilevoid pollMatState() {curMatState = arduino.digitalRead(matPin); if(curMatState == lastMatState) {//still i samma stat - incrase bounce counter if(matCounter < bounceLimit) {matCounter ++;} else om (matCounter == bounceLimit) {//we've debounced nog och är beredda att skjuta om (lastMatEvent! = curMatState) {//only fire om denna händelse är difft från sista fireMatEvent(curMatState); lastMatEvent = curMatState;} matCounter ++;} annars om (matCounter > bounceLimit) {/ / händelsen redan sparken - gör ingenting}} annat {//restart greve matCounter = 0;} lastMatState = curMatState;} Brand en ny matta statliga förändring eventvoid fireMatEvent (int state) {if(state==Arduino.LOW) {println ("katt är off matta");} annat {println ("katt är på matta");}}