« I2L 2023 Groupe6 » : différence entre les versions
(coded) |
|||
Ligne 28 : | Ligne 28 : | ||
= Contre-proposition = | = Contre-proposition = | ||
Votre carte doit se comporter comme un périphérique USB composite, à savoir un périphérique HID clavier et une carte son. | |||
Pour la programmation du périphèrique USB vous utilisez, comme base, les démonstration LUFA : | |||
* <code>Demos/Device/LowLevel/AudioOutput</code> ; | |||
* et <code>Demos/Device/LowLevel/Keyboard</code>. | |||
Vous n'avez pas à écrire de programme PC avec la bibliothèque <code>libusb</code>. | |||
= Proposition définitive = | = Proposition définitive = |
Version du 29 septembre 2023 à 09:26
Proposition de système
Objectif:
Créez un petit dispositif portable capable de lire des livres audio sur l'ordinateur. L'utilisateur peut naviguer à travers les livres audio à l'aide des touches et écouter le contenu via le haut-parleur intégré, il aura également 3 LED : une verte qui signifie que l’audio est en mode marche (play), une bleu qui sera allumée quand l’audio est en mode pause (pause) et une rouge indiquant qu'il y a un souci particulier.
Matériels :
- Microcontrôleur ;
- LED ;
- Touches ;
- Haut-parleur.
Composants nécessaires:
- Microcontrôleur ;
- Haut-parleur : Intégrer un haut-parleur ou un transducteur piézoélectrique pour la sortie audio ;
- Boutons de contrôle : Ajouter des boutons pour la navigation, la lecture/pause.
- LED : couleur rouge s’il a un problème , couleur verte si c’est en mode marche (play) et couleur bleu si c’est en mode pause.
Fonctionnalités:
- Lecture de livres audio ;
- Navigation dans la liste des livres audio et des chapitres ;
- Possibilité de mettre en pause, de reprendre la lecture.
Fonctionnalités Supplémentaires :
- Réglage du volume et contrôle de la lecture.
Contre-proposition
Votre carte doit se comporter comme un périphérique USB composite, à savoir un périphérique HID clavier et une carte son.
Pour la programmation du périphèrique USB vous utilisez, comme base, les démonstration LUFA :
Demos/Device/LowLevel/AudioOutput
;- et
Demos/Device/LowLevel/Keyboard
.
Vous n'avez pas à écrire de programme PC avec la bibliothèque libusb
.
Proposition définitive
Répartition du travail
Carte
Vous pourrez utiliser la carte du groupe 1 avec la carte clavier du groupe 2 de l'an dernier.
Code
- Dans ce code, nous avons fait deux actions, un bouton qui pour chaque appuie change de couleur et un autre bouton qui emet un son.
#include <avr/io.h>
#include <util/delay.h>
#define GREEN 0
#define RED 1
#define BLUE 2
#define BOUTON 4
#define BOUTON2 2
#define SPEAKER
void make_note_delay(int note)
{
// attente d'un demi-cycle
switch (note)
{
case 413:
_delay_us(1000000 / 413 / 2);
break;
case 440:
_delay_us(1000000 / 440 / 2);
break;
case 634:
_delay_us(1000000 / 634 / 2);
break;
case 660:
_delay_us(1000000 / 660 / 2);
break;
case 743:
_delay_us(1000000 / 743 / 2);
break;
case 792:
_delay_us(1000000 / 792 / 2);
break;
case 825:
_delay_us(1000000 / 825 / 2);
break;
case 1056:
_delay_us(1000000 / 1056 / 2);
break;
}
}
void play_note(int note, int periode)
{
for (int i = 0; i < periode; i++)
{
PORTB = 255;
make_note_delay(note);
PORTB = 0;
make_note_delay(note);
}
}
int main(void){
DDRD |= (1 << GREEN) | (1 << RED) | (1 << BLUE) ; // Set Green, Red, Blue as outputs
DDRC &= ~((1 << BOUTON) | (1 << BOUTON2)); // Set Button pins as inputs
PORTC |= (1 << BOUTON) | (1 << BOUTON2); // Enable pull-up resistors on the Buttons
CLKSEL0 = 0b00010101; // sélection de l'horloge externe
CLKSEL1 = 0b00001111; // minimum de 8Mhz
CLKPR = 0b10000000; // modification du diviseur d'horloge (CLKPCE=1)
CLKPR = 0; // 0 pour pas de diviseur (diviseur de 1)
DDRB = 255;
int currentColor = GREEN; // Start with Green
while(1){
if(!(PINC & (1 << BOUTON))) { // If the first button is pressed
//_delay_ms(10); // Debounce delay
if(!(PINC & (1 << BOUTON))) { // If the button is still pressed after debouncing
// Toggle to the next color
if(currentColor == GREEN) {
PORTD &= ~(1 << RED);
PORTD |= (1 << GREEN);
PORTD |= (1 << BLUE);
currentColor = RED;
} else if(currentColor == RED) {
PORTD &= ~(1 << BLUE);
PORTD |= (1 << GREEN);
PORTD |= (1 << RED);
currentColor = BLUE;
} else if(currentColor == BLUE) {
PORTD &= ~(1 << GREEN);
PORTD |= (1 << RED);
PORTD |= (1 << BLUE);
currentColor = GREEN;
}
}
while(!(PINC & (1 << BOUTON))); // Wait for the button to be released
}
if (!(PINC & (1 << BOUTON2))) {
play_note(792, 198);
while (!(PINC & (1 << BOUTON2))); // Wait for the button to be released
}
}
return 0;
}
Conception
Réalisation
Démonstrations
Rendus
Projet KiCAD : Fichier:I2L-2023-Carte-G6.zip
Programmes : Fichier:I2L-2022-Programmes-G6.zip