I2L 2023 Groupe1
Proposition de système
Créer un jeu pour 4 joueurs avec 4 buzzers (boutons). Le buzzer émet 3 sons distincts, les joueurs doivent appuyer le plus rapidement possible sur le buzzer qui leur est attribué lorsque que le bon son est joué. Les sons émis par le haut-parleur sont configurables via une application lorsque l’ordinateur est connecté à la carte via le port USB. Une led RGB se trouve au milieu et affiche la couleur du vainqueur.
Une interface de contrôle via USB sera mise en place.
Contre-proposition
Le périphérique USB doit être de type spécifique (classe 0) et utiliser un point d'accès de volume, vous pouvez vous appuyer sur cet exemple LUFA de base : Média:LUFA_Minimal.zip.
Pour télécharger le son vers la carte, vous écrirez une application avec la bibliothèque libusb
.
Proposition définitive
Répartition du travail
Carte
Seconde version pour corriger le DAC R-2R et pour mieux contrôler le volume.
Montage
Test d'implémentation du buzzer
Premier montage
Câblage des 4 boutons
Les 4 boutons ont été démontés pour souder un câble 4 conducteurs (type téléphonie) sur les points vus plus haut. Les quatre câbles ont été réunis et des connecteurs femelles ont été soudés aux extrémités pour la connexion à la carte. A noter que des LED ont été ajoutées aux boutons buzzer, la carte de ces boutons disposant d'une empreinte pour cela (mais sans le composant). L'effet n'est pas génial ce qui peut expliquer que l'empreinte n'était pas utilisée.
Code
Première approche
Test des LED
#include <avr/io.h>
#include <util/delay.h>
// Boutons sur le Port C
#define BUTTON_1_BIT 2
#define BUTTON_2_BIT 4
// Leds sur le Port D
#define LED_BLUE_BIT 0
#define LED_GREEN_BIT 1
#define LED_RED_BIT 2
#define BUTTON_BUZZER_BIT 6
int main(void)
{
DDRD &= ~(1 << BUTTON_BUZZER_BIT); // Entrée pour le buzzer
DDRD |= (1 << LED_BLUE_BIT) | (1 << LED_GREEN_BIT) | (1 << LED_RED_BIT); // Sortie pour les LEDS
DDRC &= ~(1 << BUTTON_1_BIT) & ~(1 << BUTTON_2_BIT); // Entrée pour les boutons
PORTC |= (1 << BUTTON_1_BIT) | (1 << BUTTON_2_BIT); // Activation des résistances de pull-up
PORTD |= (1 << BUTTON_BUZZER_BIT); // Activation des résistances de pull-up
while (1)
{
if (!(PINC & (1 << BUTTON_1_BIT)))
{
PORTD &= ~(1 << LED_BLUE_BIT);
}
else {
PORTD |= (1 << LED_BLUE_BIT);
}
if (!(PINC & (1 << BUTTON_2_BIT)))
{
PORTD &= ~(1 << LED_GREEN_BIT);
}
else {
PORTD |= (1 << LED_GREEN_BIT);
}
if (!(PIND & (1 << BUTTON_BUZZER_BIT)))
{
PORTD &= ~(1 << LED_RED_BIT);
}
else {
PORTD |= (1 << LED_RED_BIT);
}
}
}
void loopLed()
{
PORTD |= (1 << LED_BLUE_BIT);
PORTD &= ~(1 << LED_GREEN_BIT);
PORTD &= ~(1 << LED_RED_BIT);
_delay_ms(100);
PORTD &= ~(1 << LED_BLUE_BIT);
PORTD |= (1 << LED_GREEN_BIT);
PORTD &= ~(1 << LED_RED_BIT);
_delay_ms(100);
PORTD &= ~(1 << LED_BLUE_BIT);
PORTD &= ~(1 << LED_GREEN_BIT);
PORTD |= (1 << LED_RED_BIT);
_delay_ms(100);
}
Conception
Réalisation
Démonstrations
Rendus
Projet KiCAD : Fichier:I2L-2023-Carte-G1.zip
Programmes : Fichier:I2L-2022-Programmes-G1.zip