Blame view

keygrbb.ino 4.25 KB
d57f2358   mduquesn   usb
1
2
3
4
5
6
7
8
  #include <Keyboard.h>
  
  #include <Wire.h>
  #include "Adafruit_MPR121.h"
  
  #include <string.h>
  #define ti 20
  
45bbb2b8   mduquesn   setup sd file ok
9
10
  #include<SD.h>
  
d57f2358   mduquesn   usb
11
12
13
14
15
16
17
18
19
20
21
22
  #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};
f0d8dc8f   mduquesn   FULL ok keygrab
23
  File fichier,fichier2;
45bbb2b8   mduquesn   setup sd file ok
24
  String filename="texte.txt";
f0d8dc8f   mduquesn   FULL ok keygrab
25
26
27
28
29
30
31
32
33
34
  String filename2="texto.txt";
  char c; boolean written;
  
  
  
  
  
  
  
  
d57f2358   mduquesn   usb
35
36
  
  
d57f2358   mduquesn   usb
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
  
  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++;
      }
    }
  
f0d8dc8f   mduquesn   FULL ok keygrab
60
61
62
63
64
65
66
67
68
69
  
  
  
  
  
  
  
  
  
  
d57f2358   mduquesn   usb
70
71
72
73
74
75
76
  void setup() {
    //keyboard out
     pinMode(2, INPUT_PULLUP); 
    Keyboard.begin();
  
    //Serial
    Serial.begin(9600);
d57f2358   mduquesn   usb
77
78
79
    while (!Serial) { // needed to keep leonardo/micro from starting too fast!
      delay(10);
    }
45bbb2b8   mduquesn   setup sd file ok
80
81
82
83
84
85
86
  
    //SD
    while(! SD.begin(4)){
      delay(1000);
    }
    Serial.println("SD OK");
  
f0d8dc8f   mduquesn   FULL ok keygrab
87
    //File1
45bbb2b8   mduquesn   setup sd file ok
88
89
90
91
    while( !(fichier=SD.open(filename,FILE_WRITE)) ){
      delay(1000);
    }
    Serial.println("file OK");
f0d8dc8f   mduquesn   FULL ok keygrab
92
93
94
95
96
97
  
    //File2
    while( !(fichier2=SD.open(filename,FILE_WRITE)) ){
      delay(1000);
    }
    Serial.println("file2 OK");
d57f2358   mduquesn   usb
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
    
    //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!");
  }
  
  
  
  
  
45bbb2b8   mduquesn   setup sd file ok
115
116
117
118
119
120
121
122
123
124
  
  
  
  
  
  
  
  
  
  
d57f2358   mduquesn   usb
125
126
127
  void loop() {
    // Get the currently touched pads
    currtouched = cap.touched();
174eab47   mduquesn   keygraber
128
129
    if(currtouched!=lasttouched){
      written=false;
f0d8dc8f   mduquesn   FULL ok keygrab
130
131
132
133
  
  
    
    
174eab47   mduquesn   keygraber
134
135
136
137
138
139
      //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);
f0d8dc8f   mduquesn   FULL ok keygrab
140
      
174eab47   mduquesn   keygraber
141
142
143
        fichier2.close();
        SD.remove(filename2);
        fichier=SD.open(filename2,FILE_WRITE);
2173a6d3   bjeanlou   init gestion des ...
144
      }
174eab47   mduquesn   keygraber
145
146
147
148
149
150
151
152
153
      //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);
f0d8dc8f   mduquesn   FULL ok keygrab
154
      
174eab47   mduquesn   keygraber
155
156
157
158
        fichier2.seek(0);
        while((c=fichier2.read())!=-1){
          Keyboard.write(c);
        }
f0d8dc8f   mduquesn   FULL ok keygrab
159
      }
f0d8dc8f   mduquesn   FULL ok keygrab
160
161
162
163
164
165
166
167
168
169
170
171
  
  
  
  
  
  
  
  
  
  
  
  
d57f2358   mduquesn   usb
172
    
174eab47   mduquesn   keygraber
173
      for (uint8_t i=0; i<12; i++) {
f0d8dc8f   mduquesn   FULL ok keygrab
174
      
174eab47   mduquesn   keygraber
175
        if(i==2 || i==5)i++;//ne pas traiter R et D
f0d8dc8f   mduquesn   FULL ok keygrab
176
      
174eab47   mduquesn   keygraber
177
178
179
180
181
182
183
184
185
        // 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);
        }
f0d8dc8f   mduquesn   FULL ok keygrab
186
      
174eab47   mduquesn   keygraber
187
188
189
190
191
192
193
194
        // 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('<');
f0d8dc8f   mduquesn   FULL ok keygrab
195
        
174eab47   mduquesn   keygraber
196
197
198
199
200
201
202
          fichier.write(c);
          Keyboard.release(c);
        }
      }
      if(written){
        fichier.write('\n');
        fichier.flush();//force l'enregistrement physique des données
d57f2358   mduquesn   usb
203
      }
f0d8dc8f   mduquesn   FULL ok keygrab
204
205
206
207
208
209
210
211
212
213
214
215
      fichier2.write('\n');
      fichier2.flush();
    }
  
  
  
  
  
  
  
  
  
d57f2358   mduquesn   usb
216
217
218
219
220
221
  
    // reset our state
    lasttouched = currtouched;
  
    // comment out this line for detailed data from the sensor!
    return;
f0d8dc8f   mduquesn   FULL ok keygrab
222
223
224
225
226
227
228
229
230
231
232
233
234
  
  
  
  
  
  
  
  
  
  
  
  
  
d57f2358   mduquesn   usb
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
    
    // 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);
45bbb2b8   mduquesn   setup sd file ok
251
252
253
  }
  
  
f0d8dc8f   mduquesn   FULL ok keygrab
254
  // v released   >v<
174eab47   mduquesn   keygraber
255
  // v pressed    <v>