====== Exercices sur les entrées/sorties numériques ====== Le but est de réaliser un programme informatique capable de répondre aux différentes attentes. ===== Exercices de préchauffe ===== *En appuyant sur S1 une LED s’allume, sur S2 ce sont deux LEDs et S3 se sont trois LEDs qui s’allument. ===== Pour les débutants ===== Écrire le programme qui : - Simule le fonctionnement d’un feu de passage piéton. Si aucun des boutons n’est actionné, la LED jaune doit clignoter pour les voitures. En appuyant sur n’importe lequel des boutons le feu commence à fonctionner en faisant clignoter la LED verte pendant 3 secondes, puis en allumant la LED jaune pendant 3 secondes et enfin la LED rouge pendant 10 secondes pour, une fois cette séquence réalisée, recommencer avec la verte. - Compte le nombre de fois où l’on appui sur le bouton. On considère un appui lorsque le bouton est pressé puis relâché. Le résultat doit être exprimé sous forme de code binaire affiché par les trois LEDs. Le résultat maximum en utilisant les trois est 7 (23-1). Sachant que la LED verte correspond à 1 bit, la jaune 2 bit et la rouge 3 bit. - En appuyant sur l’interrupteur S1, allume les LED1 et LED3, en appuyant sur S2 allume la LED jaune, en appuyant sur S3 éteints toutes les LEDs. Cette opération doit être réalisée en modifiant directement les valeurs du registre (sans utiliser la librairie du //Home Lab//) - Compte le nombre de fois où l’on appui sur le bouton. Le résultat doit être exprimé en faisant clignoter les LEDs. Après chaque appui le nombre de clignotements doit être augmenté d’une valeur. N’importe lequel des boutons peut être sélectionné. Il est nécessaire d’utiliser une //sub function// permettant de faire clignoter les LEDs en ayant le nombre de clignotement comme paramètre. - En appuyant sur le bouton S1, affiche « SOS » en morse en faisant clignoter la LED rouge. En appuyant sur S2, affiche « CQD » sur la LED jaune et « OK » sur la LED rouge en appuyant sur S3. ===== Pour les confirmés ===== Écrire le programme qui - Pour chacun des trois boutons, allume la LED correspondante. Les registres doivent être utiliser pour allumer et éteindre en seulement une seule opération d’assignation (conseil : utiliser les //bit shifts//). - En appuyant sur la séquence suivante de boutons : S3-S2-S1, allume la LED verte. Pour toutes les autres combinaisons la LED verte doit clignoter afin de confirmer l’appui sur le bouton. - On considère un bouton pour une LED. Le contrôleur doit allumer aléatoirement les LEDs et l’utilisateur doit répéter cette séquence. La séquence d’allumage est plus longue à chaque fois – une LED est ajoutée aléatoirement. Après le tour de l’utilisateur, sa séquence est contrôlée pour savoir si elle est correcte. Le temps (gap) d’attente entre deux entrées est de deux secondes. En cas d’erreur toutes les LEDs s’allument trois fois (le nombre d’entrées correctes peuvent être affichées sur le LCD). - mesure le temps de réaction. En allumant aléatoirement une des LEDs, l’utilisateur doit appuyer sur le bouton correspondant. Le temps d’allumage de la LED est aléatoire mais n’excède pas 100ms. Le résultat est affiché sur le LCD en millisecondes. La valeur du bouton ne peut pas être lue par la fonction qui filtre de clignotement parce que ce résultat est un //extra delay//. ===== Questions ===== - Quelle est la différence entre les opérations ”=” et ”==” ? Donnez deux exemples pour illustrer. - Quelle est la différence entre les opérations “|” et “||”? Donnez deux exemples pour illustrer. - Écrire une expression dans laquelle on utilise l’équation “x = x + 1” douze fois. - Comment utilise-t-on une boucle sans fin en langage de programmation en C ? - Quel type de variable choisirez-vous en langage C pour contenir un nombre positif entre 7 et 154 ? - Quel registre détermine la direction d’un port ? Donnez un exemple de la configuration d’un en entrée puis en sortie. - Quelle méthode peut être utilisée contre le clignotement? Donnez un exemple de méthode utilisant un //hardware// puis un //software//. - Qu’est-ce qu’un //bit shift//..? Donnez un exemple concret de cette explication. - Pour quelle raison utilise-t-on des résistances //pull-up// avec les interrupteurs? Comment détermine-t-on sa résistivité? - Calculez la résistance pour une LED de régulation du courant, la tension est de 5V, la tension en amont de la LED est de 2,7 V et le courant est de 30 mA.