Stap 5: De code van de Arduino
2009: ReeD Martin, Jon Ward, Ned Burns en John Kestner
constanten:
Const int ledPin = 12; het circuit solenoïde is aangesloten op de digitale pin 12
Const int knockSensor = 0; de piezo is aangesloten op de analoge pin 0
Const int drempel = 20; drempelwaarde om te beslissen wanneer het gedetecteerde geluid wordt geklopt of niet;
Dit om de gevoeligheid op uw eigen blok wijzigen
int sensorReading = 0; variabele de waarde gelezen van de pin van de sensor opslaan
int ledState = laag; variabele gebruikt om st4re de laatste LED-status, het licht in-/ uitschakelen
Huidige tijd
int current_millis_value = 0;
int previous_millis_value = 0;
int m = 0;
int seconden = 0;
int minuten = 45; handmatig instellen van de notulen die het begint vanaf wanneer ingeschakeld
int uur = 6; handmatig instellen van de uren die het begint vanaf wanneer ingeschakeld
Knock-Tracking-variabelen initialiseren
lange lastKnock = 0;
lange curKnock = 0;
int lastIntensity = 0;
int shouldKnock = 0;
lange knockSpaces [100];
VOID Setup {}
pinMode (ledPin, OUTPUT); de ledPin verklaren als OUTPUT
pinMode (knockSensor, INPUT);
Serial.begin(9600); de seriële poort gebruiken
Serial.println ("Welcome to the Knock Klok Block!");
}
void loop {}
Tijd beheren
current_millis_value = millis();
m += current_millis_value - previous_millis_value;
seconden += m / 1000;
m = m % 1000;
minuten += seconden / 60;
seconden = seconden % 60;
+= uren / 60;
minuten = minuten % 60;
uren = uur % 24;
previous_millis_value = current_millis_value;
Lees de sensor en sla het in de variabele sensorReading:
sensorReading = analogRead(knockSensor);
curKnock = millis();
Als de sensorgegevens groter dan de drempel is, tellen als een klop
Als (sensorReading > = drempel) {}
Als ((curKnock-lastKnock) < 1000) {}
knockSpaces [shouldKnock] = (curKnock - lastKnock);
shouldKnock ++;
}
lastKnock = curKnock;
lastIntensity = sensorReading;
delay(150); voorkomen dat per ongeluk meer dan eens triggering
Als het niet, check om te zien als 1000 ms is verstreken, en beginnen kloppen:
} else if ((curKnock-lastKnock) > 1000 & & shouldKnock > = 1) {}
Als (shouldKnock < 5) {}
Reset stoten
shouldKnock = 0;
lastKnock = 0;
lastIntensity = 0;
Klop uur
voor (int y = 0; y < uur; y ++) {}
Serial.println ("Knock! (Uur) ");
knockOut(round((max(sensorReading,lastIntensity) / 50) * 18));
vertraging (200 + random(90));
}
delay(900);
Klop minuten (15 min stappen)
voor (int y = 0; y < floor(minutes / 15); y ++) {}
Serial.println ("Knock! (Minuten) ");
knockOut(round((max(sensorReading,lastIntensity) / 50) * 18));
vertraging (900 + random(200));
}
} else {}
Knock terug
voor (int y = 0; y < shouldKnock; y ++) {}
Serial.println ("Knock! (Leuk!) ");
knockOut(0);
vertraging ((knockSpaces [y] - 20));
}
Reset stoten
shouldKnock = 0;
lastKnock = 0;
lastIntensity = 0;
knockOut(0);
delay(150); voorkomen dat per ongeluk meer dan eens triggering
}
delay(100); voorkomen dat per ongeluk meer dan eens triggering
}
}
Uitvoeren van een klop
VOID knock-out (int tVolume) {}
ledState = hoog;
digitalWrite (ledPin, ledState);
vertraging (20 + random(tVolume)); Randomize intensiteit
ledState = laag;
digitalWrite (ledPin, ledState);
}