Étape 8: Code
/ * A TiltKey - clavier d’entrée dispositif basé sur inclinaison. Rédigé par Alec Robinson. Publié sous licence Creative Commons attribution share-alike. * / #include < LiquidCrystal.h > innovente lcd (7, 8, 9, 10, 11, 12) ; les valeurs int [] = {665, 533, 555, //a 580, 340, 533, //b 415, 285, 502, //c 230, 385, 460, //d 200, 510, 460, //e 270, 710, 500, //f 440, 774, 497, //g 632, 673, 525, //h 570, 525, 680, //i 385, 547, 745, //j 220, 511, 630, //k 300, 520, 280, //l 480, 513, 265, //m 640, 500, 380, //n 510, 700, 340 //o 470, 370, 330, //p 400, 340, 650, //q 400, 700, 680, //r 650, 470, 450, //s 660, 600, 500, //t 640, 570, 610, //u 633, 470, 600, //v 200, 460, 515, //w 200, 540, //x 250, 600, 610, 340, //y //and 230, 515, 360 //z} ; Tous les postes int charset = 1 ; 1 = les lettres 2 = chiffres & symboles int seuil = 45 ; La marge d’utilisateurs d’erreur int shakethresh = 265 ; Lettres de seuil pour déterminer les secousses char [] = {'a', 'b', 'Ce,' serait ', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', suis », « n », 'o', 'p', 'q', 'r', de ', ' t ', 'u', 'v', 'w', 'x', 'y', 'z'} ; numéros de char [] = {KEY_RETURN, KEY_UP_ARROW, '0', '1', '2', 3', '4', KEY_DOWN_ARROW, KEY_LEFT_ARROW, '5', '6', '7', '8', KEY_RIGHT_ARROW, '9', '/', '. ',', ',';', 39, ' [', ']', '=', '-'} ; char shiftnumbers [] = {32, 'w', ')', '!', ' '#', '$', 's', 'a', '%', '^', '&', '*', 'd', '(', '?', '>', '<', ':', '"', '{', '}', '+', '_'}; int count = 0 ; int prevx, prevy, prevz ; Utilisé pour déterminer la secouant. Il compare xs précédente et ys et zs à ceux en cours, et si la distance est supérieure à shakethresh, ils ont secoué. annuler le programme d’installation () {lcd.begin (16, 2) ; Serial.Begin(9600) ; Keyboard.Begin() ; analogReference(EXTERNAL) ; Delay(2000) ; Prevx = analogRead(0) ; prevy = analogRead(1) ; prevz = analogRead(2) ; } void loop () {Maj booléen =! digitalRead(3) ; int x = analogRead(0) ; int y = analogRead(1) ; int z = analogRead(2) ; int testingnum = 0; lcd.clear() ; if (charset == 1) {tandis que (testingnum/3 < = 26) {//Compares courant coordonnées à celles de valeurs [] si (x > = valeurs [testingnum] - seuil & & x < = valeurs [testingnum] + seuil & & y > = [testingnum + 1] - les valeurs seuil & & y < = valeurs [testingnum + 1] + seuil & & z > = [testingnum + 2] - les valeurs seuil & & z < = valeurs [ testingnum + 2] + seuil) {lcd.setCursor(0,0) ; if (! Maj) lcd.print(letters[testingnum/3]) ; else lcd.print(char(letters[testingnum/3]-32)) ; //Capital Serial.println(letters[testingnum/3]) ; si (! digitalRead(2)) {si (! Maj) Keyboard.write(letters[testingnum/3]) ; else Keyboard.write(letters[testingnum/3]-32) ; //Capital}} testingnum += 3 ; }} Si (charset == 2) //Numbers et symboles {tandis que (testingnum/3 < = 24) {si (x > = valeurs [testingnum] - seuil & & x < = valeurs [testingnum] + seuil & & y > = [testingnum + 1] - les valeurs seuil & & y < = valeurs [testingnum + 1] + seuil & & z > = [testingnum + 2] - les valeurs seuil & & z < = valeurs [testingnum + 2] + seuil) {lcd.setCursor(0,0) ; if (! Maj) lcd.print(char(numbers[testingnum/3])) ; lcd.print(char(shiftnumbers[testingnum/3])) d’autre ; Serial.println(Numbers[testingnum/3]) ; Si (! digitalRead(2)) {si (! Maj) Keyboard.write(numbers[testingnum/3]) ; else Keyboard.write(shiftnumbers[testingnum/3]);}} testingnum += 3 ; }} Serial.print("\n") ; Serial.Print("\n") ; lcd.setCursor (0, 1) ; Si (charset == 1) lcd.print("Letters") ; Si (charset == 2) lcd.print ("chiffres + symboles") ; Si (compter 12 >) si (x > prevx + shakethresh || x < prevx - shakethresh || y > prevy + shakethresh || y < prevy - shakethresh || z > prevz + shakethresh || z < prevz - shakethresh) {//Shaking si (charset == 1) Keyboard.write(32) ; //Space si (charset == 2) Keyboard.write(8) ; //Backspace delay(250) ; count = 0;} prevx = x ; prevy = y ; prevz = z ; Si (! digitalRead(4)) {charset ++; if (charset == 3) charset = 1;} delay(150) ; Count ++ ; }