]> git.piffa.net Git - sketchbook_andrea/blobdiff - piezo/piezo_1_tonePitchFollower/piezo_1_tonePitchFollower.ino
piezo
[sketchbook_andrea] / piezo / piezo_1_tonePitchFollower / piezo_1_tonePitchFollower.ino
index 5ae3099928d38078368e9335485f64da745cfc6a..9ceda24d32cdabfc4475e6f7f51be22477f55990 100644 (file)
@@ -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,28 +31,105 @@ 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. Modificare lo script in modo che vengano emessi suoni solo quando
+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
+}
 */