Créer un compte à rebours sonore
hey la compagnie, jeunes (et vieux) arduiniens, j'ai besoin de vous !
je vous expose mon soucis. je souhaite créer une bombe pour le airsoft, alors rassurez-vous, pas une vraie bombe, surtout que la nsa nous surveille. non, je veux juste faire une bombe, à activer et à désactiver. mon problème se pose sur le compte à rebours. je voudrais faire un bip par seconde pour les 30 premières secondes, 2 bips/sec pour les 10 secondes qui suivent, et 3 bips/sec pour les 5 dernières. le tout donc pour un total de 45sec.
note, j'utilise un attiny85 programmé avec une arduino mega 2560. c'est à dire que je ne peux pas utiliser certaines fonctions, dont tone(), qui m'aurait été bien utile. j'ai cependant recréé la fonction en faisant un signal carré à 600hz, dont le son qui en sort est, je trouve, idéal pour un bip de bombe.
ce code fonctionne parfaitement, testé avec un hp de 8?. je pendrais sans aucun doute un buzzer avec un petit ampli, pour le faire gueuler bien comme il faut.
alors, je me suis dis, que je vais simplement créer des for, qui vont changer l'état d'un booléan, pour activer une boucle while vérifiant ce booléan.
voilà ce que ça donne
voilà, seulement, quand je transferts ce code sur ma belle arduino (pour tester le code avant de l'inscrire sur mon attiny). je n'entends rien pendant environ 1sec, puis j'entends le son sortir, sans arrêt. voilà, c'est là où je bloque. c'est pas normal que ça sonne sans arrêt.
j'espère que vous pourrez m'aider.
binairement, adri
je vous expose mon soucis. je souhaite créer une bombe pour le airsoft, alors rassurez-vous, pas une vraie bombe, surtout que la nsa nous surveille. non, je veux juste faire une bombe, à activer et à désactiver. mon problème se pose sur le compte à rebours. je voudrais faire un bip par seconde pour les 30 premières secondes, 2 bips/sec pour les 10 secondes qui suivent, et 3 bips/sec pour les 5 dernières. le tout donc pour un total de 45sec.
note, j'utilise un attiny85 programmé avec une arduino mega 2560. c'est à dire que je ne peux pas utiliser certaines fonctions, dont tone(), qui m'aurait été bien utile. j'ai cependant recréé la fonction en faisant un signal carré à 600hz, dont le son qui en sort est, je trouve, idéal pour un bip de bombe.
code: [select]
long temps_son;
boolean etat_son = low;
void setup ()
{
pinmode(son, output);
}
void loop()
{
if (micros() - temps_son > 830)
{
temps_son = micros();
etat_son = !etat_son;
digitalwrite(son, etat_son);
}
}
ce code fonctionne parfaitement, testé avec un hp de 8?. je pendrais sans aucun doute un buzzer avec un petit ampli, pour le faire gueuler bien comme il faut.
alors, je me suis dis, que je vais simplement créer des for, qui vont changer l'état d'un booléan, pour activer une boucle while vérifiant ce booléan.
voilà ce que ça donne
code: [select]
for(int compte_a_rebours; compte_a_rebours < 30; compte_a_rebours++) // si nombre de secondes écoulés < à 35s
{
if((millis() - temps_sortie_audio > 10) && sortie_audio == high)
temps_sortie_audio = millis();
sortie_audio = low;
}
if ((millis() - temps_sortie_audio > 990) && sortie_audio == low)
{
temps_sorti_audio = millis();
sortie_audio = high:
}
}
for(int compte_a_rebour; compte_a_rebours < 40; compte_a_rebours++) // si nombre de secondes écoulés < 10s
{
if((millis() - temps_sortie_audio > 10) && sortie_audio == high)
{
temps_sortie_audio = millis();
sortie_audio = low;
}
if ((millis() - temps_sortie_audio > 490) && sortie_audio == low) {
temps_sorti_audio = millis();
sortie_audio = high:
}
}
for(int compte_a_rebours; compte_a_rebours < 45; compte_a_rebours++) // si nombre de secondes écoulés < 10s
{
if((millis() - temps_sortie_audio > 10) && sortie_audio == high)
{
temps_sortie_audio = millis();
sortie_audio = low;
}
if ((millis() - temps_sortie_audio > 320) && sortie_audio == low) {
temps_sorti_audio = millis();
sortie_audio = high:
}
}
while(sortie_audio == high)
{
if (micros() - temps_son > 830) // fonction si micros() > à 830ms
{
temps_son = micros();
etat_son = !etat_son; // inversion de l'état
digitalwrite(son, etat_son);
}
}
voilà, seulement, quand je transferts ce code sur ma belle arduino (pour tester le code avant de l'inscrire sur mon attiny). je n'entends rien pendant environ 1sec, puis j'entends le son sortir, sans arrêt. voilà, c'est là où je bloque. c'est pas normal que ça sonne sans arrêt.
j'espère que vous pourrez m'aider.
binairement, adri
dejà ici problème :
compte_a_rebour =/= compte_a_rebours
code: [select]
for(int compte_a_rebour; compte_a_rebours < 40; compte_a_rebours++)
compte_a_rebour =/= compte_a_rebours
Arduino Forum > International > Français (Moderators: jfs, Snootlab) > Créer un compte à rebours sonore
arduino
Comments
Post a Comment