У меня возможно глупый вопрос и плохо сформированный.. Серверная часть написана на python, которая по serial порту передает некие данные, на arduino залит счетч, который читает данные с serial порта и включает/выключает светоиод. Проблема в том, что все работает, но только когда запущен Монитор порта в arduino ide, при этом tx и rx светодиоды реагируют на передачу данных и без запущенного Монитора порта. Почему так происходит?
Мало что понял но попробую ответить.RX/TX светодиоды на плате мигают только тогда когда идёт приём/передача сигнала по USART (линии RX/TX) и монитор порта здесь не при чём есть только сам факт передачи/приёма данных.Если же Вам надо увидеть что именно идёт по линиям RX/TX тогда используется монитор порта
если судить по Монитору порта, то идет то, что нужно. Проблема в том, что arduino реагирует на то что нужно только при запущенном Мониторе порта
Ну значит всё нормально мерцают значит идёт обмен по линиям RX/TX (только что проверил на своей УНЕ) всё так и должно быть а в чём проблема то?
Код (Python): #! /usr/bin/python3 #coding: utf-8 import serial import time SERIAL_PORT = '/dev/ttyACM0' SERIAL_SPEED = 9600 ser = serial.Serial(SERIAL_PORT, SERIAL_SPEED, dsrdtr = 1,timeout = 0) def ledON(): ser.write('1') time.sleep(3); print('led ON') ledON() ser.write("0") print 'led OFF' ser.close() Код (C++): int ledPin = A0; void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); } void loop() { while (Serial.available() == 0); int val = Serial.read() - '0'; if (val == 1) { digitalWrite(ledPin, HIGH); } else if (val == 0) { digitalWrite(ledPin, LOW); } }
пытаюсь включать выключать светодиод с питона. Светодиод включается и выключается при передачи данных с питона, только когда запущен Монитор порта, без него светодиод не реагирует.
Понятно.В Питоне не силён но по части Ардуино скетч написан грамотно тут больше ничего не придумать.Протестил Ваш скетч на своей УНЕ данные передавал через терминальную программу-всё работает RX/TX в момент передачи мерцают светодиод зажигается/гаснет по команде.Так что все вопросы к Питону
Светодиод я включал на 13 ноге тот что на плате Код (C++): int ledPin = 13; void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); } void loop() { while (Serial.available() == 0); int val = Serial.read() - '0'; if (val == 1) { digitalWrite(ledPin, HIGH); } else if (val == 0) { digitalWrite(ledPin, LOW); } }
13 я так же попробовал, так же реагирует только с Монитором порта. Возможно поищу альтернативу на расбери питону.
Что смущает в питоновском коде: зачем 'dsrdtr = 1' -- ведь в Вашем случае нет аппаратного контроля сигналов.
http://ru-arduino.livejournal.com/57827.html?page=1 вот тут вроде как с похожей проблемой сталкивались
Или я чего то недопонимаю, но когда сериал порт открыт какой нибудь программой, Монитором порта подключится не возможно. Или вы программу на python закрываете, а вручную с монитора 1 и 0 посылаете?
скрипт на питоне запускаю руками, а порядок использую такой.. открываю монитор порта, запускаю скрипт - все ок, светодиод горит 3 сек, гаснет. Если не запускаю монитор порта, то светодиод не реагирует при запуске скрипта питон.