int button_0 = 3;
bool last_state = 0;//上次按下状态
uint32_t press_time = 0;//上次按下时间
uint32_t release_time = 0;//上次抬起时间
const int unit = 50;
const int long_press = 3*unit;
const int space_letter = 5*unit;
const int space_word = 10*unit;
//用字符串存储打的字符
String comdata = "";
bool type = true;//是否判断时长
char parse_code(String code)
{
if (code == "._")
return 'a';
if (code == "_...")
return 'b';
if (code == "_._.")
return 'c';
if (code == "_..")
return 'd';
if (code == ".")
return 'e';
if (code == ".._.")
return 'f';
if (code == "__.")
return 'g';
if (code == "....")
return 'h';
if (code == "..")
return 'i';
if (code == ".___")
return 'j';
if (code == "_._")
return 'k';
if (code == "._..")
return 'l';
if (code == "__")
return 'm';
if (code == "_.")
return 'n';
if (code == "___")
return 'o';
if (code == ".__.")
return 'p';
if (code == "__._")
return 'q';
if (code == "._.")
return 'r';
if (code == "...")
return 's';
if (code == "_")
return 't';
if (code == ".._")
return 'u';
if (code == "..._")
return 'v';
if (code == ".__")
return 'w';
if (code == "_.._")
return 'x';
if (code == "_.__")
return 'y';
if (code == "__..")
return 'z';
if (code == "_____")
return '0';
if (code == ".____")
return '1';
if (code == "..___")
return '2';
if (code == "...__")
return '3';
if (code == "...._")
return '4';
if (code == ".....")
return '5';
if (code == "_....")
return '6';
if (code == "__...")
return '7';
if (code == "___..")
return '8';
if (code == "____.")
return '9';
}
void setup() {
pinMode(button_0, INPUT);
Serial.begin(9600);
}
void loop() {
bool p = digitalRead(button_0);
if(p != last_state)
{
last_state = p;
if (p == 0)
{
type = true;
uint32_t this_time = millis();
release_time = this_time;
if(this_time - press_time <= long_press)
{
comdata = comdata + ".";
}
else
{
comdata += "_";
}
}
else
{
type = false;
uint32_t this_time = millis();
press_time = this_time;
}
delay(10);
}
if(type == true)
{
if(millis() - release_time >= space_letter)
{
Serial.print(parse_code(comdata));
comdata = "";
type = false;
}
}
}