68tjs:
Euh le sujet étant devenu bien précis ne serait-il pas temps de respecter les "Règles du forum francophone" et changeant le titre du premier message ?
Ne pas oublier que les titres servent à faire des recherches sur le forum.
Merci.
Oui tu as raison, en fait je voulais ouvrir un nouveau sujet mais vu que sur ce forum les titres sont éditable c'est mieux.
Bon, plus j'avance et plus j'ai l’impression de reculer...
D'abord il met impossible de flascher mon 168p donc j'ai laissé tombé cette partie, ensuite, j'ai réussi à ajouter un détecteur sonore dans mon code, il y a encore une partie du code que je ne comprend pas mais le test fait sur tinkercad fonctionne, les servos bouge plus vite en fonction du volume.
N'étant pas exactement ce que je recherche, j'ai pas mal lu et j'ai mis en favoris une quantité énorme de site , le seul code que j'ai trouvé avec un vrai détecteur de BPM et celui-là:
// Arduino Beat Detector By Damian Peckett 2015
// License: Public Domain.
// Our Global Sample Rate, 5000hz
#define SAMPLEPERIODUS 200
// defines for setting and clearing register bits
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
void setup() {
// Set ADC to 77khz, max for 10bit
sbi(ADCSRA,ADPS2);
cbi(ADCSRA,ADPS1);
cbi(ADCSRA,ADPS0);
//The pin with the LED
pinMode(2, OUTPUT);
}
// 20 - 200hz Single Pole Bandpass IIR Filter
float bassFilter(float sample) {
static float xv[3] = {0,0,0}, yv[3] = {0,0,0};
xv[0] = xv[1]; xv[1] = xv[2];
xv[2] = sample / 9.1f;
yv[0] = yv[1]; yv[1] = yv[2];
yv[2] = (xv[2] - xv[0])
+ (-0.7960060012f * yv[0]) + (1.7903124146f * yv[1]);
return yv[2];
}
// 10hz Single Pole Lowpass IIR Filter
float envelopeFilter(float sample) { //10hz low pass
static float xv[2] = {0,0}, yv[2] = {0,0};
xv[0] = xv[1];
xv[1] = sample / 160.f;
yv[0] = yv[1];
yv[1] = (xv[0] + xv[1]) + (0.9875119299f * yv[0]);
return yv[1];
}
// 1.7 - 3.0hz Single Pole Bandpass IIR Filter
float beatFilter(float sample) {
static float xv[3] = {0,0,0}, yv[3] = {0,0,0};
xv[0] = xv[1]; xv[1] = xv[2];
xv[2] = sample / 7.015f;
yv[0] = yv[1]; yv[1] = yv[2];
yv[2] = (xv[2] - xv[0])
+ (-0.7169861741f * yv[0]) + (1.4453653501f * yv[1]);
return yv[2];
}
void loop() {
unsigned long time = micros(); // Used to track rate
float sample, value, envelope, beat, thresh;
unsigned char i;
for(i = 0;;++i){
// Read ADC and center so +-512
sample = (float)analogRead(0)-503.f;
// Filter only bass component
value = bassFilter(sample);
// Take signal amplitude and filter
if(value < 0)value=-value;
envelope = envelopeFilter(value);
// Every 200 samples (25hz) filter the envelope
if(i == 200) {
// Filter out repeating bass sounds 100 - 180bpm
beat = beatFilter(envelope);
// Threshold it based on potentiometer on AN1
thresh = 0.02f * (float)analogRead(1);
// If we are above threshold, light up LED
if(beat > thresh) digitalWrite(2, HIGH);
else digitalWrite(2, LOW);
//Reset sample counter
i = 0;
}
// Consume excess clock cycles, to keep at 5000 hz
for(unsigned long up = time+SAMPLEPERIODUS; time > 20 && time < up; time = micros());
}
}
Par contre là c'est du Chinois, ça fait clignoter une LED mais je ne vois pas comment m'en servir pour augmenter ou diminuer des vitesse de servos ou moteurs, il reste encore pas mal de trucs que je pige pas, bon en même temps je démarre de 0 ; j'aurais peut être dû commencer par plus simple
Pour le moteur, la encore j'ai trouvé quelques trucs mais n'ayant rien pour tester c'est pas évident de plus je n'ai pas encore trouvé comment ajouter une fin de course qui servirait de position HOME (pour avoir une référence de position).
Donc je patauge un peu; de plus je ne me suis toujours pas décidé sur la mécanique au choix :
Soit 2 servos, 1 pour faire bouger le miroir de gauche à droite et un servo pour haut et bas, avantage pas de fin de course mais un poil plus de mecanique.
Soir un moteur PAP pour la gauche et la droite et un servo pour le haut et bas mecanique plus simple mais çà impose une fin de course par contre la gestion de la vitesse devrait être plus facile, enfin je pense...
Voilà ou j'en suis.