ATtiny85连接EM18 RFID阅读器运行代码提示Serial未声明问题求助
问题解决方法
报错根因
ATtiny85没有内置硬件串口模块,Arduino ATtiny核心库默认未定义Serial对象,直接调用Serial相关方法就会触发该报错。你已经引入了SoftwareSerial软串口库,只需调整代码即可解决:
调整步骤
- 初始化软串口对象
在引入SoftwareSerial.h的下一行添加软串口定义,自行指定ATtiny85上的收发引脚(示例中RX接PB2、TX接PB1,可根据自己的接线修改):
SoftwareSerial mySerial(2, 1); // 第一个参数为RX引脚号,第二个为TX引脚号
- 替换所有串口调用
把代码中所有Serial关键字替换为你定义的软串口对象名mySerial,比如:
- 原
Serial.begin(9600)改为mySerial.begin(9600) - 原
Serial.available()改为mySerial.available() - 所有打印、读串口的方法都同步替换即可
- 接线匹配
- EM18 RFID模块的TX引脚接你设置的ATtiny85 RX引脚
- 如果需要串口调试输出,将ATtiny85的TX引脚接USB转TTL模块的RX引脚,波特率统一设为9600
修改后完整可用代码
#include <SoftwareSerial.h> // 自定义软串口,引脚可按需调整 SoftwareSerial mySerial(2, 1); char tag1[12]={"123456789123"}; char tag2[12]={"123456789456"}; char var[12]={"000000000000"}; int ok; void setup() { mySerial.begin(9600); } boolean comparetag(char aa[14], char bb[14]) { boolean ff = false; int fg = 0; for (int cc = 0 ; cc < 12 ; cc++) { if (aa[cc] == bb[cc]) { fg++; } } if (fg == 12) { ff = true; } return ff; } void check() { ok = 0; if (comparetag(var, tag1) == true) { ok++; } if (comparetag(var, tag2) == true) { ok++; } } void reading_data() { ok=-1; int k=0; char val; mySerial.println("entre the rfid id"); while(!mySerial.available()) { // 等待数据 } if(mySerial.available()>0) { for(int i=0;i<12;i++) { val=mySerial.read(); mySerial.print(val); var[i]=val; while(!mySerial.available()) { // 等待下一位数据 } } check(); } if (ok > 0) { mySerial.println('\n'); mySerial.println("Accepted"); ok = -1; } else if (ok == 0) { mySerial.println('\n'); mySerial.println("Rejected"); ok = -1; } } void loop() { reading_data(); }
注意事项
- 代码中使用的引脚号是Arduino ATtiny核心的映射编号,不是芯片物理引脚号,烧录前确认你使用的ATtiny核心的引脚对应规则
- 不要选择已经被其他外设占用的引脚作为软串口收发引脚
内容的提问来源于stack exchange,提问作者Ajit
相关产品推荐
相关产品推荐

