X-Git-Url: http://git.piffa.net/web?a=blobdiff_plain;f=basic%2Fanalog_input%2Fphoto_7_tonePitchFollower%2Fphoto_7_tonePitchFollower.ino;h=5b08caef00ecbc46911456888c994f814565b8f4;hb=98f12e9ba20d5b505b1b6506569e31af9ac3ba89;hp=e74c7b343449a5c366c457ebb127c5887d99dcc4;hpb=54de1d245a98a8032e8c41089158321f6be58b1c;p=sketchbook_andrea diff --git a/basic/analog_input/photo_7_tonePitchFollower/photo_7_tonePitchFollower.ino b/basic/analog_input/photo_7_tonePitchFollower/photo_7_tonePitchFollower.ino index e74c7b3..5b08cae 100644 --- a/basic/analog_input/photo_7_tonePitchFollower/photo_7_tonePitchFollower.ino +++ b/basic/analog_input/photo_7_tonePitchFollower/photo_7_tonePitchFollower.ino @@ -12,36 +12,74 @@ modified 31 May 2012 by Tom Igoe, with suggestion from Michael Flynn + Modified by A.Manni + This example code is in the public domain. http://arduino.cc/en/Tutorial/Tone2 */ +// These constants won't change: +const int sensorPin = A0; // pin that the sensor is attached to +const int piezoPin = 9; // pin that the piezo is attached to + +// variables: +int sensorValue = 0; // the sensor value +int sensorMin = 1023; // minimum sensor value +int sensorMax = 0; // maximum sensor value +int pitch = 0; // pithc value for the piezo void setup() { // initialize serial communications (for debugging only): Serial.begin(9600); + pinMode(13, OUTPUT); + pinMode(piezoPin, 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(A0); + int sensorValue = 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) + Serial.println(sensorValue); + // map the analog input range // 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); + pitch = map(sensorValue, sensorMin, sensorMax, 220, 3500); // play the pitch: - tone(9, thisPitch, 10); + if (sensorValue < sensorMax -50) { // Offset to prevent the piezo to ring + // all the time, check sensor polarity + tone(piezoPin, pitch, 10); + } delay(1); // delay in between reads for stability } +/* Esercizi: + 1. Implementare constrain e smoothing in questo sketch + */