Stap 8: Code
/ * TiltKey - A toetsenbord invoerapparaat gebaseerd op kantelen. Geschreven door Alec Robinson. Vrijgegeven onder een Creative Commons Naamsvermelding GelijkDelen licentie. * / #include < LiquidCrystal.h > LiquidCrystal lcd (7, 8, 9, 10, 11, 12); int waarden [] = {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 370, 470, 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, 610, 540, //x 250, 600, 340, //y //and 230, 515, 360 //z}; Alle posities int charset = 1; 1 = brieven 2 = nummers & symbolen int drempel = 45; De gebruikers marge van fout int shakethresh = 265; De letters van de drempel om schudden char [] = {'a', 'b', 'c', zou ', 'e', 'f', 'g', 'h','i ', 'j', 'k', 'l', ben ', "n", 'o', 'p', 'q', 'r', de ','t ', 'u', 'v', 'w', 'x', 'y', 'z'}; char nummers [] = {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; Gebruikt om te bepalen schudden. Het vorige xs en ys en zs naar huidige ones vergelijkt, en als de afstand groter dan shakethresh is, ze schudde. void setup () {lcd.begin (16, 2); Serial.begin(9600); Keyboard.begin(); analogReference(EXTERNAL); delay(2000); Prevx = analogRead(0); prevy = analogRead(1); prevz = analogRead(2); } ongeldig lus () {Booleaanse shift =! digitalRead(3); int x = analogRead(0); int y = analogRead(1); int z = analogRead(2); int testingnum = 0; lcd.clear(); als (charset == 1) {terwijl (testingnum/3 < = 26) {//Compares huidige coördinaten naar degene in waarden [] als (x > = waarden [testingnum] - drempel & & x < = waarden [testingnum] + drempel & & y > = waarden [testingnum + 1] - drempel & & y < = waarden [testingnum + 1] + drempel & & z > = waarden [testingnum + 2] - drempel & & z < = waarden [ testingnum + 2] + drempel) {lcd.setCursor(0,0); als (! shift) lcd.print(letters[testingnum/3]) anders Serial.println(letters[testingnum/3]); //Capital; lcd.print(char(letters[testingnum/3]-32)) als (! digitalRead(2)) {als (! shift) Keyboard.write(letters[testingnum/3]) anders //Capital; Keyboard.write(letters[testingnum/3]-32)}} testingnum += 3; }} Als (charset == 2) //Numbers en symbolen {terwijl (testingnum/3 < = 24) {als (x > = waarden [testingnum] - drempel & & x < = waarden [testingnum] + drempel & & y > = waarden [testingnum + 1] - drempel & & y < = waarden [testingnum + 1] + drempel & & z > = waarden [testingnum + 2] - drempel & & z < = waarden [testingnum + 2] + drempel) {lcd.setCursor(0,0); als (! shift) lcd.print(char(numbers[testingnum/3])); anders lcd.print(char(shiftnumbers[testingnum/3])); Serial.println(numbers[testingnum/3]); Als (! digitalRead(2)) {als (! shift) Keyboard.write(numbers[testingnum/3]); anders Keyboard.write(shiftnumbers[testingnum/3]);}} testingnum += 3; }} Serial.print("\n"); Serial.Print("\n"); lcd.setCursor (0, 1); Als (charset == 1) lcd.print("Letters"); Als (charset == 2) lcd.print ("nummers + symbolen"); Als (tellen > 12) als (x > prevx + shakethresh || x < prevx - shakethresh || y > prevy + shakethresh || y < prevy - shakethresh || z > prevz + shakethresh || z < prevz - shakethresh) {//Shaking als (charset == 1) Keyboard.write(32); //Space als (charset == 2) Keyboard.write(8), //Backspace delay(250); tellen = 0;} prevx = x; prevy = y; prevz = z; Als (! digitalRead(4)) {charset ++; als (charset == 3) charset = 1;} delay(150); Graaf ++; }