main.lua 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. PROJECT = "scanner"
  2. VERSION = "1.0.0"
  3. sys = require("sys")
  4. --[[
  5. -- LCD接法示例, 以Air105开发板的HSPI为例
  6. LCD管脚 Air105管脚
  7. GND GND
  8. VCC 3.3V
  9. SCL (PC15/HSPI_SCK)
  10. SDA (PC13/HSPI_MOSI)
  11. RES (PC12/HSPI_MISO)
  12. DC (PE08) --开发板上的U3_RX
  13. CS (PC14/HSPI_CS)
  14. BL (PE09) --开发板上的U3_TX
  15. 提示:
  16. 1. 只使用SPI的时钟线(SCK)和数据输出线(MOSI), 其他均为GPIO脚
  17. 2. 数据输入(MISO)和片选(CS), 虽然是SPI, 但已复用为GPIO, 并非固定,是可以自由修改成其他脚
  18. -- USB驱动下载 https://doc.openluat.com/wiki/21?wiki_page_id=2070
  19. -- USB驱动与 合宙Cat.1的USB驱动是一致的
  20. 扫码解码会输出日志, 也会输出到USB HID.
  21. 若需要通过USB HID查看
  22. 1. 要安装USB驱动
  23. 2. 刷好脚本, 务必把txt也下载下去,总共3个文件.
  24. 3. 断电, 拨动切换开关, 重新连接电脑
  25. 4. 打开记事本, 光标处于输入状态
  26. 5. 移动摄像头进行扫码, 结果会输出到记事本, 每行一次
  27. ]]
  28. if wdt then
  29. wdt.init(9000)--初始化watchdog设置为9s
  30. sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
  31. end
  32. spi_lcd = spi.deviceSetup(5,pin.PC14,0,0,8,48*1000*1000,spi.MSB,1,1)
  33. -- log.info("lcd.init",
  34. -- lcd.init("st7735s",{port = "device",pin_dc = pin.PE08 ,pin_rst = pin.PC12,pin_pwr = pin.PE09,direction = 2,w = 160,h = 80,xoffset = 1,yoffset = 26},spi_lcd))
  35. log.info("lcd.init",
  36. lcd.init("st7789",{port = "device",pin_dc = pin.PE08 ,pin_rst = pin.PC12,pin_pwr = pin.PE09,direction = 0,w = 240,h = 320,xoffset = 0,yoffset = 0},spi_lcd))
  37. -- log.info("lcd.init",
  38. -- lcd.init("st7735",{port = "device",pin_dc = pin.PE08 ,pin_rst = pin.PC12,pin_pwr = pin.PE09,direction = 0,w = 128,h = 160,xoffset = 2,yoffset = 1},spi_lcd))
  39. -- log.info("lcd.init",
  40. -- lcd.init("gc9306x",{port = "device",pin_dc = pin.PE08 ,pin_rst = pin.PC12,pin_pwr = pin.PE09,direction = 0,w = 240,h = 320,xoffset = 0,yoffset = 0},spi_lcd))
  41. --GC032A输出灰度图像初始化命令
  42. local GC032A_InitReg_Gray =
  43. {
  44. zbar_scan = 1,--是否为扫码
  45. draw_lcd = 1,--是否向lcd输出
  46. i2c_id = 0,
  47. i2c_addr = 0x21,
  48. pwm_id = 5;
  49. pwm_period = 24*1000*1000,
  50. pwm_pulse = 0,
  51. sensor_width = 640,
  52. sensor_height = 480,
  53. color_bit = 16,
  54. init_cmd ="/luadb/GC032A_InitReg_Gray.txt"--此方法将初始化指令写在外部文件,支持使用 # 进行注释
  55. }
  56. --注册摄像头事件回调
  57. local tick_scan = 0
  58. camera.on(0, "scanned", function(id, str)
  59. if type(str) == 'string' then
  60. log.info("扫码结果", str)
  61. -- air105每次扫码需600ms, 当目标一维码或二维码持续被识别, 本函数会反复触发
  62. -- 鉴于某些场景需要间隔时间输出, 下列代码就是演示间隔输出
  63. -- if mcu.ticks() - tick < 1000 then
  64. -- return
  65. -- end
  66. -- tick_scan = mcu.ticks()
  67. -- 输出内容可以经过加工后输出, 例如带上换行(回车键)
  68. usbapp.vhid_upload(0, str.."\r\n")
  69. elseif str == false then
  70. log.error("摄像头没有数据")
  71. end
  72. end)
  73. local camera_pwdn = gpio.setup(pin.PD06, 1, gpio.PULLUP) -- PD06 camera_pwdn引脚
  74. local camera_rst = gpio.setup(pin.PD07, 1, gpio.PULLUP) -- PD07 camera_rst引脚
  75. usbapp.start(0)
  76. sys.taskInit(function()
  77. camera_rst(0)
  78. local camera_id = camera.init(GC032A_InitReg_Gray)--屏幕输出灰度图像并扫码
  79. log.info("摄像头启动")
  80. camera.start(camera_id)--开始指定的camera
  81. end)
  82. -- 用户代码已结束---------------------------------------------
  83. -- 结尾总是这一句
  84. sys.run()
  85. -- sys.run()之后后面不要加任何语句!!!!!