Cours:ArduinoSimulationUno : Différence entre versions
| Ligne 1 : | Ligne 1 : | ||
[[Cours:TPs_1103|{{Rouge|<big>'''Retour à la liste des Tps'''</big>}}]] | [[Cours:TPs_1103|{{Rouge|<big>'''Retour à la liste des Tps'''</big>}}]] | ||
| + | |||
[[Cours:ArduinoSimulationCorrection|{{Vert|<big>'''Éléments de correction'''</big>}}]] | [[Cours:ArduinoSimulationCorrection|{{Vert|<big>'''Éléments de correction'''</big>}}]] | ||
| + | |||
| + | |||
| + | Il conviendra si besoin de reprendre le TP précédent ! | ||
| + | |||
Nous allons explorer dans ce TP un logiciel en ligne de simulation sur le site https://circuits.io/ | Nous allons explorer dans ce TP un logiciel en ligne de simulation sur le site https://circuits.io/ | ||
| Ligne 6 : | Ligne 11 : | ||
={{Rouge|Prise en main}}= | ={{Rouge|Prise en main}}= | ||
| + | =={{Bleu|Branchement}}== | ||
| + | |||
| + | On souhaite commander 2 leds (rouge et verte), et utiliser un bouton poussoir pour interagir avec le système. | ||
| + | |||
| + | Le choix des broches pour les leds est laissé libre, le bouton sera connecté sur une interruption au choix : | ||
| + | *broche arduino 2 : interruption 0 | ||
| + | *broche arduino 3 : interruption 1 | ||
| + | |||
| + | {{Question|Ajouter et connecter les composants nécessaires, et si besoin donner leur une valeur adaptée.}} | ||
| + | |||
| + | =={{Bleu|Associons leds et bouton}}== | ||
| + | |||
| + | On souhaite avoir un système dont le comportement est le suivant : | ||
| + | *si bouton appuyé alors : | ||
| + | **led verte allumée | ||
| + | ** led rouge éteinte | ||
| + | *sinon | ||
| + | **led verte éteinte | ||
| + | ** led rouge allumée | ||
| + | |||
| + | {{Question|Écrire un programme répondant à ce cahier des charges}} | ||
| + | =={{Bleu|Changement d'état}}== | ||
| + | Le système doit maintenant changer d'état à l'appui sur le bouton : | ||
| + | *à chaque appui la led rouge change d'état | ||
| + | *la led verte change d'état tous les 2 appuis | ||
| − | ={{Rouge| | + | {{Question|Codez !}} |
| + | |||
| + | ={{Rouge|Afficheur 7 segments}}= | ||
| + | |||
| + | =={{Bleu|Branchement}}== | ||
| + | |||
| + | Nous relions maintenant un afficheur 7 segments à la carte arduino. | ||
| + | |||
| + | Remarquons que l'afficheur ne peut pas être connecté directement sur la platine d'essais, il faut le relier par des fils volants. | ||
| + | |||
| + | Nous n'utiliserons pas le point (DP). Les segments seront connectés au choix sur les broches 0 à 2 et 4 à 7 (nous n'utilisons pas la broche 3 qui servira pour un bouton poussoir). | ||
| + | {{Question|Faire le câblage}} | ||
| − | + | =={{Bleu|Premier affichage}}== | |
| − | + | {{Question|En utilisant les fonctions pinMode et digitalWrite, représentez le chiffre 2 sur l'afficheur}} | |
| − | {{ | + | {{Question|Modifiez votre programme pour représentez le chiffre 3}} |
| − | + | {{Question|Puis affichez successivement 2 puis 3}} | |
| − | + | {{Vert|'''... ça devient vite pénible !!!'''}} | |
| − | + | =={{Bleu|tableau et PORT}}== | |
| − | {| | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | ==={{Vert|Notion de port}}=== | |
| − | |||
| − | + | [[Fichier:ArduinoPinout.png|right|400px]] | |
| − | + | En observant attentivement la figure ci-contre, on constate que les pattes utilisées pour commander les leds n'ont pas été choisies au hasard. | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | En effet, nous utilisons les pattes 0 à 7, qui correspondent pour le µcontrôleur au PORTB (PD0, PD1, PD2, ...). | |
| − | + | {{Info|Ainsi, il devient possible de modifier l'état de toutes ces sorties/leds, en une seule instruction :}} | |
| − | { | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | } | ||
| + | <source lang=c> | ||
void setup() | void setup() | ||
{ | { | ||
| − | + | // déclarer toutes les pattes en sortie : | |
| − | |||
| − | |||
| − | |||
} | } | ||
void loop() | void loop() | ||
{ | { | ||
| − | + | //mettre toutes les sorties à '1' | |
| + | PORTB = 0b11110111; // nous n'utilisons pas PD3, la broche 3 | ||
| + | delay(200); | ||
| + | //mettre toutes les sorties à '0' | ||
| + | PORTB = 0b00000000; // ou PORTB = 0x00; ou encore PORTB = 0; | ||
| + | delay(200); | ||
} | } | ||
</source> | </source> | ||
| − | {{ | + | ==={{Vert|Utilisation}}=== |
| + | {{Question|Reprenez la question précédente, c'est à dire afficher 2 puis 3}} | ||
| + | {{Question|Puis complétez pour afficher en boucle tous les chiffres}} | ||
| + | ==={{Vert|Tableau}}=== | ||
| − | + | Simplifions encore en utilisant un tableau dont le principe est donné si dessous : | |
| − | + | <source lang=c> | |
| − | + | // déclaration d'un tableau de 3 cases | |
| − | + | // avec des valeurs initiales dans chaque case | |
| − | + | unsigned char tableau[3] = {0b00000000,0b11001100,0b11110000}; | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | void loop() | |
| + | { | ||
| + | // pour modifier une case : | ||
| + | tableau[0] = 0b01010101; // modification de la première case | ||
| + | |||
| + | // utilisation d'une case : | ||
| + | x = tableau[2]; // dernière case du tableau de dimension 3 | ||
| − | + | // parcourir le tableau | |
| − | + | for (i=0;i<3;i++) | |
| − | + | { | |
| − | + | .... = tableau[i] ....; | |
| − | + | } | |
| − | + | } | |
| − | |||
| − | |||
| − | |||
</source> | </source> | ||
| − | {{Question| | + | {{Question|Reprendre la question précédente en utilisant un tableau}} |
| − | |||
| − | + | ={{Rouge|Terminé ? ... ajoutons l'afficheur des dizaines !}}= | |
| − | + | =={{Bleu|Câblage}}= | |
| − | |||
| − | {{ | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| + | Nous allons réaliser un multiplexage des afficheurs, c'est à dire que les segments des 2 afficheurs sont reliés ensemble | ||
| − | + | ..... du coup la valeur est la même sur les 2 afficheurs ! | |
| − | + | Il faut alors modifier le schéma en reliant les anodes communes non plus à l'alimentation directement, mais au µcontrôleur. | |
| − | {{ | + | {{Utiliser les broches 8 et 9 pour connecter les anodes communes.}} |
| − | {{ | + | =={{Bleu|Premier programme}}== |
| − | + | {{Question|Écrire un programme qui affiche la valeur 2 sur l'afficheur des unités puis des dizaines.}} | |
| − | |||
| − | |||
| − | + | '''Remarque :''' si cela est fait assez rapidement (<10ms), on aura l'impression que les 2 afficheurs sont allumés simultanément ! | |
| − | |||
| − | |||
| − | |||
| − | + | =={{Bleu|Compteur modulo 99}}== | |
| − | { | ||
| − | |||
| − | } | ||
| − | + | {{Question|Réalisez alors un compteur modulo 99}} | |
| − | { | ||
| − | |||
| − | |||
| − | |||
| − | } | ||
| − | |||
Version du 6 octobre 2016 à 15:32
Il conviendra si besoin de reprendre le TP précédent !
Nous allons explorer dans ce TP un logiciel en ligne de simulation sur le site https://circuits.io/
Sommaire
Prise en main
Branchement
On souhaite commander 2 leds (rouge et verte), et utiliser un bouton poussoir pour interagir avec le système.
Le choix des broches pour les leds est laissé libre, le bouton sera connecté sur une interruption au choix :
- broche arduino 2 : interruption 0
- broche arduino 3 : interruption 1
Ajouter et connecter les composants nécessaires, et si besoin donner leur une valeur adaptée.
Associons leds et bouton
On souhaite avoir un système dont le comportement est le suivant :
- si bouton appuyé alors :
- led verte allumée
- led rouge éteinte
- sinon
- led verte éteinte
- led rouge allumée
Écrire un programme répondant à ce cahier des charges
Changement d'état
Le système doit maintenant changer d'état à l'appui sur le bouton :
- à chaque appui la led rouge change d'état
- la led verte change d'état tous les 2 appuis
Afficheur 7 segments
Branchement
Nous relions maintenant un afficheur 7 segments à la carte arduino.
Remarquons que l'afficheur ne peut pas être connecté directement sur la platine d'essais, il faut le relier par des fils volants.
Nous n'utiliserons pas le point (DP). Les segments seront connectés au choix sur les broches 0 à 2 et 4 à 7 (nous n'utilisons pas la broche 3 qui servira pour un bouton poussoir).
Premier affichage
En utilisant les fonctions pinMode et digitalWrite, représentez le chiffre 2 sur l'afficheur
Modifiez votre programme pour représentez le chiffre 3
Puis affichez successivement 2 puis 3
... ça devient vite pénible !!!
tableau et PORT
Notion de port
En observant attentivement la figure ci-contre, on constate que les pattes utilisées pour commander les leds n'ont pas été choisies au hasard.
En effet, nous utilisons les pattes 0 à 7, qui correspondent pour le µcontrôleur au PORTB (PD0, PD1, PD2, ...).
Ainsi, il devient possible de modifier l'état de toutes ces sorties/leds, en une seule instruction :
void setup()
{
// déclarer toutes les pattes en sortie :
}
void loop()
{
//mettre toutes les sorties à '1'
PORTB = 0b11110111; // nous n'utilisons pas PD3, la broche 3
delay(200);
//mettre toutes les sorties à '0'
PORTB = 0b00000000; // ou PORTB = 0x00; ou encore PORTB = 0;
delay(200);
}
Utilisation
Reprenez la question précédente, c'est à dire afficher 2 puis 3
Puis complétez pour afficher en boucle tous les chiffres
Tableau
Simplifions encore en utilisant un tableau dont le principe est donné si dessous :
// déclaration d'un tableau de 3 cases
// avec des valeurs initiales dans chaque case
unsigned char tableau[3] = {0b00000000,0b11001100,0b11110000};
void loop()
{
// pour modifier une case :
tableau[0] = 0b01010101; // modification de la première case
// utilisation d'une case :
x = tableau[2]; // dernière case du tableau de dimension 3
// parcourir le tableau
for (i=0;i<3;i++)
{
.... = tableau[i] ....;
}
}
Reprendre la question précédente en utilisant un tableau
Terminé ? ... ajoutons l'afficheur des dizaines !
=Câblage
Nous allons réaliser un multiplexage des afficheurs, c'est à dire que les segments des 2 afficheurs sont reliés ensemble
..... du coup la valeur est la même sur les 2 afficheurs !
Il faut alors modifier le schéma en reliant les anodes communes non plus à l'alimentation directement, mais au µcontrôleur.
Modèle:Utiliser les broches 8 et 9 pour connecter les anodes communes.
Premier programme
Écrire un programme qui affiche la valeur 2 sur l'afficheur des unités puis des dizaines.
Remarque : si cela est fait assez rapidement (<10ms), on aura l'impression que les 2 afficheurs sont allumés simultanément !