• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь Где ошибка в 10 строках? Lua

Ed007

New member
Всем привет, пытаюсь создать свой скетч .. К рабочему измерителю со2 хочу подцепить 4 светодиода индикации. Но что то идет не так и вместо вывода в консоль уровня на назначенных гпио всё останавливается. Пробовал множество вариантов, в лучшем случае добился в консоли сообщения 1234out: 7 j 0 b и стоп. (Даже не столь важен вывод в консоль - возможно надо было добавить gpio.read, как почему не крутится раз в секунду таймер) Когда добавлял этот блок в рабочий файл, где ppm выводится в консоль постоянно - ничего не изменялось. Если не сложно, дайте совет.
Код:
Init.lua
g=7  --gp13
j=6  --gp12
r=0  --gp16 onlirw
b=4  --gp2 blue onboard
ppm=0 -- уровень со2 от 400 до 2000
gpio.mode(g, gpio.OUTPUT)
gpio.mode(j, gpio.OUTPUT)
gpio.mode(r, gpio.OUTPUT)
gpio.mode(b, gpio.OUTPUT)

function led()
if ppm < 800 then gpio.write(g, gpio.HIGH)
if (ppm - 800) > 0 then gpio.write(j, gpio.HIGH)
if (ppm - 1300) > 0 then gpio.write(r, gpio.HIGH)
if (ppm - 1600) > 0 then gpio.write(b, gpio.HIGH)
          print(" 1234out  : "..g.."..j.."..r.."..b..")
          end
tmr.alarm(1, 1000, 1, function() led() end )
 
Последнее редактирование:

nikolz

Well-known member
Всем привет, пытаюсь создать свой скетч .. К рабочему измерителю со2 хочу подцепить 4 светодиода индикации. Но что то идет не так и вместо вывода в консоль уровня на назначенных гпио всё останавливается. Пробовал множество вариантов, в лучшем случае добился в консоли сообщения 1234out: 7 j 0 b и стоп. (Даже не столь важен вывод в консоль - возможно надо было добавить gpio.read, как почему не крутится раз в секунду таймер) Когда добавлял этот блок в рабочий файл, где ppm выводится в консоль постоянно - ничего не изменялось. Если не сложно, дайте совет.
g=7 --gp13
j=6 --gp12
r=0 --gp16 onlirw
b=4 --gp2 blue onboard
ppm=0 -- уровень со2 от 400 до 2000
gpio.mode(g, gpio_OUTPUT)
gpio.mode(j, gpio_OUTPUT)
gpio.mode(r, gpio_OUTPUT)
gpio.mode(b, gpio_OUTPUT)

function led()
if ppm < 800 then gpio.write(g, gpio.HIGH)
elseif ppm >1600 then gpio.write(b, gpio.HIGH)
elseif ppm >1300 then gpio.write(r, gpio.HIGH)
elseif ppm >=800 then gpio.write(j, gpio.HIGH)
end
print(" 1234out : "..g.."..j.."..r.."..b..")
end
tmr.alarm(1, 1000, 1, function() led() end )
 

Ed007

New member
@nikolz большое спасибо, Ваш скрипт работает. Получается у меня нарушена грамматика if... then.. ? Но я пробовал добавлять else gpio.write(... к каждой строке и все равно таймер стоял. В чем ошибка?
 

nikolz

Well-known member
@nikolz большое спасибо, Ваш скрипт работает. Получается у меня нарушена грамматика if... then.. ? Но я пробовал добавлять else gpio.write(... к каждой строке и все равно таймер стоял. В чем ошибка?
У Вас две ошибки
синтаксис - пропущен end
и логическая (если я правильно понял)
т е у вас ppm >1600 то
b=HIGH
r=HIGH
j=HIGH
----
В моем варианте лишь b=HIGH
============================
если вам надо включить три как у Вас , то поменяйте в моем варианте
if ppm < 800 then gpio.write(g, gpio.HIGH)
elseif ppm >1600 then gpio.write(b, gpio.HIGH)
elseif ppm >1300 then gpio.write(r, gpio.HIGH)
elseif ppm >=800 then gpio.write(j, gpio.HIGH)
end
на ваш в виде:
if ppm < 800 then gpio.write(g, gpio.HIGH) end
if ppm >1600 then gpio.write(b, gpio.HIGH) end
if ppm >1300 then gpio.write(r, gpio.HIGH) end
if ppm >=800 then gpio.write(j, gpio.HIGH) end
 

Юрий Ботов

Moderator
Команда форума
Пардон за то что встреваю в разговор, но ... если всегда gpio.HIGH то все зажжется и никогда (до выключения) не погаснет. Видимо где то надо и gpio.Low ставить? Или это есть в не обсуждаемой здесь части кода?
 

Ed007

New member
@Юрий Ботов приведенный кусочек просто как пример - я пытался понять, где ошибка, почему таймер не молотит. А с логикой горения еще не разбирался - наверное придется добавлять шим. Ну или делать вертикальный линейный индикатор.
@nikolz большое спасибо за помощь!
Видимо проблема неработы была именно в end - я их все посадил в конец программы. С количеством эндов ошибка маловероятна - ноте+ считает)

Нарисовалась еще проблема: как организовать скетчи. Их скопилось уже более 20, в нескольких каталогах. Я в них запутался.
 

nikolz

Well-known member
@Юрий Ботов приведенный кусочек просто как пример - я пытался понять, где ошибка, почему таймер не молотит. А с логикой горения еще не разбирался - наверное придется добавлять шим. Ну или делать вертикальный линейный индикатор.
@nikolz большое спасибо за помощь!
Видимо проблема неработы была именно в end - я их все посадил в конец программы. С количеством эндов ошибка маловероятна - ноте+ считает)

Нарисовалась еще проблема: как организовать скетчи. Их скопилось уже более 20, в нескольких каталогах. Я в них запутался.
Для начала Вы определитесь на чем Вы будете писать
В данных примерах - это луа.
Если в дальнейшем тоже будете все делать на луа, то
1) поищите в соответствующим разделе про nodemcu на этом форуме. Примерно года два назад я писал как я организовывал работу скриптов (так корректнее называть проги на луа)
2) Особенности создания программ в NODEMCU ESP8266 для «интернета вещей»
3) Установите себе SciTe это редактор текста который написан на луа с встроенным отладчиком и транслятором. На нем можно проверять ошибки и отлаживать логику скриптов.
4) Изучите программирование на луа без привязки к ESP и с привязкой на примерах их много.
-------------------------------------------
Если будете писать на дурине скетчи, то изучите дурину и работы со средой программирования на примерах их много.
-----------------------------------------
Если будете писать на СИ, то ставьте UDK (см на форуме) и изучайте СИ и руководство по SDK.
 
Сверху Снизу