aupa
vuelvo, no he podido contestar antes por que he andado liada. Al final vamos a intentarlo con los piezos o si no con estos sensores que hemos encontrado.
http://www.cooking-hacks.com/index.php/shop/sensors/force-sensitive-resistor-small.html
y os meto el codigo por que quizas lo mas probable sea que el error se del codigo, ya que no sabemos mucho de programacion.
El problema que nos daba era que no conseguiamos un valor estable, ni tan siquiera que las luces estubieran apagadas.
si alguien puede hechar un ojo a este codigo, y ver que enorme aberración hemos podido cometer.
codigo:
/* codigo sacado a partir del codigo de Andres Duarte,
de la pagina "www.andresduarte.com"*/
//////variables y constantes
int ledPin = 9;
int altavoz = 11;
int analogread = 0;
int contador = 0;
int tiempo_muestreo=300; //cuanto tiene que contar para promediar la entrada y enviar la salida. Se promedian valores de entrada para buscar estabilidad.
int v_media=1;
float dif_cambio= 1; //defino la diferencia mínima de presión para cambiar de luminosidad
int v_anterior=0;
int ledPin3 = 10;
extern unsigned int __bss_end;
extern unsigned int __heap_start;
extern void *__brkval;
static int freeMemory(void){
int free_memory;
if((int)__brkval == 0)
free_memory = ((int)&free_memory)-((int)&__bss_end);
else
free_memory = ((int)&free_memory)-((int)__brkval);
return free_memory;
}
void setup() {
Serial.begin(9600);
//freeMemory();
pinMode(ledPin, OUTPUT);
pinMode(altavoz, OUTPUT);
pinMode(ledPin3, OUTPUT);
}
void loop () {
//freeMemory();
int valor_pot = analogRead (0);
int sound = map (valor_pot, 30, 3000, 31, 4000);
for (int i=0; i <= tiempo_muestreo; i++)
{
v_media =valor_pot + v_media;
}
v_media=v_media/tiempo_muestreo; //media de los ultimos 200 valores leidos por el sensor , valor entre 0 y 1023, luego dividiré entre 4 para escalarlo a la salida analogica
if (contador==tiempo_muestreo) //Ya ha contado 200, y procede a enviar valor a LED
{
if (v_media<2000) //valor de presion muy pequeño
{
analogWrite (ledPin, LOW); // si la presion es menor de 100, mantener el LED apagado
}
/*if (abs((v_anterior-v_media)>dif_cambio)&&(v_anterior>v_media)) //el valor ha decrecido, baja la luminosidad
{
analogWrite (ledPin, v_media-dif_cambio);
}
if (abs((v_anterior-v_media)>dif_cambio)&&(v_anterior<=v_media)) //el valor ha aumentado, sube la luminosidad
{
analogWrite (ledPin, v_media+ 500);
}*/
else // si el cambio no ha sido mayor que dif_cambio
{
analogWrite (ledPin, HIGH);
}
contador=0;
}
contador++;
v_anterior=v_media;
int valor_luz = map (valor_pot, 0, 3000, 1, 4000); //escala valores de entrada y salida
int valor_pot2 = analogRead (0);
int valor_luz2 = map (valor_pot2, 0, 3000, 1, 4000);
/* Serial.println();
Serial.print("valor1:");
Serial.print(valor_luz);
Serial.println();
Serial.print("valor2:");
Serial.print(valor_luz2);*/
//delay(500); // solo lo utilizamos para calibrar el sensor
if (valor_luz > 0 and valor_luz < 1000)
tone (ledPin, valor_luz);
//delay (100);
noTone(ledPin);
analogWrite (ledPin, valor_luz/4);
//delay (20);
// if (valor_luz2 > 300 and valor_luz < 640)
//tone (altavoz, valor_luz2);
//delay (50);
//noTone(altavoz);
if (valor_luz < 1000)
tone (ledPin, valor_luz);
//delay (500);
noTone(ledPin);
analogWrite (ledPin, valor_luz);
//delay (300);
// tone (ledPin2, valor_luz);
//delay (1000);
//noTone(ledPin2);
tone (ledPin3, valor_luz2);
//delay (1000);
noTone(ledPin3);
//int valor_pot2 = analogRead (A0);
//int valor_luz2 = valor_pot;
//analogWrite (ledPin2, valor_luz2);
//delay (300);
analogWrite (ledPin3, valor_luz);
//delay (300);
if(valor_luz > 0 && valor_luz < 1000)
int valor_pot2 = analogRead (A0);
//int valor_luz2 = valor_pot;
//analogWrite (ledPin2, valor_luz2);
//delay (300);
analogWrite (ledPin3, valor_luz);
//delay (300);
}
//////