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.
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 :

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

Popular posts from this blog

Convierte tu Raspberry en un NAS. Firmware fvdw-sl 15.3 - Raspberry Pi Forums

How to format a Get Request

avrdude: verification error, first mismatch at byte 0x0000 0x0c != 0x62