Ceci est une ancienne révision du document !
Daphné Chamot-Rooke (contact : daphne.chamot-rooke@etu.upmc.fr)
Himany Seri (contact : himany.seri@etu.upmc.fr)
Objectif : créer un clavier virtuel qui fait de la musique sans touches
Matériel :
Nous avons découpé une boîte de la taille du socle de l'arduino uno (100\*124*100 mm)
Ne pas oublier de prévoir des trous pour le sonar et pour l'alimentation de l'Arduino.
Code provisoire :
#define trigPin 10 //Déclaration de variable globale
#define echoPin 8 // Déclaration de variable globale
//librairie Neopixel
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define NUMPIXELS 8 //Déclaration de variale pour le nombre de LEDs qui vont s'allumer sur le strip
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, 8, NEO_GRB + NEO_KHZ800);
const byte PIN_BUZZER = 13; // constante qui prend 0 bit ou 1 bit en valeur
long duration, distance; //la valeur est codée sur 32 bits
int frequence = 0; //Déclaration d'une variable fréquence qui va stocker la fréquence
int couleur = 0; //Déclaration d'une variable qui va permettre de changer la couleur des LEDs en fonction de la distance
void setup() {
Serial.begin(9600); //fixe le débit d'information qui sera reçu par seconde
//on prépare les pin 9, 12 , 13 et trig en mode sortie
pinMode(9, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
pinMode(trigPin, OUTPUT);
//on prépare la pin echo en mode entrée
pinMode(echoPin, INPUT);
// This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
//#if defined (__AVR_ATtiny85__)
// if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
//#endif
// End of trinket special code
pixels.begin(); //la librairie NeoPixel est initialisée
Serial.println("== Début du programme =="); //affiche "== Début du programme ==" dans le moniteur
}
void loop() {
//Envoi de l'onde
digitalWrite(trigPin, LOW);
delayMicroseconds(200);
digitalWrite(trigPin, HIGH);
delayMicroseconds(200);
digitalWrite(trigPin, LOW);
delayMicroseconds(200);
//Réception de l'écho
duration = pulseIn(echoPin, HIGH);
// Calcul de la distance
distance = (duration / 2) / 29.1;
//variable pour modifier la couleur des LEDs en fonction de la distance
couleur = distance * 10;
//si la distance est inférieure à 0 ou supérieure à 50 cm, on affiche "hors plage" sur le moniteur et rien ne se passe
if (distance >= 50 || distance <= 0) {
Serial.println("Hors plage");
noTone(13); //on arrête la note
}
else
{
//si la distance est comprise entre 0 et 50 cm, on joue les notes et on allume les LEDs
//on affiche la distance dans le moniteur en cm
Serial.print("distance = ");
Serial.print(distance);
Serial.println(" cm");
//on joue une note avec une fréquence qui change en fonction de la distance
tone (13, 510 + distance, 125);
//For a set of NeoPixels the first NeoPixel is 0, second is 1, all the way up to the count of pixels minus one.
for (int i = 0; i < NUMPIXELS; i++) {
//pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
pixels.setPixelColor(i, pixels.Color(couleur / 2, 4 * couleur, 2 * couleur)); //s'allume de différentes couleurs en fonction de la distance
pixels.show(); // This sends the updated pixel color to the hardware.
delay(50); //les LEDs s'allument 50 ms chacune
}
}
delay(100); //délai entre deux mesures
}