Linux & Arduino

Тема в разделе "Arduino & Shields", создана пользователем Stulikov, 10 авг 2011.

  1. Stulikov

    Stulikov Нуб

    Здравствуйте, у меня такая проблема: не могу отправить данные на Arduino. При попытке что-либо записать в СОМ-порт происходит перезагрузка контроллера, но после того, как в Arduino IDE я открываю Serial Monitor, программа на C начинает работать ровно так, как должна. Я не знаю кто виновен, но подозрения падают на программу, точнее на то, что я как-то неправильно начинаю работать с платой, инициализирую что-ли не так. Код на С. Пробовал осуществить запись, как описано тут, но, опять-таки, плата вылетает в перезагрузку.

    Ubuntu 11.04; gcc-4.5;

    Заранее благодарю
     
  2. nailxx

    nailxx Официальный Нерд Администратор

    Сложно сказать навскидку в чём проблема. У меня есть пара мыслей. На официальном форуме есть тред, где обсуждается некая проблема коммуникации из C. Код в итоге у товарищей заработал и попытавшись найти 10 отличий от вашего, я увидел, что они не выставляют флаг O_NDELAY в инициализации файла-порта:

    Код (Text):
    fd = open(serialport, O_RDWR | O_NOCTTY | O_NDELAY);
    Попробуйте убрать?

    И ещё стало любопытно наблюдение того, что когда открыт Serial Monitor, всё ОК. А попробуйте, не открывая IDE, запустить какой-нибудь не родной Serial Monitor. Например picocom

    Код (Text):
    picocom /dev/ttyACM0 -b 9600 -l
     
  3. Stulikov

    Stulikov Нуб

    Попробовал убрать O_NDELAY - результат тот же, а вот с picocom:

    Код (Text):
    picocom v1.4

    port is        : /dev/ttyACM0
    flowcontrol    : none
    baudrate is    : 9600
    parity is      : none
    databits are   : 8
    escape is      : C-a
    noinit is      : no
    noreset is     : no
    nolock is      : yes
    send_cmd is    : ascii_xfr -s -v -l10
    receive_cmd is : rz -vv

    Terminal ready
    Как при вводе в picocom, так и при запуске кода на С при открытом picocom'e желаемый результат достигается.

    *ушел изучать трэд*
     
  4. kvetal

    kvetal Нуб

    Здравствуйте.
    Столкнулся с такой же проблемой, как решилось?
    PS:Знаю что некропостер, но надеюсь на помощь.
     
  5. Benny_Ray

    Benny_Ray Нерд

    Давно столкнулся с такой проблемой решений несколько, самое простое это на arduino соединить вывод RESET и GND конденсатором 10 мкФ