Arduino Polska Forum

Pełna wersja: NodeMCU - opóźnienie wyłączenia wyjścia
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam

Chciałbym prosić o przerobienie kodu lua do NodeMCU v3.
Bazuje na:
Kod:
wifi.setmode(wifi.STATION)
wifi.sta.config("ROUTER_ESSID","WIFI_PASSWORD")
print(wifi.sta.getip())
led1 = 3
led2 = 4
gpio.mode(led1, gpio.OUTPUT)
gpio.mode(led2, gpio.OUTPUT)
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
    conn:on("receive", function(client,request)
        local buf = "";
        local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");
        if(method == nil)then
            _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP");
        end
        local _GET = {}
        if (vars ~= nil)then
            for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do
                _GET[k] = v
            end
        end
        buf = buf.."<h1> ESP8266 Web Server</h1>";
        buf = buf.."<p>GPIO0 <a href=\"?pin=ON1\"><button>ON</button></a>&nbsp;<a href=\"?pin=OFF1\"><button>OFF</button></a></p>";
        buf = buf.."<p>GPIO2 <a href=\"?pin=ON2\"><button>ON</button></a>&nbsp;<a href=\"?pin=OFF2\"><button>OFF</button></a></p>";
        local _on,_off = "",""
        if(_GET.pin == "ON1")then
            gpio.write(led1, gpio.HIGH);
        elseif(_GET.pin == "OFF1")then
            gpio.write(led1, gpio.LOW);
        elseif(_GET.pin == "ON2")then
            gpio.write(led2, gpio.HIGH);
        elseif(_GET.pin == "OFF2")then
            gpio.write(led2, gpio.LOW);
        end
        client:send(buf);
        client:close();
        collectgarbage();
    end)
end)
Chciałbym dołożyć sterowanie wyjściami na podstawie wejść. Oraz automatyczne wyłączenie wyjść po czasie np. 30 sekundach. Jak to się robi w .lua? Jakiś proces?
(18-03-2016, 14:22)fulus napisał(a): [ -> ]Chciałbym dołożyć sterowanie wyjściami na podstawie wejść.
sterowac pwm czy cyfrowo
(18-03-2016, 21:50)adix napisał(a): [ -> ]
(18-03-2016, 14:22)fulus napisał(a): [ -> ]Chciałbym dołożyć sterowanie wyjściami na podstawie wejść.
sterowac  pwm czy cyfrowo

Cyfrowo. Załączanie przekaźników
Witam

Próbowałem uruchomić sterowanie tymi samymi wyjściami dla powyższego przykładu niestety bez sukcesu. Zastosowałem interrupt ale stan wyjść się nie zmienia. Podejrzewam, że funkcja wysyłająca stan wyjść z www nadpisuje mi wyjścia.
Czy mogę ją uzależnić od jeszcze jednego wejścia fizycznego. W którym miejscu zrobić if? Oczywiście nie chciałbym zamykać połączenia z serwerem, ale aby wyświetlił się napis na www: "sterowanie lokalne"

Kod:
wifi.setmode(wifi.STATION)
wifi.sta.config("AndroidAP","00000000")
print(wifi.sta.getip())
led1 = 8
led2 = 2
led3 = 1
s1 = 4

gpio.mode(led1, gpio.OUTPUT)
gpio.mode(led2, gpio.OUTPUT)

gpio.mode(s1, gpio.INT)

gpio.mode(led3, gpio.OUTPUT)

srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
 conn:on("receive", function(client,request)
     local buf = "";
     local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");
     if(method == nil)then
         _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP");
     end
     local _GET = {}
     if (vars ~= nil)then
         for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do
             _GET[k] = v
         end
     end
     buf = buf.."<h1> ESP8266 Web </h1>";
     buf = buf.."<p>GPIO0 <a href=\"?pin=ON1\"><button>ON</button></a>&nbsp;<a href=\"?pin=OFF1\"><button>OFF</button></a></p>";
     buf = buf.."<p>GPIO2 <a href=\"?pin=ON2\"><button>ON</button></a>&nbsp;<a href=\"?pin=OFF2\"><button>OFF</button></a></p>";
     local _on,_off = "",""
     if(_GET.pin == "ON1")then
           gpio.write(led1, gpio.HIGH);
     elseif(_GET.pin == "OFF1")then
           gpio.write(led1, gpio.LOW);
     elseif(_GET.pin == "ON2")then
           gpio.write(led2, gpio.HIGH);
     elseif(_GET.pin == "OFF2")then
           gpio.write(led2, gpio.LOW);
     end
     client:send(buf);
     client:close();
     collectgarbage();
   
 end)
end)


 function onChange ()
   gpio.write(led1, gpio.LOW);
   print('The pin value has changed to '..gpio.read(s1))  
 end

 function debounce (func)
   local last = 0
   local delay = 200000

   return function (...)
       local now = tmr.now()
       if now - last < delay then return end

       last = now
       return func(...)
   end
end

gpio.trig(pin, 'both', debounce(onChange))