Python и Serial(Решено)

Тема в разделе "Arduino & Shields", создана пользователем atvitek, 6 янв 2016.

  1. atvitek

    atvitek Нуб

    У меня возможно глупый вопрос и плохо сформированный.. Серверная часть написана на python, которая по serial порту передает некие данные, на arduino залит счетч, который читает данные с serial порта и включает/выключает светоиод. Проблема в том, что все работает, но только когда запущен Монитор порта в arduino ide, при этом tx и rx светодиоды реагируют на передачу данных и без запущенного Монитора порта. Почему так происходит?
     
    Последнее редактирование: 6 янв 2016
  2. AlexU

    AlexU Гуру

    Что за Arduino?
     
  3. Airbus

    Airbus Радиохулиган Модератор

    Мало что понял но попробую ответить.RX/TX светодиоды на плате мигают только тогда когда идёт приём/передача сигнала по USART (линии RX/TX) и монитор порта здесь не при чём есть только сам факт передачи/приёма данных.Если же Вам надо увидеть что именно идёт по линиям RX/TX тогда используется монитор порта
     
  4. atvitek

    atvitek Нуб

    Arduino Uno не Китай
     
  5. atvitek

    atvitek Нуб

    если судить по Монитору порта, то идет то, что нужно. Проблема в том, что arduino реагирует на то что нужно только при запущенном Мониторе порта
     
  6. Airbus

    Airbus Радиохулиган Модератор

    То есть при загрузке скетча например (без открытия Монитора порта)светодиоды RX/TX не мерцают?
     
  7. atvitek

    atvitek Нуб

    мерцают, а так же мерцают когда с python отправляю данные по serial.
     
  8. Airbus

    Airbus Радиохулиган Модератор

    Ну значит всё нормально мерцают значит идёт обмен по линиям RX/TX (только что проверил на своей УНЕ) всё так и должно быть а в чём проблема то?
     
  9. atvitek

    atvitek Нуб

    Код (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);
      }
    }
     
  10. atvitek

    atvitek Нуб

    пытаюсь включать выключать светодиод с питона. Светодиод включается и выключается при передачи данных с питона, только когда запущен Монитор порта, без него светодиод не реагирует.
     
  11. atvitek

    atvitek Нуб

    Поменять попробовал пин с А0 на 4.. но тоже не помогло.
     
  12. Airbus

    Airbus Радиохулиган Модератор

    Понятно.В Питоне не силён но по части Ардуино скетч написан грамотно тут больше ничего не придумать.Протестил Ваш скетч на своей УНЕ данные передавал через терминальную программу-всё работает RX/TX в момент передачи мерцают светодиод зажигается/гаснет по команде.Так что все вопросы к Питону
     
  13. Airbus

    Airbus Радиохулиган Модератор

    Светодиод я включал на 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);
      }
    }
     
  14. atvitek

    atvitek Нуб

    Понятно.. буду гуглить дальше в сторону python. )
     
  15. atvitek

    atvitek Нуб

    13 я так же попробовал, так же реагирует только с Монитором порта. Возможно поищу альтернативу на расбери питону.
     
  16. AlexU

    AlexU Гуру

    Что смущает в питоновском коде: зачем 'dsrdtr = 1' -- ведь в Вашем случае нет аппаратного контроля сигналов.
     
  17. atvitek

    atvitek Нуб

    без этого параметра результат тот же, я просто разные варианты пробовал. Пробовал python2.7 и 3.4..
     
  18. atvitek

    atvitek Нуб

    http://ru-arduino.livejournal.com/57827.html?page=1 вот тут вроде как с похожей проблемой сталкивались
     
  19. shpock

    shpock Гик

    Или я чего то недопонимаю, но когда сериал порт открыт какой нибудь программой, Монитором порта подключится не возможно. Или вы программу на python закрываете, а вручную с монитора 1 и 0 посылаете?
     
  20. atvitek

    atvitek Нуб

    скрипт на питоне запускаю руками, а порядок использую такой.. открываю монитор порта, запускаю скрипт - все ок, светодиод горит 3 сек, гаснет. Если не запускаю монитор порта, то светодиод не реагирует при запуске скрипта питон.