J’ai tellement dis que j’allais faire des trucs que j’ai pas fais… que je me suis dis aller le piano je le fais -_-‘

Pour ce fameux piano, je suis parti sur le même montage que le précédent article sur le MPR121.

Il y aura cependant deux ajouts nécessaire. De quoi émettre du son. Un piezo-buzzer ou un haut-parleur placé entre la pin 9 et GND de l’Arduino. Et un code permettant de générer un son, pour celà nous utiliserons la fonction tone() et noTone().

EDIT: Et pour faire beaucoup de bruit, j’ai ajouter un petit ampli PAM8403 au montage. TUTORIEL DU PAM8403 ICI

piano_1

 

Branchements

piono

Pour commencer, cablez le même “schéma” que dans le précédent article et ajouter des touches a votre clavier. Voilà comment j’ai procédé:

Etape 1 – Souder les pinssoudures

Etape 2 – Passer des gaines thermorétractables

gaines

13493631_10154255521094770_635145753_o

Ensuite a l’aide de papier collant double-face et d’aluminium, j’ai élargi la zone de surface:

13460753_10154255520944770_360402488_o13446341_10154255520899770_612501645_o13446128_10154255520809770_522697391_o

et je les ais enfin disposé sur une feuille:

13453536_10154255520699770_616604537_o

 

Code Arduino

Coté code on reprend le même code que dans l’article précédent:

Fichier -> Exemples -> ADAFRUIT MP121 -> MP121test

/*********************************************************
This is a library for the MPR121 12-channel Capacitive touch sensor

Designed specifically to work with the MPR121 Breakout in the Adafruit shop 
  ----> https://www.adafruit.com/products/

These sensors use I2C communicate, at least 2 pins are required 
to interface

Adafruit invests time and resources providing this open source code, 
please support Adafruit and open-source hardware by purchasing 
products from Adafruit!

Written by Limor Fried/Ladyada for Adafruit Industries.  
BSD license, all text above must be included in any redistribution
**********************************************************/

#include <Wire.h>
#include "Adafruit_MPR121.h"

// You can have up to 4 on one i2c bus but one is enough for testing!
Adafruit_MPR121 cap = Adafruit_MPR121();

// Keeps track of the last pins touched
// so we know when buttons are 'released'
uint16_t lasttouched = 0;
uint16_t currtouched = 0;

void setup() {
  while (!Serial);        // needed to keep leonardo/micro from starting too fast!

  Serial.begin(9600);
  Serial.println("Adafruit MPR121 Capacitive Touch sensor test"); 
  
  // Default address is 0x5A, if tied to 3.3V its 0x5B
  // If tied to SDA its 0x5C and if SCL then 0x5D
  if (!cap.begin(0x5A)) {
    Serial.println("MPR121 not found, check wiring?");
    while (1);
  }
  Serial.println("MPR121 found!");
}

void loop() {
  // Get the currently touched pads
  currtouched = cap.touched();
  
  for (uint8_t i=0; i<12; i++) {
    // it if *is* touched and *wasnt* touched before, alert!
    if ((currtouched & _BV(i)) && !(lasttouched & _BV(i)) ) {
      Serial.print(i); Serial.println(" touched");tone(9,i*1000);
    }
    // if it *was* touched and now *isnt*, alert!
    if (!(currtouched & _BV(i)) && (lasttouched & _BV(i)) ) {
      Serial.print(i); Serial.println(" released");noTone(9);
    }
  }

  // reset our state
  lasttouched = currtouched;

  // comment out this line for detailed data from the sensor!
  return;
  
  // debugging info, what
  Serial.print("\t\t\t\t\t\t\t\t\t\t\t\t\t 0x"); Serial.println(cap.touched(), HEX);
  Serial.print("Filt: ");
  for (uint8_t i=0; i<12; i++) {
    Serial.print(cap.filteredData(i)); Serial.print("\t");
  }
  Serial.println();
  Serial.print("Base: ");
  for (uint8_t i=0; i<12; i++) {
    Serial.print(cap.baselineData(i)); Serial.print("\t");
  }
  Serial.println();
  
  // put a delay so it isn't overwhelming
  delay(100);
}

 

La modification faite se trouve dans le void loop().

J'y ai utilisé les fonctions tone() et noTone().

Un peu d'explication:

Serial.print(i); Serial.println(" touched");tone(9,i*2000);

On a la fonction tone en fin de ligne:

tone(9,i*2000);

Qui va donc générer une fréquence de i qui est situé entre 1 et 12 multiplié par 2000.

La fréquence en Hz sera donc de

2000, 4000, 6000, 8000, 10000, 12000, 14000, 16000, 18000, 20000, 22000 ou 24000 Hz.

Lorsque la touche est enfin relâchée  c'est la fonction noTone() qui est utilisée.

Pin It on Pinterest

Share This