216 lines
5.1 KiB
C++
216 lines
5.1 KiB
C++
uint32_t start=0;volatile int duration=0;
|
|
volatile bool chaR=false;volatile int i=0;
|
|
volatile int msg=0;
|
|
const int led=3;
|
|
const int n=70;
|
|
void setup(){
|
|
Serial.begin(9600);
|
|
pinMode(2,INPUT);
|
|
pinMode(led,OUTPUT);
|
|
attachInterrupt(0,startM,RISING);
|
|
attachInterrupt(0,endM,FALLING);
|
|
}
|
|
|
|
void startM()
|
|
{
|
|
start=millis();
|
|
}
|
|
|
|
void endM(){
|
|
duration = millis()-start;
|
|
duration +=40;
|
|
i++;
|
|
msg=msg*10+duration/100;
|
|
}
|
|
void loop(){
|
|
if(i==4){
|
|
Serial.print(decodeMsg(msg));i=0;msg=0;
|
|
}
|
|
if(Serial.available()>0) //if the input field of the serial monitor has a value
|
|
{
|
|
char ch = Serial.read();
|
|
sendCode(encodeMsg(ch));
|
|
}
|
|
}
|
|
|
|
int encodeMsg(char ch){
|
|
switch(ch){
|
|
case '\n': return 1111;
|
|
case 'a': return 1112;
|
|
case 'b': return 1121;
|
|
case 'c': return 1332;
|
|
case 'd': return 1122;
|
|
case 'e': return 1211;
|
|
case 'f': return 1212;
|
|
case 'g': return 1221;
|
|
case 'h': return 1222;
|
|
case 'i': return 2111;
|
|
case 'j': return 2112;
|
|
case 'k': return 2121;
|
|
case 'l': return 2122;
|
|
case 'm': return 2211;
|
|
case 'n': return 2212;
|
|
case 'o': return 2221;
|
|
case 'p': return 2222;
|
|
case 'q': return 3111;
|
|
case 'r': return 3112;
|
|
case 's': return 3121;
|
|
case 't': return 3122;
|
|
case 'u': return 3211;
|
|
case 'v': return 3212;
|
|
case 'w': return 3221;
|
|
case 'x': return 3222;
|
|
case 'y': return 4111;
|
|
case 'z': return 1311;
|
|
case '1': return 4121;
|
|
case '2': return 4122;
|
|
case '3': return 4211;
|
|
case '4': return 4212;
|
|
case '5': return 4221;
|
|
case '6': return 4222;
|
|
case '7': return 5111;
|
|
case '8': return 5112;
|
|
case '9': return 5121;
|
|
case '.': return 5122;
|
|
case '(': return 5211;
|
|
case ')': return 5212;
|
|
case '+': return 5221;
|
|
case '-': return 5222;
|
|
case '!': return 4112;
|
|
case '?': return 1312;
|
|
case ',': return 1313;
|
|
case '0': return 1321;
|
|
case 'A': return 1322;
|
|
case 'B': return 1323;
|
|
case 'C': return 1331;
|
|
case 'D': return 1333;
|
|
case 'E': return 2311;
|
|
case 'F': return 2312;
|
|
case 'G': return 2313;
|
|
case 'H': return 2321;
|
|
case 'I': return 2322;
|
|
case 'J': return 2323;
|
|
case 'K': return 2331;
|
|
case 'L': return 2332;
|
|
case 'M': return 2333;
|
|
case 'N': return 3311;
|
|
case 'O': return 3312;
|
|
case 'P': return 3313;
|
|
case 'Q': return 3321;
|
|
case 'R': return 3322;
|
|
case 'S': return 3323;
|
|
case 'T': return 3331;
|
|
case 'U': return 3332;
|
|
case 'V': return 4311;
|
|
case 'W': return 4312;
|
|
case 'X': return 4313;
|
|
case 'Y': return 4321;
|
|
case 'Z': return 4322;
|
|
|
|
|
|
|
|
// enter all the codes here should be exactly same as in letters array
|
|
}
|
|
}
|
|
|
|
|
|
|
|
char decodeMsg(int i){
|
|
switch(i){
|
|
//make all cases for all the values of i
|
|
case 1111: return '\n';
|
|
case 1112: return 'a';
|
|
case 1121: return 'b';
|
|
case 1332: return 'c';
|
|
case 1122: return 'd';
|
|
case 1211: return 'e';
|
|
case 1212: return 'f';
|
|
case 1221: return 'g';
|
|
case 1222: return 'h';
|
|
case 2111: return 'i';
|
|
case 2112: return 'j';
|
|
case 2121: return 'k';
|
|
case 2122: return 'l';
|
|
case 2211: return 'm';
|
|
case 2212: return 'n';
|
|
case 2221: return 'o';
|
|
case 2222: return 'p';
|
|
case 3111: return 'q';
|
|
case 3112: return 'r';
|
|
case 3121: return 's';
|
|
case 3122: return 't';
|
|
case 3211: return 'u';
|
|
case 3212: return 'v';
|
|
case 3221: return 'w';
|
|
case 3222: return 'x';
|
|
case 4111: return 'y';
|
|
case 1311: return 'z';
|
|
case 4121: return '1';
|
|
case 4122: return '2';
|
|
case 4211: return '3';
|
|
case 4212: return '4';
|
|
case 4221: return '5';
|
|
case 4222: return '6';
|
|
case 5111: return '7';
|
|
case 5112: return '8';
|
|
case 5121: return '9';
|
|
case 5122: return '.';
|
|
case 5211: return '(';
|
|
case 5212: return ')';
|
|
case 5221: return '+';
|
|
case 5222: return '-';
|
|
case 4112: return '!';
|
|
case 1312: return '?';
|
|
case 1313: return ',';
|
|
case 1321: return '0';
|
|
case 1322: return 'A';
|
|
case 1323: return 'B';
|
|
case 1331: return 'C';
|
|
case 1333: return 'D';
|
|
case 2311: return 'E';
|
|
case 2312: return 'F';
|
|
case 2313: return 'G';
|
|
case 2321: return 'H';
|
|
case 2322: return 'I';
|
|
case 2323: return 'J';
|
|
case 2331: return 'K';
|
|
case 2332: return 'L';
|
|
case 2333: return 'M';
|
|
case 3311: return 'N';
|
|
case 3312: return 'O';
|
|
case 3313: return 'P';
|
|
case 3321: return 'Q';
|
|
case 3322: return 'R';
|
|
case 3323: return 'S';
|
|
case 3331: return 'T';
|
|
case 3332: return 'U';
|
|
case 4311: return 'V';
|
|
case 4312: return 'W';
|
|
case 4313: return 'X';
|
|
case 4321: return 'Y';
|
|
case 4322: return 'Z';
|
|
|
|
}
|
|
}
|
|
|
|
|
|
void sendCode(int code) //convert the char to the corresponding element in the array
|
|
{
|
|
int ch = 0;
|
|
while((ch=(code%10))!=0)
|
|
{
|
|
digitalWrite(led, HIGH); //turn on the LED
|
|
dela(ch*100);
|
|
digitalWrite(led, LOW); //turn off the LED
|
|
dela(100);
|
|
code = code/10;
|
|
}
|
|
dela(100);
|
|
}
|
|
|
|
void dela(int d)
|
|
{
|
|
uint32_t t = millis();
|
|
while((millis()-t)<d);
|
|
}
|