X-Git-Url: http://git.piffa.net/web?a=blobdiff_plain;f=piezo%2Fpiezo_1_tonePitchFollower%2Fpiezo_1_tonePitchFollower.ino;h=9ceda24d32cdabfc4475e6f7f51be22477f55990;hb=c3d28d0cbbe5e18d64e82b99f9cff169d1a6e018;hp=e74c7b343449a5c366c457ebb127c5887d99dcc4;hpb=54de1d245a98a8032e8c41089158321f6be58b1c;p=sketchbook_andrea diff --git a/piezo/piezo_1_tonePitchFollower/piezo_1_tonePitchFollower.ino b/piezo/piezo_1_tonePitchFollower/piezo_1_tonePitchFollower.ino index e74c7b3..9ceda24 100644 --- a/piezo/piezo_1_tonePitchFollower/piezo_1_tonePitchFollower.ino +++ b/piezo/piezo_1_tonePitchFollower/piezo_1_tonePitchFollower.ino @@ -19,6 +19,11 @@ This example code is in the public domain. */ +// These constants won't change: +const int sensorPin = A0; // pin that the sensor is attached to +const int ledPin = 9; // pin that the LED is attached to + + void setup() { // initialize serial communications (for debugging only): Serial.begin(9600); @@ -26,22 +31,106 @@ void setup() { void loop() { // read the sensor: - int sensorReading = analogRead(A0); + int sensorReading = analogRead(sensorPin); // print the sensor reading so you know its range Serial.println(sensorReading); // map the analog input range (in this case, 400 - 1000 from the photoresistor) // to the output pitch range (120 - 1500Hz) // change the minimum and maximum input numbers below // depending on the range your sensor's giving: - int thisPitch = map(sensorReading, 400, 1000, 120, 1500); + int thisPitch = map(sensorReading, sensorMin, sensorMax, 220, 3500); // play the pitch: - tone(9, thisPitch, 10); + tone(ledPin, thisPitch, 10); delay(1); // delay in between reads for stability } + +/* Domande: +1. Modificare l'estensione del range di frequenza del piezo +tra i valori 20hz e 20.000hz. +2. Inserire l'auto calibrazione +3. Modificare lo script in modo che vengano emessi suoni solo quando +una mano offusca leggermente la luce (il piezo non deve suonare +se non c'e' un operatore a interagire con la fotoresistenza). + +Soluzioni in fondo. + + + + + + + + + + + + + + + + + + + + + +Soluzioni: +// These constants won't change: +const int sensorPin = A0; // pin that the sensor is attached to +const int ledPin = 9; // pin that the LED is attached to + +// variables: +int sensorValue = 0; // the sensor value +int sensorMin = 1023; // minimum sensor value +int sensorMax = 0; // maximum sensor value + +void setup() { + // initialize serial communications (for debugging only): + Serial.begin(9600); + pinMode(13, OUTPUT); + digitalWrite(13, HIGH); + + // calibrate during the first five seconds + while (millis() < 5000) { + sensorValue = analogRead(sensorPin); + + // record the maximum sensor value + if (sensorValue > sensorMax) { + sensorMax = sensorValue; + } + + // record the minimum sensor value + if (sensorValue < sensorMin) { + sensorMin = sensorValue; + } + } + + // signal the end of the calibration period + digitalWrite(13, LOW); +} + +void loop() { + // read the sensor: + int sensorReading = analogRead(sensorPin); + // print the sensor reading so you know its range + Serial.println(sensorReading); + // map the analog input range (in this case, 400 - 1000 from the photoresistor) + // to the output pitch range (120 - 1500Hz) + // change the minimum and maximum input numbers below + // depending on the range your sensor's giving: + int thisPitch = map(sensorReading, sensorMin, sensorMax, 220, 3500); + + // play the pitch: + if (sensorReading < sensorMax -50) { + tone(ledPin, thisPitch, 10); + } + delay(1); // delay in between reads for stability +} +*/