.. note:: Bonjour et bienvenue dans la communauté des passionnés de SunFounder Raspberry Pi, Arduino et ESP32 sur Facebook ! Plongez dans l'univers de Raspberry Pi, Arduino et ESP32 avec d'autres passionnés. **Pourquoi nous rejoindre ?** - **Support d'experts** : Résolvez les problèmes après-vente et relevez vos défis techniques grâce à l'aide de notre communauté et de notre équipe. - **Apprenez et Partagez** : Échangez des astuces et des tutoriels pour perfectionner vos compétences. - **Aperçus exclusifs** : Bénéficiez d'un accès anticipé aux nouvelles annonces de produits et aux avant-premières. - **Réductions spéciales** : Profitez de réductions exclusives sur nos nouveaux produits. - **Promotions festives et concours** : Participez à des concours et à des promotions lors des fêtes. 👉 Prêt à explorer et à créer avec nous ? Cliquez sur [|link_sf_facebook|] et rejoignez-nous dès aujourd'hui ! 3.1.7 Feu Tricolore ======================= Introduction ------------- Dans ce projet, nous allons utiliser des LEDs de trois couleurs pour simuler le changement de feux de signalisation, et un afficheur 7 segments à quatre chiffres pour afficher le décompte de chaque état du feu. Composants ------------- .. image:: img/list_Traffic_Light.png :align: center Schéma de câblage -------------------- ============ ======== ======== === T-Board Name physical wiringPi BCM GPIO17 Pin 11 0 17 GPIO27 Pin 13 2 27 GPIO22 Pin 15 3 22 SPIMOSI Pin 19 12 10 GPIO18 Pin 12 1 18 GPIO23 Pin 16 4 23 GPIO24 Pin 18 5 24 GPIO25 Pin 22 6 25 SPICE0 Pin 24 10 8 SPICE1 Pin 26 11 7 ============ ======== ======== === .. image:: img/Schematic_three_one7.png :align: center Procédures expérimentales ----------------------------- **Étape 1 :** Construisez le circuit. .. image:: img/image254.png :width: 800 **Étape 2 :** Accédez au dossier du code. .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/c/3.1.7/ **Étape 3 :** Compilez le code. .. raw:: html .. code-block:: gcc 3.1.7_TrafficLight.c -lwiringPi **Étape 4 :** Exécutez le fichier. .. raw:: html .. code-block:: sudo ./a.out Lorsque le programme est lancé, les LEDs simuleront le changement de couleurs des feux tricolores. Tout d'abord, la LED rouge s'allume pendant **60s**, puis la LED verte s'allume pendant **30s**, suivie de la LED jaune pendant **5s**. Ensuite, la LED rouge s'allume à nouveau pour **60s**. Cette série d'actions sera répétée en boucle. .. note:: Si cela ne fonctionne pas après l'exécution, ou s'il y a un message d'erreur indiquant : \"wiringPi.h: Aucun fichier ou répertoire de ce type », veuillez consulter :ref:`faq_c_nowork`. **Explication du Code** .. code-block:: c #define SDI 5 #define RCLK 4 #define SRCLK 1 const int placePin[] = {12, 3, 2, 0}; unsigned char number[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; void pickDigit(int digit); void hc595_shift(int8_t data); void clearDisplay(); void display(); Ces fonctions servent à afficher les numéros sur un afficheur 7 segments à quatre chiffres. Reportez-vous à la section :ref:`1.1.5_4digit_c_pi5` pour plus de détails. Ici, les codes permettent d'afficher le décompte du temps du feu tricolore. .. code-block:: c const int ledPin[]={6,10,11}; int colorState = 0; void lightup() { for(int i=0;i<3;i++){ digitalWrite(ledPin[i],HIGH); } digitalWrite(ledPin[colorState],LOW); } Ces lignes contrôlent l'allumage et l'extinction des LEDs. .. code-block:: c int greenLight = 30; int yellowLight = 5; int redLight = 60; int colorState = 0; char *lightColor[]={"Red","Green","Yellow"}; int counter = 60; void timer(int timer1){ // Fonction de minuteur if(timer1 == SIGALRM){ counter --; alarm(1); if(counter == 0){ if(colorState == 0) counter = greenLight; if(colorState == 1) counter = yellowLight; if(colorState == 2) counter = redLight; colorState = (colorState+1)%3; } printf("counter : %d \t light color: %s \n",counter,lightColor[colorState]); } } Ce code active ou désactive le minuteur. Reportez-vous à la section :ref:`1.1.5_4digit` pour plus de détails. Lorsque le compteur atteint zéro, `colorState` change, ce qui permet de changer la LED et d'attribuer une nouvelle valeur au minuteur. .. code-block:: c void loop() { while(1){ display(); lightup(); } } int main(void) { //… signal(SIGALRM,timer); alarm(1); loop(); return 0; } Le minuteur est démarré dans la fonction **main()**. Dans la fonction **loop()**, une boucle `while(1)` est utilisée pour appeler les fonctions de l'afficheur 7 segments et des LEDs.