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 [Ici] 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
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 |
Procédures expérimentales
Étape 1 : Construisez le circuit.
Étape 2 : Accédez au dossier du code.
cd ~/davinci-kit-for-raspberry-pi/c/3.1.7/
Étape 3 : Compilez le code.
gcc 3.1.7_TrafficLight.c -lwiringPi
Étape 4 : Exécutez le fichier.
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 Le code C ne fonctionne pas ?.
Explication du Code
#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 1.1.5 Afficheur 7 segments à 4 chiffres pour plus de détails. Ici, les codes permettent d’afficher le décompte du temps du feu tricolore.
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.
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
1.1.5 4-Digit 7-Segment Display 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.
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.