Jukebox Aléatoire

Porteur(s) du projet : Damien MUTI (Prof. de Numérique)

Date : 03/2021

objectif : Lancer des sons aléatoirement en appuyant sur un bouton.

Contexte : Sonnerie aléatoire

Fichiers :

Liens :

Capteurs/Actionneurs :

Bouton poussoir

Processing

Intentions : explication du projet et objectifs

Lorsqu'on appuie sur un bouton poussoir connecté à l'entrée digitale d'une carte Arduino, cette dernière envoie un message à Processing qui sélectionne aléatoirement une musique et la joue tant que le doigt reste appuyé sur le bouton.

Lorsqu'on appuie une une deuxième fois, le la même musique se lance tant qu'on tant que le doigt reste appuyé sur le bouton. En revanche, lorsqu'on appuie une troisième fois, une nouvelle musique est sélectionnée aléatoirement.

le schéma suivant résume la situation :

Plans et schémas de fonctionnement

Programme et montage Arduino

Le montage permettant de capter le signal provenant du bouton poussoir est le suivant :

Lorsqu'on appuie sur le bouton poussoir, la va valeur lue par la broche d'entrée digitale “pin” passe de 0V à 5V.

Le montage Arduino est le suivant :

Le programme permettant d'envoyer les données à Processing via le port série est le suivant : test_bouton_1.ino.zip

/*
Branchement sur ARduino NANO BLE
sur bread board - Branchement USB en bas
+ : 2 à droite
GND (-) : 14 à droite
ENtrée Bouton : 11 à gauche
*/
// constants won't change. They're used here to set pin numbers:
const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 13; // the number of the LED pin
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
int inByte = 0; // incoming serial byte
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
// port Série
// start serial port at 9600 bps:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
// établir le contact avec Processing
establishContact(); // send a byte to establish contact until receiver responds
}
void loop() {
if (Serial.available() > 0) { // si un octet arrive sur le port série
//de la carte venant de Processing
// get incoming byte:
inByte = Serial.read();
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed. If it is, the buttonState is HIGH.
// //et envoi de la valeur
if (buttonState == HIGH) { // bouton appuyé => 5V en D2 => envoi de 255 et allumer LED 13
//Serial.println(255);
Serial.write(255);
// turn LED on:
digitalWrite(ledPin, HIGH);
} else { // bouton relâché => 0V en D2 => envoi de 0 et éteindre LED 13
//Serial.println(0);
byte zero = 0;
Serial.write(zero);
// turn LED off:
digitalWrite(ledPin, LOW);
}
}
}
void establishContact() {
while (Serial.available() <= 0) {
Serial.print('A'); // send a capital A
delay(300);
}
}

Ce programme est inspiré de l'exemple SerialCallResponse.

Lorsque le bouton est relâché, la led est éteinte et la carte envoie 0 via le port série. Lorsque le bouton on allume la led et la carte envoie 255 via le port série.

Programme Processing

Le programme Processing doit récupérer les données venant de la carte Arduino, via le port série. Cette opération s'inspire du programme