void buzz(int bType) { buzzFlag = true; // to intercept interrupts triggered by ledcWriteTone switch (bType) { case 10: ledcWriteTone(buzzChan,1000); delay(40); ledcWrite(buzzChan,0); break; //--TS1 is up case 11: ledcWriteTone(buzzChan,1500); delay(40); ledcWrite(buzzChan,0); break; //--TS2 is up case 12: ledcWriteTone(buzzChan,2000); delay(40); ledcWrite(buzzChan,0); break; //--TS3 is up case 20: ledcWriteTone(buzzChan,1100); delay(10); ledcWrite(buzzChan,0); pix.setPixelColor(0,blue); pix.show(); delay(1000-10-20); ledcWriteTone(buzzChan,400); delay(20); ledcWrite(buzzChan,0); pix.clear(); pix.show(); delay(1000-20-20); break; //--waiting on BLE pair case 21: ledcWriteTone(buzzChan,900); delay(200); ledcWriteTone(buzzChan,400); delay(600); ledcWrite(buzzChan,0); break; //--BLE pairing achieved case 30: ledcWriteTone(buzzChan,100); pix.setPixelColor(0,red); pix.show(); delay(2000); ledcWrite(buzzChan,0); break; //--fatal error, must reboot manually case 40: pix.setPixelColor(0,red); pix.show(); ledcWriteTone(buzzChan,1500); delay(40); ledcWrite(buzzChan,0); pix.clear(); pix.show(); break; //--low battery case 50: if (buzzKeyb) {ledcWriteTone(buzzChan,200); delay(10); ledcWriteTone(buzzChan,0);} break; //--valid keyb click case 51: if (buzzKeyb) {ledcWriteTone(buzzChan,60); delay(80); ledcWriteTone(buzzChan,0);} break; //--invalid keyb click case 60: ledcWriteTone(buzzChan,300); delay(60); ledcWriteTone(buzzChan,0); break; //--function switch change case 70: ledcWriteTone(buzzChan,500); delay(50); ledcWriteTone(buzzChan,1500); delay(50); ledcWriteTone(buzzChan,2500); delay(80); ledcWrite(buzzChan,0); break; //--progMode ON case 71: ledcWriteTone(buzzChan,2500); delay(50); ledcWriteTone(buzzChan,1500); delay(50); ledcWriteTone(buzzChan,500); delay(80); ledcWrite(buzzChan,0); break; //--progMode OFF } buzzFlag = false; } void send2Shift(byte shiftOne, byte shiftTwo) { digitalWrite(latchPin, 0); shiftOut(dataPin, clockPin, LSBFIRST, shiftTwo); shiftOut(dataPin, clockPin, LSBFIRST, shiftOne); digitalWrite(latchPin, 1); } void turnOnLED(byte type, int rowLED, int colLED) { elapsedLED = millis(); LEDisON = true; switch (type) { case 10: pix.setPixelColor(0,orange); break; // invalid touch case 11: pix.setPixelColor(0,yellow); // valid touch = letter or number if (ledKeyb){ if (cSym == 4) send2Shift(rowShiftOne[rowLED] + (colShiftOneFat[colLED] << 6),colShiftTwoFat[colLED]); else send2Shift(rowShiftOne[rowLED] + (colShiftOne[colLED] << 6),colShiftTwo[colLED]); } break; case 12: pix.setPixelColor(0,yellow); // valid touch = spacebar if (ledKeyb) send2Shift(spaceShiftOne,spaceShiftTwo); //all layouts have spacebar break; case 13: pix.setPixelColor(0,yellow); // valid touch = backspace if (ledKeyb) if (cSym == 2) send2Shift(backsShiftOne,backsShiftTwo); //only layout=2 has backspace break; case 14: pix.setPixelColor(0,yellow); // valid touch = enter if (ledKeyb) if (cSym == 3 || cSym == 2) send2Shift(enterShiftOne,enterShiftTwo); //only layouts=3,2 have enter break; case 1: pix.setPixelColor(0,violet); // layout 1 selected in progMode send2Shift(B11111111,B11111000); break; //cols 1,2,3 case 2: pix.setPixelColor(0,violet); // layout 2 selected in progMode send2Shift(B11111111,B00101111); break; //cols 5,6,7 case 3: pix.setPixelColor(0,violet); // layout 3 selected in progMode send2Shift(B00111111,B11011111); break; //cols 8,9,A } pix.show(); } void chkOnLED() { if (millis() - elapsedLED > onTimer) { LEDisON = false; send2Shift(B11000000,B11111111); //all LEDs off pix.clear(); pix.show(); } } void loadSymbols(byte boardMode) { symbolTable = boardMode; // '&' will be filtered out in printTouchData switch (boardMode) { case 1: cSym = 4; vSym = 5; symbol[0]='a'; symbol[1]='b'; symbol[2]='c'; symbol[3]='d'; symbol[4]='e'; symbol[5]='f'; symbol[6]='g'; symbol[7]='h'; symbol[8]='i'; symbol[9]='j'; symbol[10]='k';symbol[11]='l';symbol[12]='m';symbol[13]='n';symbol[14]=';'; symbol[15]='o';symbol[16]='p';symbol[17]='q';symbol[18]='r';symbol[19]='s'; symbol[20]='t';symbol[21]='u';symbol[22]='v';symbol[23]='w';symbol[24]='x'; symbol[25]='y';symbol[26]='z';symbol[27]= 32;symbol[28]= 32;symbol[29]= 32; spaceShiftOne = B00000001; spaceShiftTwo = B00001111; break; case 2: cSym = 3; vSym = 7; symbol[0]='a'; symbol[1]='b'; symbol[2]='c'; symbol[3]='d'; symbol[4]='e'; symbol[5]='f'; symbol[6]='g'; symbol[7]='h'; symbol[8]='i'; symbol[9]='j';symbol[10]='k';symbol[11]='l';symbol[12]='m';symbol[13]='n'; symbol[14]=';';symbol[15]='o';symbol[16]='p';symbol[17]='q';symbol[18]='r';symbol[19]='s';symbol[20]='t'; symbol[21]='u';symbol[22]='v';symbol[23]='w';symbol[24]='x';symbol[25]='y';symbol[26]='z';symbol[27]='1'; symbol[28]='2';symbol[29]='3';symbol[30]='4';symbol[31]='5';symbol[32]='6';symbol[33]='7';symbol[34]='8'; symbol[35]='9';symbol[36]='0';symbol[37]=32; symbol[38]=32; symbol[39]=32; symbol[40]=10; symbol[41]=10; spaceShiftOne = B11000001; spaceShiftTwo = B00100111; enterShiftOne = B00000001; enterShiftTwo = B11111111; break; case 3: cSym = 2; vSym = 10; symbol[0]='1'; symbol[1]='2'; symbol[2]='3'; symbol[3]='4'; symbol[4]='5'; symbol[5]='6'; symbol[6]='7'; symbol[7]='8'; symbol[8]='9'; symbol[9]='0'; symbol[10]='&';symbol[11]='&';symbol[12]='&';symbol[13]='&';symbol[14]='&';symbol[15]='&';symbol[16]='&';symbol[17]='&';symbol[18]='&';symbol[19]='&'; symbol[20]='q';symbol[21]='w';symbol[22]='e';symbol[23]='r';symbol[24]='t';symbol[25]='y';symbol[26]='u';symbol[27]='i';symbol[28]='o';symbol[29]='p'; symbol[30]='a';symbol[31]='s';symbol[32]='d';symbol[33]='f';symbol[34]='g';symbol[35]='h';symbol[36]='j';symbol[37]='k';symbol[38]='l';symbol[39]=';'; symbol[40]='&';symbol[41]='z';symbol[42]='x';symbol[43]='c';symbol[44]='v';symbol[45]='b';symbol[46]='n';symbol[47]='m';symbol[48]=10; symbol[49]=10; symbol[50]='&';symbol[51]=8; symbol[52]=8; symbol[53]=8; symbol[54]=32; symbol[55]=32; symbol[56]=32; symbol[57]=32; symbol[58]=10; symbol[59]=10; spaceShiftOne = B11000001; spaceShiftTwo = B00001111; enterShiftOne = B00000011; enterShiftTwo = B11111111; backsShiftOne = B11000001; backsShiftTwo = B11110001; break; } for (i=0; i<14; i++) for (j=0; j<22; j++) sym2Pix[i][j] = 98; for (h=0; h (battTimer)) { elapsedBatt = millis(); battRead = analogRead(35); battRead = ((battRead*2) / 4095 * 3.3 * 1.095); if (battRead < 3.5) { buzz(40); battTimer = 5 * 1000; }else battTimer = 5 * 60 * 1000; //dprintln(battRead); //bleKeyb.println(battRead); } }