先上图
场景是这样的, 这几天给CS系统做一个微信支付的功能, 但是生成的二维码是在前台的电脑上..不可能让用户跑到前台的电脑上去扫描...然后拿出了N年前买的Arduino 做了一个二维码显示器..就可以放在前台的桌子上了.
淘宝有很多种,最便宜的只要十几块................................320*240,能装SD卡,还能触摸..最爽的是直插UNO,直插直插,不用接线..
很简单的程序,通过串口和主机通讯,在屏幕上显示一个二维码...
但是有两个问题,不可能传输图片,图片太大,串口太慢,, 所以把支付地址通过串口发送到板子上,然后找到QRCode(https://github.com/ricmoo/QRCode)这个库,生成二维码..
注意,单片机资源受限,生成更大二维码需要更大的内存,也需要更长的时间,见QRCode文档..有的大的就用不了.
我用的是51*51的分辨率.然后再扩大4倍,也就二百个像素..
见代码.
void loop()
{
//颜色,白色.
int c = 0x0000; if (Serial.available())
{
Serial.println("Start");
LCD_Clear(0xffff);
//串口收到数据,清空屏幕,然后生成二维码.
String strURL = Serial.readString();
Serial.println(strURL);
QRCode qrcode;
//选择二维码类型,这里是9, 两个数字一样
uint8_t qrcodeData[qrcode_getBufferSize()];
char* p = strURL.c_str();
qrcode_initText(&qrcode, qrcodeData, , , p);
Serial.println(qrcode.size);
// 图片放大的倍数, 51*51的分辨率显示出来是什么样??
int kuo = ;
for (uint8_t y = ; y < qrcode.size; y++) {
for (uint8_t x = ; x < qrcode.size; x++) {
int hs = qrcode_getModule(&qrcode, x, y) ? : ;
if (hs == )
{
//放大图片.
unsigned int xk = x * kuo + ;
unsigned int yk = y * kuo+ ;
for (uint8_t k = ; k < kuo; k++)
{
V_line( xk+ k, yk, kuo, c);
}
}
}
}
}
}
注意,这个屏幕是个便宜货,厂家给的DEMO根本驱动不起来,也不提供支持..
我这里有自己改的驱动...