Lua 中的多维表

我对 Lua 还不熟悉,我正在尝试创建一个小应用程序来读取 ADC 值。重点是我正在尝试使用以下代码将一个表中的值分配给另一个表,但它确实没有起作用(没有错误,只是什么也没发生):

-- 设置输出 GPIO 引脚
multip = { sc0 = 0, sc1 = 3, sc2 = 4 }
for k3, v3 in pairs(multip) do gpio.mode(v3, gpio.OUTPUT) end

-- 分配 ADC 通道
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
 }
}

-- 顺序访问每个通道并读取值
for g, t in pairs(HIHs) do
 print("---------- 设置湿度传感器 " .. g .. " ----------")
 for k4, v4 in pairs(multip) do
 print("写入引脚 " .. k4 .. " 到 " .. tostring(t[k4]))
 gpio.write(v4, t[k4])
 end
 print("ADC 值: "..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 的理解中确实缺乏非常基础的知识....

感谢任何帮助....:)

点赞
用户4237598
用户4237598

请注意我不知道你的应用细节(如果你的方法是正确的),因此我会给出一般性的建议。

改为:

-- 设置输出 GPIO 引脚
multip = {{"sc0",0},{"sc1",3},{"sc2",4}}
for k,v in ipairs(multip) do gpio.mode(v[2], gpio.OUTPUT) end

改为:

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

这样你可以轻松地按照所选的顺序进行迭代:

-- 对于每个 HIH
for iHIH=1,#HIHs do
    -- 对于每个 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-07 21:23:06