0

我是 Lua 的新手,我正在尝试创建一个小应用程序来读取 adc 值。这里的重点是我正在尝试使用以下代码将值从一个表分配给另一个表,但它确实不起作用(没有错误,只是什么都不做):

-- Setting output GPIO pins
multip = {  sc0 = 0,  sc1 = 3,  sc2 = 4 }
for k3,v3 in pairs(multip) do gpio.mode(v3, gpio.OUTPUT) end

-- Assigning ADC channels
HIHs = {
        hum1 = {
                sc0 = gpio.HIGH,
                sc1 = gpio.LOW,
                sc2 = gpio.HIGH
        },
        hum2 = {
                sc0 = gpio.LOW,
                sc1 = gpio.HIGH,
                sc2 = gpio.HIGH
        },
        hum3 = {
                sc0 = gpio.HIGH,
                sc1 = gpio.HIGH,
                sc2 = gpio.HIGH
        }
}

-- Sequentially access each channel and read value
for g,t in pairs(HIHs) do
    print("---------- Setting Humidity sensor " .. g .. " ----------")
    for k4,v4 in pairs(multip) do 
        print("Writing pin " .. k4 .. " to " .. tostring(t[k4]))
        gpio.write(v4, t[k4])   
    end
    print("ADC Value: "..adc.read(0))
end

非常奇怪的是,如果我这样做:

for k1,v1 in pairs(HIHs) do for k2,v2 in pairs(v1) do print(k1,k2,v2) end end

我什至没有按正确的顺序获取 HIHs 表,它从第二个元素开始打印:

hum2    sc0 0
hum2    sc1 1
hum2    sc2 1
hum3    sc0 1
hum3    sc1 1
hum3    sc2 1
hum1    sc0 1
hum1    sc1 0
hum1    sc2 1

这段代码有什么问题?为什么我不能访问我的表格并且不应该按顺序打印它?除非我在 Lua 理解中明显遗漏了一些非常非常基本的东西......

谢谢你的帮助.... :)

4

1 回答 1

-2

请注意,我不知道您的应用程序的详细信息(如果您的方法是正确的),所以我提供一般性建议。

代替:

-- Setting output GPIO pins
multip = {  sc0 = 0,  sc1 = 3,  sc2 = 4 }
for k3,v3 in pairs(multip) do gpio.mode(v3, gpio.OUTPUT) end

您可以使用:

-- Setting output GPIO pins
multip = {{"sc0",0},{"sc1",3},{"sc2",4}}
for k,v in ipairs(multip) do gpio.mode(v[2], gpio.OUTPUT) end

代替:

-- Assigning ADC channels
HIHs = {
        hum1 = {
                sc0 = gpio.HIGH,
                sc1 = gpio.LOW,
                sc2 = gpio.HIGH
        },
        hum2 = {
                sc0 = gpio.LOW,
                sc1 = gpio.HIGH,
                sc2 = gpio.HIGH
        },
        hum3 = {
                sc0 = gpio.HIGH,
                sc1 = gpio.HIGH,
                sc2 = gpio.HIGH
        }
}

你可能想做:

HIHs = {}
-- hum1
HIHs[1] = {}
HIHs[1][1] = gpio.HIGH
HIHs[1][2] = gpio.LOW
HIHs[1][3] = gpio.HIGH
-- hum2
HIHs[2] = {}
HIHs[2][1] = gpio.HIGH
HIHs[2][2] = gpio.LOW
HIHs[2][3] = gpio.HIGH
-- hum3
HIHs[3] = {}
HIHs[3][1] = gpio.HIGH
HIHs[3][2] = gpio.LOW
HIHs[3][3] = gpio.HIGH

通过这种方式,您可以轻松地遍历所选订单:

-- For each HIH
for iHIH=1,#HIHs do
    -- For each sc
    for iSC=1,#HIHs[iHIH] do
        local pin = multip[iSC][2]
        local state = HIH[iHIH][iSC]
        print("Writing pin " .. tostring(pin) .. " to " .. tostring(state))
        gpio.write(pin, state)
    end
end

顺序应该是:

hum1    sc0
hum1    sc1
...
hum3    sc0
hum3    sc2
hum3    sc3
于 2021-04-07T21:23:06.410 回答