Ардуино + питон + pyfirmata ))


import pyfirmata
import time

port = 'COM4'
board = pyfirmata.Arduino(port)

board.digital[4].mode = pyfirmata.OUTPUT
board.digital[3].mode = pyfirmata.OUTPUT
board.digital[7].mode = pyfirmata.OUTPUT
board.digital[2].mode = pyfirmata.INPUT


while True:
    board.digital[2].read()
    print(board.digital[2].read())
    if board.digital[2].read() == 1:
        board.digital[7].write(0)
        board.digital[4].write(1)
        time.sleep(0.5)
        board.digital[4].write(0)
        time.sleep(0.02)
        board.digital[3].write(1)
        time.sleep(0.5)
        board.digital[3].write(0)
    else:
        board.digital[7].write(1)

Выводит: None

При нажатие на кнопку должны моргать красные лампочки. А они не моргают. Зленая должна гореть при не нажатой кнопке (что она и делает), а при нажатие потухать. Я не уверен но по моему я не правильно считал с кнопки, потому что значение выводит None.

Значит работает.
Хотя нынче модно синюю индикатором делать.

Так кнопка не нажата, так и должно быть.

я нажимал не моргаю

Значит надо поэтапно опытничать - сначала проверить кнопку, заменив нажатие проводником. Потом в 16 строке 1 заменить на 0 в условии и посмотреть, подумать.

Я не уверен но по моему я не правильно считал с кнопки, потому что значение выводит None.

Тут я не помогу :slight_smile: Попробуй на С++. Знающие дядьки глянут и помогут.

я от C++ уходил. так как знаю языка но вино зря уходил.

Надо вернуться и проверить виноват язык или железо.

железо проверенное.

Тогда ждём знающих.

В 11 строку, после определения режима пинов, и перед while, вставьте

it = pyfirmata.util.Iterator(board)  
it.start() 

Если не сработает, кнопку попробуйте на 90 градусов повернуть на макетке.

1 лайк

Спасибо. А можете пожалуйста объяснить эти строчки?

Я так полагаю, что они запускают поток, который вычитывает данные из последовательного порта, чтобы read() смог нормально работать.

1 лайк