Arduino防盗系统disarm函数跳过密码验证问题求助
Arduino防盗系统撤防跳过密码验证的解决方案
排查核心逻辑问题
检查
disarm()函数实现:确认函数内部是否直接执行了撤防操作,遗漏了密码验证步骤。如果是,需要在函数开头加入密码验证逻辑,只有验证通过才执行撤防。
错误示例:void disarm() { systemState = DISARMED; Serial.println("系统已撤防"); }修正后:
void disarm() { if (verifyPassword()) { systemState = DISARMED; Serial.println("系统已撤防"); } else { Serial.println("密码错误,撤防失败"); } }检查按键触发逻辑:确认触发撤防的按键事件是否直接调用
disarm(),而没有先启动密码输入流程。正确的流程应该是:按键触发撤防请求 → 提示用户输入密码 → 验证密码有效性 → 验证通过后调用disarm()。
验证密码函数的正确性
- 检查
verifyPassword()函数的逻辑是否正常:确认它能正确读取用户输入、和预设密码对比,并返回准确的布尔值。可以加入调试输出排查问题:bool verifyPassword() { Serial.println("请输入密码:"); String inputPwd = Serial.readStringUntil('\n'); inputPwd.trim(); // 调试输出,确认输入内容 Serial.print("用户输入:"); Serial.println(inputPwd); return inputPwd == presetPassword; }
检查系统状态判断
- 确保撤防操作仅在系统处于布防状态时触发,避免因状态判断错误导致逻辑跳过验证。比如在按键处理中加入状态判断:
void handleKeyPress() { if (keyState == DISARM_TRIGGER && systemState == ARMED) { // 启动密码输入验证流程,再执行撤防 if (verifyPassword()) { disarm(); } } }
内容的提问来源于stack exchange,提问作者Hankzer
相关产品推荐
相关产品推荐

