Paso 5: El Arduino código
2009: Martin ReeD, Ned quemaduras, Jon Ward, John Kestner
constantes:
const int ledPin = 12; el circuito de solenoide está conectado al pin digital 12
const int knockSensor = 0; el piezoeléctrico es conectado al pin analógico 0
const int umbral = 20; valor de umbral para decidir cuándo el sonido detectado es un golpe o no;
cambiar esto para ajustar la sensibilidad en su propio bloque
int sensorReading = 0; variable para almacenar el valor leído desde el perno del sensor
int ledState = bajo; variable utilizado para st4re el estado del pasado, para cambiar la luz
Hora actual
int current_millis_value = 0;
int previous_millis_value = 0;
int m = 0;
int segundos = 0;
int minutos = 45; configurar manualmente los minutos comienza desde cuando enciende
int horas = 6; programar manualmente las horas comienza desde cuando enciende
Inicializar las Variables de seguimiento de Knock
lastKnock largo = 0;
curKnock largo = 0;
int lastIntensity = 0;
int shouldKnock = 0;
largo knockSpaces [100];
void setup() {}
pinMode (ledPin, salida); declara el ledPin como salida
pinMode (knockSensor, entrada);
Serial.Begin(9600); utilizar el puerto serie
Serial.println ("Bienvenido a la cuadra del reloj Knock!");
}
void loop() {}
Gestionar el tiempo
current_millis_value = millis();
m += current_millis_value - previous_millis_value;
segundos += m / 1000;
m = m % 1000;
minutos segundos += / 60;
segundos = segundos % 60;
horas += minutos / 60;
minutos = minutos % 60;
horas = horas % 24;
previous_millis_value = current_millis_value;
leer el sensor y almacenarlo en la variable sensorReading:
sensorReading = analogRead(knockSensor);
curKnock = millis();
Si la lectura del sensor es mayor que el umbral, lo cuenta como un golpe
Si (sensorReading > = umbral) {}
Si ((curKnock-lastKnock) < 1000) {}
knockSpaces [shouldKnock] = (curKnock - lastKnock);
shouldKnock ++;
}
lastKnock = curKnock;
lastIntensity = sensorReading;
Delay(150); Evite accionar accidentalmente más de una vez
Si no es así, verifique si ha transcurrido ms de 1000 y comenzar a golpear:
} else if ((curKnock-lastKnock) > 1000 & & shouldKnock > = 1) {}
Si (shouldKnock < 5) {}
Golpes de RESET
shouldKnock = 0;
lastKnock = 0;
lastIntensity = 0;
Tocar horas
para (int y = 0; y < horas; y ++) {}
Serial.println ("golpee! (Horas) ");
knockOut(round((max(sensorReading,lastIntensity) / 50) * 18));
retrasar (200 + random(90));
}
Delay(900);
Knock minutos (incrementos de 15 minutos)
para (int y = 0; y < floor(minutes / 15); y ++) {}
Serial.println ("golpee! (Minutos) ");
knockOut(round((max(sensorReading,lastIntensity) / 50) * 18));
retrasar (900 + random(200));
}
} else {}
Golpe hacia atrás
para (int y = 0; y < shouldKnock; y ++) {}
Serial.println ("golpee! (Diversión)! ");
knockOut(0);
retardo ((knockSpaces [y] - 20));
}
Golpes de RESET
shouldKnock = 0;
lastKnock = 0;
lastIntensity = 0;
knockOut(0);
Delay(150); Evite accionar accidentalmente más de una vez
}
Delay(100); Evite accionar accidentalmente más de una vez
}
}
Realizar un golpe
anular el golpe de gracia (int tVolume) {}
ledState = alto;
digitalWrite (ledPin, ledState);
retrasar (20 + random(tVolume)); Aleatorizar intensidad
ledState = bajo;
digitalWrite (ledPin, ledState);
}