莫斯密码

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;
        }
    }
}

转载于:https://my.oschina.net/u/4170695/blog/3081771

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值