Просмотр исходного кода

add:air101 lvgl 添加touch demo

Dozingfiretruck 3 лет назад
Родитель
Сommit
4eade517bd
2 измененных файлов с 186 добавлено и 0 удалено
  1. 105 0
      demo/lvgl/Air101/touch/gt911.lua
  2. 81 0
      demo/lvgl/Air101/touch/main.lua

+ 105 - 0
demo/lvgl/Air101/touch/gt911.lua

@@ -0,0 +1,105 @@
+--[[
+@module gt911
+@summary gt911 驱动
+@version 1.0
+@date    2022.05.26
+@author  Dozingfiretruck
+@usage
+--注意:因使用了sys.wait()所有api需要在协程中使用
+-- 用法实例
+local gt911 = require "gt911"
+
+local i2cid = 0
+local gt911_res = pin.PA07
+local gt911_int = pin.PA00
+i2c_speed = i2c.FAST
+sys.taskInit(function()
+    i2c.setup(i2cid,i2c_speed)
+    gt911.init(i2cid,gt911_res,gt911_int)
+    while 1 do
+        sys.wait(1000)
+    end
+end)
+
+local function gt911CallBack(press_sta,i,x,y)
+    print(press_sta,i,x,y)
+end
+
+sys.subscribe("GT911",gt911CallBack)
+]]
+
+
+local gt911 = {}
+local sys = require "sys"
+local i2cid
+
+local function gt911_send(...)
+    i2c.send(i2cid, 0x5D, {...})
+end
+
+local function gt911_recv(...)
+    i2c.send(i2cid, 0x5D, {...})
+    local _, read_data = pack.unpack(i2c.recv(0, 0x5D, 1), "b")
+    return read_data
+end
+
+local press_sta = false
+
+local point = {{x=0,y=0},{x=0,y=0},{x=0,y=0},{x=0,y=0},{x=0,y=0}}
+
+--[[
+gt911初始化
+@api gt911.init(gt911_i2c,gt911_res,gt911_int)
+@number gt911_i2c i2c_id
+@number gt911_res 复位引脚
+@number gt911_int 中断引脚
+@return bool   成功返回true
+@usage
+gt911.init(0)
+]]
+function gt911.init(gt911_i2c,gt911_res,gt911_int)
+    i2cid = gt911_i2c
+    gpio.setup(gt911_int, 0)
+    gpio.setup(gt911_res, 0)
+
+    gpio.set(gt911_int, 0)
+    gpio.set(gt911_res, 0)
+    sys.wait(10)
+    gpio.set(gt911_res, 1)
+    sys.wait(10)
+
+    gpio.setup(gt911_int, 
+        function(val) 
+            local count
+            local data = gt911_recv(0x81, 0x4E)
+            if data ~=0 then
+                press_sta = true
+                press_times = 0
+                count = data-128
+                -- print("触控点数",count)
+                if press_sta == true and count==0 then
+                    press_sta = false
+                    -- print("抬起")
+                    sys.publish("GT911",press_sta,1,point[1].x,point[1].y)
+                end
+                for i=1,data-128 do
+                    point[i].x=gt911_recv(0x81, 0x50+(i-1)*8)+gt911_recv(0x81, 0x51+(i-1)*8)*256
+                    point[i].y=gt911_recv(0x81, 0x52+(i-1)*8)+gt911_recv(0x81, 0x53+(i-1)*8)*256
+                    -- print(i,point[i].x,point[i].y)
+                    sys.publish("GT911",press_sta,i,point[i].x,point[i].y)
+                end
+                gt911_send(0x81, 0x4E, 0x00)
+            else
+            end
+        end,nil,gpio.RISING)
+        
+    gt911_send(0x80, 0x40, 0x02)
+    gt911_send(0x80, 0x40, 0x00)
+    local touchic_id = gt911_recv(0x81, 0x40)
+    print("touchic_id",touchic_id)
+    return true
+end
+
+return gt911
+
+

+ 81 - 0
demo/lvgl/Air101/touch/main.lua

@@ -0,0 +1,81 @@
+-- LuaTools需要PROJECT和VERSION这两个信息
+PROJECT = "touch"
+VERSION = "1.0.0"
+
+log.info("main", PROJECT, VERSION)
+
+-- 引入必要的库文件(lua编写), 内部库不需要require
+local sys = require "sys"
+
+if wdt then
+    --添加硬狗防止程序卡死,在支持的设备上启用这个功能
+    wdt.init(15000)--初始化watchdog设置为15s
+    sys.timerLoopStart(wdt.feed, 10000)--10s喂一次狗
+end
+
+-- v0006及以后版本可用pin方式, 请升级到最新固件 https://gitee.com/openLuat/LuatOS/releases
+spi_lcd = spi.deviceSetup(0,pin.PB04,0,0,8,20*1000*1000,spi.MSB,1,1)
+
+log.info("lcd.init",
+lcd.init("st7796",{port = "device",pin_dc = pin.PB01, pin_pwr = pin.PB00,pin_rst = pin.PB03,direction = 0,w = 320,h = 480,xoffset = 0,yoffset = 0},spi_lcd))
+
+
+local function event_handler(obj, event)
+    if(event == lvgl.EVENT_CLICKED) then
+            print("Clicked")
+    elseif(event == lvgl.EVENT_VALUE_CHANGED) then
+            print("Toggled")
+    end
+end
+
+local function demo1()
+local label
+local btn1 = lvgl.btn_create(lvgl.scr_act(), nil)
+lvgl.obj_set_event_cb(btn1, event_handler)
+lvgl.obj_align(btn1, nil, lvgl.ALIGN_CENTER, 0, -40)
+
+label = lvgl.label_create(btn1, nil)
+lvgl.label_set_text(label, "Button")
+
+local btn2 = lvgl.btn_create(lvgl.scr_act(), nil)
+lvgl.obj_set_event_cb(btn2, event_handler)
+lvgl.obj_align(btn2, nil, lvgl.ALIGN_CENTER, 0, 40)
+lvgl.btn_set_checkable(btn2, true)
+lvgl.btn_toggle(btn2)
+lvgl.btn_set_fit2(btn2, lvgl.FIT_NONE, lvgl.FIT_TIGHT)
+
+label = lvgl.label_create(btn2, nil)
+lvgl.label_set_text(label, "Toggled")
+end
+
+local function gt911CallBack(press_sta,i,x,y)
+    if press_sta then
+        lvgl.indev_point_emulator_update(x,y,1)
+    else
+        lvgl.indev_point_emulator_update(x,y,0)
+    end
+end
+
+sys.subscribe("GT911",gt911CallBack)
+
+local gt911 = require "gt911"
+local i2cid = 0
+local gt911_res = pin.PA07
+local gt911_int = pin.PA00
+local i2c_speed = i2c.FAST
+sys.taskInit(function()
+    i2c.setup(i2cid,i2c_speed)
+    gt911.init(i2cid,gt911_res,gt911_int)
+
+    log.info("lvgl", lvgl.init())
+    demo1()
+    lvgl.indev_drv_register("pointer", "emulator")
+    while 1 do
+        sys.wait(1000)
+    end
+end)
+
+-- 用户代码已结束---------------------------------------------
+-- 结尾总是这一句
+sys.run()
+-- sys.run()之后后面不要加任何语句!!!!!