Go Down

Topic: problema con touch sensor e audio (Read 641 times) previous topic - next topic

Erika86

Ciao a tutti,
sto tentanto di maneggiare led bottoni e un touch sensor. Quello che il circuito dovrebbe fare è:
premo due bottoni contemporaneamente; al rilascio, due led vanno in fade in e out. Solo in questa condizione (quindi non se i led sono spenti), toccando il touch sensor una canzone deve essere riprodotta. Il problema è che all'accensione dei led sembra che il segnale che attivi il touch sensor venga inviato anche se io non lo sto toccando e quindi la canzone parte ugualmente. Le ho provate tutte ma non riesco a trovare l'errore. Ecco il codice:

ARDUINO

MAIN TAB
const int BUTTON2 = 7;     // the number of the pushbutton pin
const int BUTTON1 = 2;     // the number of the pushbutton pin
const int LED2 =  9;      // the number of the LED pin
const int LED1 =  10;      // the number of the LED pin


unsigned long start;
boolean timer = false;
unsigned long end_fadeIn;
unsigned long end_fadeOut;
int fadePeriod = 2000;

const int knockSensor = 5; // the piezo is connected to analog pin 5
const int THRESHOLD = 100;  // threshold value to decide when the detected sound is a knock or not

int tempo = 0;

// these variables will change:
int sensorReading;      // variable to store the value read from the sensor pin

int state;
int fade1 = 0;
int fade2 = 0;
int incr1 = 1;
int incr2 = 1;

boolean ledOn = false; //boolean to lets the sensor play the sound just if LEDs are turned on

void setup()
{
  pinMode(LED2, OUTPUT);
  pinMode(LED1, OUTPUT);
  pinMode(BUTTON2, INPUT);
  pinMode(BUTTON1, INPUT);
  pinMode(knockSensor, INPUT); // declare the sensor as as INPUT
  Serial.begin(9600);       // use the serial port
}

void loop()

  led();
  if (ledOn) {
  pressSensor();
  }
}

LED TAB

void led() {

  switch (state) {
  case 0:                           
    if(digitalRead(BUTTON2)==HIGH && digitalRead(BUTTON1)==HIGH){   //initial state: buttons released, nothing happens
      state=1;
       
    }
ledOn = false;
    break;

  case 1:       

    if(digitalRead(BUTTON2)==LOW && digitalRead(BUTTON1)==LOW){       //the two buttons are pressed at the same time


      //QUI FAI PARTIRE UN TIMER CHE DETERMINA LA DURATA DEL FADING
      if (timer == false){
        start = millis();
        timer = true;
         
      }

      //QUI GLI DICI QUANTO DURA IL FADE; SE VUOI TEMPI DIVERSI FAI fadeInPeriod e fadeOutPeriod e
      //li metti come variabili int con valori diversi all'inizio, inizio inizio.
      end_fadeIn = start + fadePeriod;
      end_fadeOut = end_fadeIn + fadePeriod;
      //Serial.println (start);
      if (millis()<=end_fadeIn){
        fade1 = fade2 = map(millis(), start, end_fadeIn, 0, 255);
        analogWrite(LED1, fade1);
       analogWrite(LED2, fade2);
      }

      if (millis()>=end_fadeIn && millis()<=end_fadeOut){
        fade1 = fade2 = map(millis(), end_fadeIn, end_fadeOut, 255, 0);
        analogWrite(LED1, fade1);
       analogWrite(LED2, fade2);
      }

    if (millis()>end_fadeOut){
    timer = false;
      }
    }/// tutto questo succede solo se i due pulsanti sono OFF
ledOn = true;
    break;

  case 2:             

    state = 0;
    ledOn = false;
    break;
  }
}

TPUCH SENSOR TAB

void pressSensor() {
 
  // read the sensor and store it in the variable sensorReading:
  sensorReading = analogRead(knockSensor);   
 
  if ((millis() - tempo) > 100) {
 
  // if the sensor reading is greater than the threshold:
  if (sensorReading <= THRESHOLD)
  {        // If the switch is not ON,
    Serial.print(1, BYTE);               // send 1 to Processing
    tempo = millis();
  }
  else {
    // toggle the status of the ledPin:
    //Serial.print(0, BYTE);               // send 0 to Processing
  }
 
  }
}


PROCESSING CODE

import ddf.minim.*;
import ddf.minim.signals.*;
import ddf.minim.analysis.*;
import ddf.minim.effects.*;

   import processing.serial.*;
   
   Serial port;
   
   int val;
   
   Minim minim;
   AudioPlayer prova;


   
   
   void setup()
   {
      minim = new Minim(this);
      prova = minim.loadFile("01 - Fango.mp3", 2048); 
   
     println(Serial.list());
   
     port = new Serial(this, Serial.list()[0], 9600);
   
     size(10, 10);
     //prova.loop(1); il suono parte all'avvio
   }
   
   
   void draw()
   { 
   
   
   
 
      if (1 < port.available()) {
       val = port.read();
       println(val);
   
     }

     if (val == 1) {
        val = 0;
      // prova.rewind();
      // prova.loop(1);
       prova.play();
       }

   }
   
   void stop()
   {
   
     prova.close();
   
     minim.stop();
   
     super.stop();
   }

Vi prego aiutatemi!!!!

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy