图片里只要有二维码就涉嫌违规??这让我做二维码模块教程的如何是好!!!
鸽了好久好久的二维码模块教程
本教程内容:通过Arduino+GM65二维码模块实现可以根据输入的字符串(扫描到二维码包含的信息)不同而执行不同的命令,并且命令只执行一次,而不是判断后重复执行,这个功能用到了自动初始化:
GM65的一系列设置可以通过让它自己扫描用户设置手册里带的二维码设置好。
用户设置手册点击这里找到普通下载
下面给出常用的设置:波特率设置,我用的9600,后边程序里也用的9600,不管你用多少,程序里对arduino的设置和 你扫码对二维码设置的还有串口监视器(串口助手)里面设置的都必须一致。
如果你不喜欢它一直亮灯,你可以把灯关掉(扫描无照明对应的二维码)。
和电脑连用USB口,加上那个USB线,和单片机连的话用UART,一般是在电脑上调好了再上单片机。
上单片机之前扫一下这个:
例一
这是一个自动复位的函数,在总程序里面已经调用了。
void(* resetFunc) (void) = 0;
resetFunc();
连线
ARDUINO | GM65 |
---|---|
5V | 5V |
GND | GND |
RX | TX |
TX | RX |
下面是总程序,直接复制就行,烧录的时候不要把arduino的RX、TX和GM65连接,否则会报错。
String inputString="";
void(* resetFunc) (void) = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
int i;
while(Serial.available())
{
inputString+=char(Serial.read());
delay(2);//不加延迟的话,USART内部的发送速度远大于接收速度,从而导致每到一个新字节,
//进入一次available()发送出去后,就没有新的数据发送了,从而立即执行下面的打印命令!
}
if(inputString[0]=='1'&&inputString[1]=='2'&&inputString[2]=='3')
{
Serial.println("YES!");
for(i=0;i<3;i++)
{
Serial.println(inputString[i]);
}
delay(100);
resetFunc();
}
else if(inputString=="")
{
}
if(inputString=="")
{
}
else if(inputString[0]!='1'||inputString[1]!='2'||inputString[2]!='3')
{
String QRcode=String(inputString[0])+String(inputString[1])+String(inputString[2]);
Serial.println("NO!");
Serial.println(QRcode);
delay(100);
resetFunc();
}
}
我右侧的二维码信息是"123",我在程序中写到的是如果读到输入的前三位字符分别为1、2、3,时,串口打印YES!,以及前三位字符。
注意我的在向串口输出部分的写法,如果收到的不是"123"的话,把数组中的三个值转换成字符串然后合并成新的字符串,一起输出。
前一个二维码信息是123,后一个是321,注意输出的样式。
例二
起到和案例一一样的效果,也是常见的用法。主要是如果你在等待它输入一个你已经知道的值,比如我的例子里我在等二维码扫进一个“123”,我可以用Serial.find(字符型)函数,括号里必须是字符型,需要注意下面程序第一行的声明形式,这是一个字符数组。
当然你也可以这么写第一行,这是标准的字符数组的写法——加上花括号:
char input_code[]={“123”};
char input_code[]="123";
void(* resetFunc) (void) = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
if(Serial.available() > 0)
{
if(Serial.find(input_code))
{
Serial.println("YES!");
delay(100);
resetFunc();
}
else
{
Serial.println("No!");
delay(100);
resetFunc();
}
}
}
例三(软串口)
#include <SoftwareSerial.h>
char input_code[]={"123"};
void(* resetFunc) (void) = 0;
SoftwareSerial QRcode(10, 11);//RX;TX
void setup()
{
QRcode.begin(9600);
Serial.begin(9600);
}
void loop()
{
if(QRcode.available() > 0)
{
if(QRcode.find(input_code))
{
Serial.println("YES!");
delay(100);
resetFunc();
}
else
{
Serial.println("No!");
delay(100);
resetFunc();
}
}
}
这里就不多说了,和之前一样的原理,但是我们用10和11这两个普通IO口起到串口的功能(分别对应RX与TX)。
这样有什么好处呢?我们知道当GM65占用了arduino的RX与TX时是不能烧程序进去的,因为上载程序也是用的RX与TX脚位,但是有了软串口之后GM65不再占用arduino的RX与TX,烧程序也可以不用拔下那两根通信的线。
也就是当arduino的RXTX另有作用的时候,软串口的强大就体现出来了。
此外你还可以用switch的方法检测字符等等,后面有时间再更新新的思路,一下子全写上不现实。
有错误烦请指正,有问题欢迎留言!
参考文章:
[1]:Arduino串口通信(Serial)
[2]:Arduino重置-复位
[3]:GM65条码识读模块用户设置手册
[4]:关于软串口