Vous êtes sur la page 1sur 3

B AC STI EE ET SIN

Programme de la STI 2D option SIN Fiche N°7 : la boucle « While »


TP de 1ère STI SIN
Utilisation du buzzer de la carte DangerShield à l'aide d'une boucle WHILE
Série 1 / l'analogique et le numérique

Série 2 / programmation informatique (C


version arduino)
I. Fonctionnement de la boucle « While »
AP N°2.1: Découverte de la
programmation informatique à Le principe de fonctionnement de la boucle WHILE (tant que) :
l'aide d'Arduino

Présentation

Fiche N°1: découverte du TANTQUE condition vraie


système Arduino exécution d'instructions (traitement)
Fiche N°2 : les variables
FIN TANTQUE
suite du programme
Fiche N°3 : les fonctions ou
« sous-programmes »

Fiche N°4 : la boucle « FOR »

Fiche N°5 : le test « IF » (+


bouton poussoir) Voici un extrait de la documentation Arduino:

Fiche N°6 : gestion d'une entrée while loops


analogique
Description
Fiche N°7 : la boucle « While » while loops will loop continuously, and infinitely, until the expression inside the parenthesis, () becomes false.
Something must change the tested variable, or the while loop will never exit. This could be in your code, such
Fiche N°8 : Gestion d'un afficheur as an incremented variable, or an external condition, such as testing a sensor.
7 segments
Syntax
AP N°2.2: Commande d'un robot
while (expression) {
// statement(s)
chenille par arduino }
AP N°2.3 Arduino: réalisation de
Parameters
programmes en C (Arduino) expression - a (boolean) C statement that evaluates to true or false
Révisions / Remédiation / ....
Exercices / évaluation

Série 3 : réaliser un site internet (HTML,


En résumé cela donne (exemple):
CSS, PHP, MySQL)
toto=0 ;
Mini projet
while (toto < 5 ) // on fait la boucle While tant que la variable toto est inférieure à 5
TP de terminale STI SIN {
digitalWrite(LED_PIN,HIGH) ; // allumage d'une LED
Cours de Terminale STI SIN toto=toto+1 ; incrément de la variable toto
}
Cours 1ère STI EE

TP de 1ère STI EE

Cours de Terminale STI EE


II. Application avec le Buzzer de la carte DangerShield
TP de terminale STI EE

Convertisseur binaire/decimal/hexa
Remarque : pour faire fonctionner ce buzzer (CET 12A3.5), il faut le faire vibrer (on l'alimente,
Projets (terminales) on arrête, on l'alimente, on arrête, …. le son émis va dépendre de la fréquence de cette
Fiches d'aide (arduino et projet)
alternance marche/arrêt).

Echanges européen

La poursuite d'étude pour les SIN


1. Ouvrir le fichier « dangershield_buzzer.txt », récupérer le programme contenu dans le fichier et testez le (il
faut appuyer sur le 1er bouton poussoir) et essayer de comprendre comment il fonctionne.
Portes ouvertes
2. Compléter l'algorigramme correspondant au programme :
Sources
3. A partir du programme, en déduire la fréquence du son émis

4. Pourquoi la variable "temps" est-elle multipliée par 1 000 ?

III. 1ère modification du programme (changement de variable)


Vous allez modifier le programme précédent pour que la variable réglée soit directement la fréquence (en Hertz). Vous
devrez faire le calcul de la demi période (avant la boucle « While »).

Ainsi en tête de programme (dans la partie déclaration de variables) vous allez écrire :

float frequence = 220; // frequence en Hertz //


float demi_periode; // calcul de la demi période de la fréquence //

Faites la modification du programme. Testez là et faites valider par le professeur.

IV. 2ème modification du programme (ajout d'une fonction ou sous-programme)

On va maintenant créer une fonction (sous programme) que l'on va appeler allu_buzzer. Pour rappel les fonctions ont
été vues dans la Fiche 3: les fonctions ou « sous programmes »

La fonction allu_buzzer va posséder 3 paramètres :

le numéro de la broche (PIN en anglais) de branchement du buzzer


la fréquence
la durée de fonctionnement (en millisecondes)

Ces trois paramètres auront comme nom de variable à l'intérieur de la fonction (variables locales):

adress_buzzer
freq
temps_buz

La fonction sera donc de la forme: void allu_buzzer ( ……. , …….. , ……….)

et utilisée de la manière suivante (dans la boucle Loop): allu_buzzer ( ……. , …….. , ………. );

Cette fonction allu_buzzer va contenir la partie qui gère le Buzzer que l'on enlèvera de la boucle Loop pour la mettre
dans la fonction. Grosso modo ceci (il faudra bien sûr changer le nom des variables et mettre les variables locales
propres à la fonction:
partie issue du Loop et à mettre dans la fonction duree = 0;

(après modifications): while(duree < temps*1000)


{
digitalWrite(BUZZER_PIN,HIGH); //
delayMicroseconds(demi_periode);
digitalWrite(BUZZER_PIN,LOW);
delayMicroseconds(demi_periode);
duree = duree + 2*demi_periode;
}

1. Faire la modification du programme. Essayer. Quand cela fonctionne faire valider par le professeur.

V. Un peu de musique maintenant


rajouter dans la déclaration des variables les notes de musique (norme anglo-saxonne):

const float c = 261;


const float d = 294;
const float e = 329;
const float f = 349;
const float g = 391;
const float gS = 415;
const float a = 440;
const float aS = 455;
const float b = 466;
const float cH = 523;
const float cSH = 554;
const float dH = 587;
const float dSH = 622;
const float eH = 659;
const float fH = 698;
const float fSH = 740;
const float gH = 784;
const float gSH = 830;
const float aH = 880;

et dans la boucle du programme (void loop) :

appui_bp1= digitalRead(Bp1); // lecture de l'état du BP1//

if (appui_bp1 == LOW) // test si appui sur BP//


{
allu_buzzer(BUZZER_PIN, a, 500);
allu_buzzer(BUZZER_PIN, a, 500);
allu_buzzer(BUZZER_PIN, a, 500);
allu_buzzer(BUZZER_PIN, f, 350);
allu_buzzer(BUZZER_PIN, cH, 150);
allu_buzzer(BUZZER_PIN, a, 500);
allu_buzzer(BUZZER_PIN, f, 350);
allu_buzzer(BUZZER_PIN, cH, 150);
allu_buzzer(BUZZER_PIN, a, 650);
delay (500);
allu_buzzer(BUZZER_PIN,eH, 500);
allu_buzzer(BUZZER_PIN,eH, 500);
allu_buzzer(BUZZER_PIN,eH, 500);
allu_buzzer(BUZZER_PIN,fH, 350);
allu_buzzer(BUZZER_PIN,cH, 150);
allu_buzzer(BUZZER_PIN,gS, 500);
allu_buzzer(BUZZER_PIN,f, 350);
allu_buzzer(BUZZER_PIN,cH, 150);
allu_buzzer(BUZZER_PIN,a, 650);

Essayez.

Vous pouvez maintenant rédiger


les 2 fiches de synthèse
N°6: la boucle WHILE
et N°11: liste des instructions
(voir remédiation)

Faites valider les fiches de


synthèse N°6 et N°11 par le
professeur
Régi par la licence Creative Commons: Licence d'attribution en partage identique et non commercial 4.0

« Précédent | Suivant »
Equipe STI 2D options EE et SIN du Lycée LaMache - Combe - Verilhac - Boiron - Varenne
Créé avec le logiciel libre eXeLearning