Stap 3: De schets
De volgende uploaden naar je Arduino./ * ECHO Klop Sensor
Deze sketch leest een piëzo-element op te sporen een kloppen geluid.
Een analoge pin leest en vergelijkt het resultaat met een ingestelde drempel resultaat.
Als het resultaat groter dan de drempel is, slaat het de waarde van millis() naar een matrix.
Na een bepaalde periode zonder extra stoten, zijn de stoten afgespeeld door het apparaat.
Gemaakt door Dan Nicholson < http://dannicholson.co.uk>
Gebaseerd op "Klop Sensor" gemaakt van 25 maart 2007 door David Cuartielles < http://www.0j0.org> gewijzigd 30 Aug 2011 door Tom Igoe
*/
Deze constanten niet gewijzigd:
Const int ledPin = 9; aangesloten op digital pin geleid
Const int zoemer = 8; uitvoer zoemer aangesloten op digital pin.
Const int knockSensor = A0; de piezo is aangesloten op de analoge pin 0
Const int drempel = 100; drempelwaarde om te beslissen wanneer het gedetecteerde geluid wordt geklopt of niet
Const int arraySize = 20; Grootte van knock matrix (u kunt dit verwijderen in de functies en sizeof() gebruiken als u liever)
Const int replayWait = 2000; Aantal milliseconden dat moet worden gewacht voordat het herhalen klop patroon
deze variabelen zal veranderen:
int sensorReading = 0; variabele de waarde gelezen van de pin van de sensor opslaan
niet-ondertekende lange stoten [arraySize]; Klop 'buffer' - slaat timing van elke knock klaar voor herhalen.
int knockPos = 0; Huidige positie binnen klopt matrix
unsigned long lastKnock = false; Tijd van laatste knock
VOID Setup {}
pinMode (ledPin, OUTPUT); de ledPin verklaren als OUTPUT
pinMode (zoemer, OUTPUT); zoemer pin declareren als OUTPUT
Serial.begin(9600); de seriële poort gebruiken
}
void loop {}
sensorReading = analogRead(knockSensor); Lees de sensor
Als (lastKnock & & (lastKnock + replayWait) < millis()) replayKnocks(); Replay klopt als laatste klop ouder dan de vastgestelde wachttijd was
anders als (sensorReading > = drempel) handleKnock(sensorReading); Als knock gedetecteerd, omgaan met
delay(30);
}
VOID handleKnock(int reading)
{
lastKnock = millis();
Als (knockPos < arraySize)
{
klopt [knockPos ++] = lastKnock; Timing en increment positie variabele opslaan
Flash(false);
Debug output
Serial.Print ("kloppen:");
Serial.println(Reading);
}
anders
{
Serial.println ("Buffer volledige");
}
}
VOID flitser (Booleaanse buzz)
{
digitalWrite (ledPin, hoge); de LED inschakelen (HIGH is het spanningsniveau)
Als (gezoem) Toon (zoemer, 1000);
delay(50);
digitalWrite (ledPin, laag); het uitschakelen van de LED (LOW is het spanningsniveau)
Als (gezoem) noTone(buzzer);
}
VOID replayKnocks()
{
int i;
lastKnock = false;
Serial.println("Replaying");
voor (ik = 0; ik < knockPos; ik = i + 1)
{
int prev = i-1;
Als de vorige (prev < 0) = 0;
niet-ondertekende lange d = (stoten [i] - knocks[prev]);
Als (d > 50) d = d-50;
delay(d);
Serial.println(i);
Flash(true);
}
knockPos = 0; Reset aanwijzer;
}