zoukankan      html  css  js  c++  java
  • 用Arduino制作一个二维码显示器

    先上图

    场景是这样的, 这几天给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(
    9)]; char* p = strURL.c_str(); qrcode_initText(&qrcode, qrcodeData, 9, 0, p); Serial.println(qrcode.size);
    // 图片放大的倍数, 51*51的分辨率显示出来是什么样??
    int kuo = 4;
    for (uint8_t y = 0; y < qrcode.size; y++) { for (uint8_t x = 0; x < qrcode.size; x++) { int hs = qrcode_getModule(&qrcode, x, y) ? 1 : 0; if (hs == 1) {
    //放大图片. unsigned
    int xk = x * kuo + 20; unsigned int yk = y * kuo+ 20; for (uint8_t k = 0; k < kuo; k++) { V_line( xk+ k, yk, kuo, c); } } } } } }

    注意,这个屏幕是个便宜货,厂家给的DEMO根本驱动不起来,也不提供支持..

    我这里有自己改的驱动...

  • 相关阅读:
    HDU 5273 Dylans loves sequence 暴力递推
    HDU 5285 wyh2000 and pupil 判二分图+贪心
    HDU 5281 Senior's Gun 贪心
    HDU 5651 xiaoxin juju needs help 逆元
    HDU 5646 DZY Loves Partition
    HDU 5366 The mook jong
    HDU 5391Z ball in Tina Town 数论
    HDU 5418 Victor and World 允许多次经过的TSP
    HDU 5642 King's Order dp
    抽屉原理
  • 原文地址:https://www.cnblogs.com/zifeiniu/p/8079139.html
Copyright © 2011-2022 走看看