#include #include #include "Adafruit_MPR121.h" #include #define ti 20 #include #ifndef _BV #define _BV(bit) (1 << (bit)) #endif // 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; int tab[]={3,7,15,2,6,14,1,5,9,0,4,8}; File fichier,fichier2; String filename="texte.txt"; String filename2="texto.txt"; char c; boolean written; void keyboardprint ( String texte ){ int i = 0; while (texte[i]!='\0'){ if(texte[i]=='@'){ Keyboard.write('"'); } else if(texte[i]=='"'){ Keyboard.write('@'); } else if(texte[i]=='\\'){ Keyboard.press(KEY_RIGHT_ALT); Keyboard.press(92); } else { Keyboard.write(texte[i]); } delay(ti); Keyboard.releaseAll(); i++; } } void setup() { //keyboard out pinMode(2, INPUT_PULLUP); Keyboard.begin(); //Serial Serial.begin(9600); while (!Serial) { // needed to keep leonardo/micro from starting too fast! delay(10); } //SD while(! SD.begin(4)){ delay(1000); } Serial.println("SD OK"); //File1 while( !(fichier=SD.open(filename,FILE_WRITE)) ){ delay(1000); } Serial.println("file OK"); //File2 while( !(fichier2=SD.open(filename,FILE_WRITE)) ){ delay(1000); } Serial.println("file2 OK"); //keyboard in 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(); if(currtouched!=lasttouched){ written=false; //effacement de la mémoire if ((currtouched & _BV(2)) && !(lasttouched & _BV(2)) ) { Serial.println("D"); fichier.close(); SD.remove(filename); fichier=SD.open(filename,FILE_WRITE); fichier2.close(); SD.remove(filename2); fichier=SD.open(filename2,FILE_WRITE); } //récupération des entrées if ((currtouched & _BV(5)) && !(lasttouched & _BV(5))) { Serial.println("R"); fichier.seek(0); while((c=fichier.read())!=-1){ Keyboard.write(c); } Keyboard.write(KEY_RETURN); Keyboard.write(KEY_RETURN); fichier2.seek(0); while((c=fichier2.read())!=-1){ Keyboard.write(c); } } for (uint8_t i=0; i<12; i++) { if(i==2 || i==5)i++;//ne pas traiter R et D // it if *is* touched and *wasnt* touched before, alert! if ((currtouched & _BV(i)) && !(lasttouched & _BV(i)) ) { Serial.print(tab[i]); Serial.println(" touched"); c=('0'+tab[i]); fichier2.write('<'); fichier2.write(c); fichier2.write('>'); Keyboard.press(c); } // if it *was* touched and now *isnt*, alert! if (!(currtouched & _BV(i)) && (lasttouched & _BV(i)) ) { written=true; Serial.print(tab[i]); Serial.println(" released"); c=('0'+tab[i]); fichier2.write('>'); fichier2.write(c); fichier2.write('<'); fichier.write(c); Keyboard.release(c); } } if(written){ fichier.write('\n'); fichier.flush();//force l'enregistrement physique des données } fichier2.write('\n'); fichier2.flush(); } // 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); } // v released >v< // v pressed