Écris un programme qui compte combien de fois le bouton A est appuyé en 10 secondes, puis affiche la fréquence (appuis par seconde).
Solution :
#include <stdio.h>
#include <stdint.h>
/* Séquence simulée d'appuis : 1 = appuyé, 0 = relâché.
On simule 10 secondes en 1000 ticks de 10 ms chacun.
Les fronts montants (0->1) comptent comme des appuis. */
int appuis_sim[] = {
0,0,1,1,0,0,1,1,0,0, /* 2 appuis */
1,1,0,0,1,1,0,0,1,1, /* 4 appuis */
0,0,1,1,0,0,1,1,0,0, /* 2 appuis */
0,0,0,0,0,0,0,0,0,0, /* pause */
1,1,0,0,1,1,0,0,0,0 /* 2 appuis */
};
int nb_ticks = 50; /* taille du tableau */
int main(void)
{
int compteur = 0;
int etat_prec = 0;
printf("=== Séquence simulée (10 ms par tick) ===\n");
for (int t = 0; t < nb_ticks; t++) {
int etat = appuis_sim[t];
/* Détecte le front montant (relâché -> appuyé) */
if (etat && !etat_prec) {
compteur++;
printf("Tick %2d : front montant détecté (compteur=%d)\n",
t, compteur);
}
etat_prec = etat;
/* simule k_msleep(10) : chaque tick = 10 ms */
}
/* Durée simulée : nb_ticks * 10 ms */
float duree_s = nb_ticks * 10.0f / 1000.0f;
float frequence = compteur / duree_s;
printf("\n--- Résultats ---\n");
printf("Appuis : %d, Durée : %.2f s, Fréquence : %.1f Hz\n",
compteur, (double)duree_s, (double)frequence);
return 0;
}
Solution copiée dans l'éditeur.