]> git.piffa.net Git - sketchbook_andrea/blobdiff - basic/analog_input/photo_7_tonePitchFollower/photo_7_tonePitchFollower.ino
Data type con funzione
[sketchbook_andrea] / basic / analog_input / photo_7_tonePitchFollower / photo_7_tonePitchFollower.ino
index e74c7b343449a5c366c457ebb127c5887d99dcc4..5b08caef00ecbc46911456888c994f814565b8f4 100644 (file)
  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
 
+ */