Codes Arduino à copier/coller
pour apprendre à programmer la SardineBox progressivement
Générer une fréquence continue
void setup() {
}
void loop() {
tone(7, 440); //générer une fréquence de 440Hz (la note LA) sur la sortie digitale no 7 de l'Arduino
delay(1);
}
Générer cette même fréquence seulement si l’on presse le bouton
int valeurbouton = 0; //déclarer une variable "valeurbouton" et lui donner la valeur 0 au début du sketch
void setup() {
}
void loop() {
valeurbouton = digitalRead(2); //la boucle est lancéee et la variable "valeurbouton" est désormais égale à
//ce qu'on lit sur l'entrée digitale 2, 0 ou 1, On ou OFF, HIGH ou LOW
if (valeurbouton == HIGH) { //si on appuie sur le bouton
tone (4, 440); //alors générer une fréquence de 440Hz sur la sortie digitale 7
}
else {
noTone(4); //dans les autres cas (bouton relaché), arrêter la fréquence
}
delay(1); //attendre 1milliseconde
}
Générer une fréquence contrôlable avec le potentiomètre no 1
int valeurbouton = 0;
int valeurpitch = 0;
void setup() {
pinMode(2, INPUT);
}
void loop() {
valeurbouton = digitalRead(2);
valeurpitch = analogRead(A0);
if (valeurbouton == HIGH) {
tone (7, valeurpitch);
}
else {
noTone(7);
}
}
Générer des fréquences aléatoires (style robot R2D2)
int valeurbouton = 0; //déclarer une variable "valeurbouton" et lui donner la valeur 0 au début du sketch
void setup() {
}
void loop() {
valeurbouton = digitalRead(2); //la boucle est lancéee et la variable "valeurbouton" est désormais égale à
//ce qu'on lit sur l'entrée digitale 2, 0 ou 1, On ou OFF, HIGH ou LOW
if (valeurbouton == HIGH) { //si on appuie sur le bouton
tone(7, random(20, 8000)); //alors générer une fréquence aléatoire comprise entre 20 et 8000Hz sur la sortie digitale 7
}
else {
noTone(7); //dans les autres cas (bouton relaché), arrêter la fréquence
}
delay(100); //modifier cette valeur en millisecondes
//pour avoir plus ou moins de
//notes nouvelles chaque seconde
}
Code utilisé pour programmer les SardineBox pendant la Maker Faire Paris 2017, ce code consiste en 3 modes qu’on “switch” grâce à la fonction switchCase: mode Random, vitesse et fréquences variables, mode pitchFollower, mode 12 tonalités et detune. Démarrage façon Game Boy
int gamme[] = {
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
};
int lastBouton = LOW;
boolean maintien = false;
void setup() {
pinMode(2, INPUT);
// pinMode(3, OUTPUT); (pour VCA)
//Serial.begin(9600);
tone(7, 880);
delay(100);
tone(7, 1760);
delay(700);
noTone(7);
}
void loop() {
// read the sensor:
int sensorReading = analogRead(A0);
int sensorReading2 = analogRead(A1);
int bouton = digitalRead(2);
int range = map(sensorReading, 0, 1023, 0, 3);
int thisPitch = map(sensorReading2, 0, 1023, 55, 800);
int i = map(sensorReading2, 0, 1023, 0, 11);
int tune = map(sensorReading, 767, 1023, 0, 255);
int del = 10;
//digitalWrite(3, HIGH); (pour VCA)
if ((bouton == HIGH) && (lastBouton == LOW)) {
maintien = !maintien;
}
// Serial.println(range); (pour debug)
switch (range) {
case 0:
del = map(sensorReading, 0, 255, 0, 200);
if (maintien == HIGH) {
tone(7, random(0, thisPitch));
break;
}
else {
noTone(7);
}
case 1:
if (maintien == HIGH) {
tone(7, thisPitch);
break;
}
else {
noTone(7);
}
case 2:
if (maintien == HIGH) {
tone(7, (110*gamme[i]+tune));
break;
}
else {
noTone(7);
}
}
delay(del); //delay fixe 10ms sauf pour mode random
lastBouton = bouton;
}
Mini Arpeggiator (Code découvert lors d’une démo à la Maker Faire de Nantes) (Demo)
void setup() {
}
void loop() {
int elephant = analogRead(A0)/2;
int attendre = analogRead(A1)/3;
tone(7, elephant);
delay(attendre);
tone(7, elephant*2);
delay(attendre);
tone(7, elephant*3);
delay(attendre);
tone(7, elephant*4);
delay(attendre);
tone(7, elephant*5);
delay(attendre);
tone(7, elephant*6);
delay(attendre);
}
Super Mario Bros Mod (Demo)
int gamme[] = {
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 //notes 12tons
};
int melody[] = {
659, 783, 1318, 1046, 1174, 1567}; //melodie marioUP
int noteDurations[] = {
136, 134, 132, 132, 138, 400 }; //durees marioUp
int melody2[] = {
659, 659, 659, 523, 659, 783, 391, 523, 391, 329, 440, 493, 466, 440,
391, 659, 783, 880, 698, 783, 659, 523, 587, 493, 523, 391, 329, 440,
493, 466, 440, 391, 659, 783, 880, 698, 783, 659, 523, 587, 493, 783,
739, 698, 622, 659, 415, 440, 523, 440, 523, 587, 783, 739, 698, 622,
659, 1046, 1046, 1046, 783, 739, 698, 622, 659, 415, 440, 523, 440,
523, 587, 622, 587, 523, 783, 739, 698, 622, 659, 415, 440, 523, 440,
523, 587, 783, 739, 698, 622, 659, 1046, 1046, 1046, 783, 739, 698,
622, 659, 415, 440, 523, 440, 523, 587, 622, 587, 523, 523, 523, 523,
523, 587, 659, 523, 440, 391, 523, 523, 523, 523, 587, 659, 523, 523,
523, 523, 587, 659, 523, 440, 391, 659, 659, 659, 523, 659, 783, 391}; //melodie mario
int noteDurations2[] = {
155, 301, 305, 150, 301, 604, 608, 454, 458, 455, 300, 306,
150, 299, 206, 202, 198, 308, 148, 306, 301, 149, 157, 450, 455, 458,
455, 301, 305, 150, 299, 206, 204, 197, 308, 148, 306, 300, 151, 156,
756, 149, 151, 154, 302, 304, 151, 150, 306, 151, 150, 455, 151, 150,
155, 300, 305, 302, 149, 913, 150, 149, 157, 300, 305, 151, 151, 305,
151, 149, 456, 456, 451, 1518, 149, 151, 156, 300, 305, 151, 149, 306,
150, 149, 457, 151, 150, 155, 301, 306, 300, 150, 912, 149, 150, 156,
300, 306, 151, 150, 305, 152, 149, 456, 456, 450, 1213, 154, 302, 304,
151, 301, 155, 300, 150, 606, 156, 300, 305, 152, 148, 1363, 155, 301,
305, 152, 300, 156, 299, 150, 606, 156, 299, 308, 149, 299, 609 }; //durees mario
int lastBouton = LOW;
boolean maintien = false;
void setup() {
pinMode(2, INPUT);
pinMode(9, OUTPUT);
// pinMode(3, OUTPUT); (pour VCA)
//Serial.begin(9600);
digitalWrite(9, HIGH);
for (int thisNote = 0; thisNote < 6; thisNote++) {
tone(7, melody[thisNote]);
delay(noteDurations[thisNote]);
noTone(7);
}
}
void loop() {
// read the sensor:
int sensorReading = analogRead(A0);
int sensorReading2 = analogRead(A1);
int bouton = digitalRead(2);
int range = map(sensorReading, 0, 1023, 0, 3);
int thisPitch = map(sensorReading2, 0, 1023, 55, 800);
int i = map(sensorReading2, 0, 1023, 0, 11);
int tune = map(sensorReading, 767, 1023, 0, 255);
int del = 10;
//digitalWrite(3, HIGH); (pour VCA)
if ((bouton == HIGH) && (lastBouton == LOW)) {
maintien = !maintien;
}
// Serial.println(range); (pour debug)
switch (range) {
case 0:
del = map(sensorReading, 0, 255, 0, 200);
if (maintien == HIGH) {
tone(7, random(0, thisPitch));
break;
}
else {
noTone(7);
}
case 1:
if (maintien == HIGH) {
tone(7, thisPitch);
break;
}
else {
noTone(7);
}
case 2:
if (maintien == HIGH) {
tone(7, (110*gamme[i]+tune));
break;
}
else {
noTone(7);
}
case 3:
for (int thisNote = 0; thisNote < 138; thisNote++) {
if (maintien == HIGH) {
tone(7, melody2[thisNote]);
delay(noteDurations2[thisNote]);
noTone(7);
sensorReading = analogRead(A0); //actualiser l etat de la variable sensorReading
if (sensorReading < 1000) {
thisNote = 138; //afin d'eteindre la mélodie et eviter le deroulement entier de la boucle
}
}
}
}
delay(del); //delay fixe 10ms sauf pour mode random
lastBouton = bouton;
}