roboforum.ru

Технический форум по робототехнике.

Ардуино не принимает данные из Com

Ардуино не принимает данные из Com

Sirocco » 17 окт 2012, 23:32

Привет. У меня Freeduino Nano v5, вот она же.
Когда заливаю примеры скетчей из состава Arduino IDE, например "Dimmer", и пытаюсь отправлять в порт на ардуино значения, от 0 до 255, ничего не происходит, светодиод загорается, повешенный на пин, но не выключается, и яркость не меняет. Диоды RX TX еле еле вспыхивают. А когда заливаю скетч, моргают ярко. Пробовал посылать команды на Rx Tx ардуины, но с этим скетчем также не реагирует. Что может быть? Скетчи заливаются нормально, хотя в начале не заливались, но после того как пропаял резисторы на плате, стало заливаться.
Скорости портов согласованны. Варианты плат в настройках пробовал разные.

Добавлено спустя 5 минут 41 секунду:
P.S. Serial.print - работает, данные выводит

Re: Ардуино не принимает данные из Com

NeON79 » 17 окт 2012, 23:33

А можно код заливаемого скетча сюда запостить?

Re: Ардуино не принимает данные из Com

Sirocco » 17 окт 2012, 23:52

NeON79 писал(а):А можно код заливаемого скетча сюда запостить?

Код: Выделить всёРазвернуть
const int ledPin = 9;
void setup()
{
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  byte brightness;
  if (Serial.available()) {
    // read the most recent byte (which will be from 0 to 255):
    brightness = Serial.read();
    // set the brightness of the LED:
    analogWrite(ledPin, brightness);
    Serial.println("test");
  }
}

Я добавил только строку "Serial.println("test");" Всё остальное - пример в програме, вроде как у всех работает.
Ещё, почему, если отсылаю "1", то "test" выводится один раз, если 111, то три, и так далее..?

Добавлено спустя 2 минуты 27 секунд:
А если отправляю единицу с роутера (на Rx Tx ардуино) то выводится три раза, если две единицы, то шесть, короче троекратно почему то.

Добавлено спустя 4 минуты 16 секунд:
Нет, ошибся. Если отправляю "1", то выводится три раза, если "11", то 4, если "111" то пять... Почему то с первого символа по три раза.

Re: Ардуино не принимает данные из Com

NeON79 » 18 окт 2012, 00:25

Скорости и режимы портов одинаковы? Без добавления строки - работает, как должно?

Re: Ардуино не принимает данные из Com

Aquarius » 18 окт 2012, 11:53

Sirocco писал(а):А если отправляю единицу с роутера (на Rx Tx ардуино) то выводится три раза, если две единицы, то шесть, короче троекратно почему то.

Нет, ошибся. Если отправляю "1", то выводится три раза, если "11", то 4, если "111" то пять... Почему то с первого символа по три раза.

Скорее всего там в конце добавляется <CR><LF> - перенос каретки.
Замените "Serial.println("test");" на "Serial.println(brightness);" - так видно будет что получает ардуина.

Re: Ардуино не принимает данные из Com

noonv » 18 окт 2012, 21:05

а может вместо строчки "test" выводить brightness? ;)

Re: Ардуино не принимает данные из Com

Sirocco » 18 окт 2012, 21:54

Aquarius писал(а):Скорее всего там в конце добавляется <CR><LF> - перенос каретки.

Не. Там есть варианты: "Без окончания строки", "Новая строка(NL)", "Возврат каретки (CR)","NL и CR вместе"
У меня стоит вариант "Без окончания строки"
Aquarius писал(а):Замените "Serial.println("test");" на "Serial.println(brightness);" - так видно будет что получает ардуина.

Точно! Как же не догадался!
Странно:
Отправляю Получаю
0_______________48
000_____________484848
1_______________49
a_______________97
A_______________65
Чё эт так? Как избежать? Где подправить?

Добавлено спустя 8 минут 8 секунд:
Если отправляю через роутер, то в ответ приходит тоже самое, но всегда добавляются 10 13. Что это? Откуда может взяться? Зачем оно? Как убрать? Если пустой запрос отправить, приходит просто 1013.

Re: Ардуино не принимает данные из Com

noonv » 18 окт 2012, 21:55

вы отправляете символ и соответственно получаете его код 8)

Re: Ардуино не принимает данные из Com

Sirocco » 18 окт 2012, 21:58

noonv писал(а):вы отправляете символ и соответственно получаете его код 8)

STOP! Почему я должен получать его код? А ща не обламался, разобрал свой старый проект собранный на меге, там это простейший код работает, и возвращает то, что отправляю не переводя в код. Что не так?

Re: Ардуино не принимает данные из Com

noonv » 18 окт 2012, 22:03

char var = '1';
и
char var = 1;
- это две разные вещи :roll:
а 1013 - это \r\n :D
вы как данные отправляете? скрипт бы хоть показали :)

Re: Ардуино не принимает данные из Com

Sirocco » 18 окт 2012, 23:47

noonv писал(а):char var = '1';
и
char var = 1;
- это две разные вещи :roll:

Мне это ни о чём не говорит. Я в своём коде этого не вижу.
noonv писал(а):а 1013 - это \r\n :D
вы как данные отправляете? скрипт бы хоть показали :)

Если через комп, то через вот это окошко, без каких-либо скриптов:

Добавлено спустя 1 минуту 51 секунду:
А с роутера когда отправляю...Бог его знает, где там какие скрипты, делаю всё по этому проекту http://habrahabr.ru/post/153017/, но не выходит...

Добавлено спустя 1 час 28 минут 56 секунд:
Продолжаю эксперименты... Если использовать версию 0018 программы Arduino, и ниже, то после прошивки из неё с символами всё ок, даже если потом следить за портом из новой версии. Но скетч всё равно не работает (((
Вложения
df.png

Re: Ардуино не принимает данные из Com

SkyStorm » 19 окт 2012, 00:33

Гы - Гы
Символ 1 не равен цифре 1 :)
Если это ничего не говорит, то может стоит остановится и подумать

Re: Ардуино не принимает данные из Com

Sirocco » 19 окт 2012, 00:37

Останавливаться не стоит в любом случае.

Re: Ардуино не принимает данные из Com

noonv » 19 окт 2012, 08:23

Sirocco писал(а):Бог его знает, где там какие скрипты, делаю всё по этому проекту http://habrahabr.ru/post/153017/, но не выходит...

там же написано:
Я не стал заморачиваться и назначил для управления всем нам известные кнопки “A”,”S”,”D”,”W”, то есть если например МК получает байт «W» (0x57) он установит единицу на ноге к которой припаян провод отвечающий за движение вперед и т.д.
...
скрипты обрабатывающие нажатие кнопок в вебинтерфейсе теперь посылают “A”,”S”,”D”,”W” в зависимости от нажатой кнопки. А сам скрипт который занимается отправкой перенаправлен на внутренний UART роутера.

скрипт посылает в порт символ, а значит и ловить нужно символ.
автор даже это явно указал -
«W» (0x57)


Sirocco писал(а):Мне это ни о чём не говорит. Я в своём коде этого не вижу.

:good:

Re: Ардуино не принимает данные из Com

Sirocco » 20 окт 2012, 13:08

:-o
И так, с начала: в первом сообщении я пишу о проблеме (собственно это первостепенное, что меня интересует). Подробно написал, что отправляю одно, а приходит другое, яркость не меняется. Код выложил. Чуть позже я пробую тоже самое, но из более раннего компилятора, и что мы видим? О боже! приходит то, что отправляю!, но яркость не меняется! Мой вопрос - ПОЧЕМУ? Да, вы можете приводить примеры, что char var = '1'; и char var = 1; это совершенно разные вещи... Но почему с другой железкой этот код работает, а с этой нет, никто не объяснил до сих пор. То есть делаю вывод, что для Atmega328 это разные вещи, а для Atmega1280 одно и тоже, так как она работает с этим кодом. Ну а чо, вразумительно никто другого не объяснил.
А теперь к проблеме №2:
noonv писал(а):
Sirocco писал(а):Бог его знает, где там какие скрипты, делаю всё по этому проекту http://habrahabr.ru/post/153017/, но не выходит...

там же написано:
Я не стал заморачиваться и назначил для управления всем нам известные кнопки “A”,”S”,”D”,”W”, то есть если например МК получает байт «W» (0x57) он установит единицу на ноге к которой припаян провод отвечающий за движение вперед и т.д.
...
скрипты обрабатывающие нажатие кнопок в вебинтерфейсе теперь посылают “A”,”S”,”D”,”W” в зависимости от нажатой кнопки. А сам скрипт который занимается отправкой перенаправлен на внутренний UART роутера.

скрипт посылает в порт символ, а значит и ловить нужно символ.
автор даже это явно указал -
«W» (0x57)


Sirocco писал(а):Мне это ни о чём не говорит. Я в своём коде этого не вижу.

:good:

Да, я пытаюсь ТУПО скопировать проект, как там описано, и гарантированно, что всё работает. И отправляется там символ, и скетч там совершенно другой, не имеющий отношения к первому, и ловит этот скетч тоже символ.
Код: Выделить всёРазвернуть

int led = 13;
boolean laight = 0;
int incomingByte = 0;
int action = 0;

void setup() {
  Serial.begin(57600);
 
  pinMode(13, OUTPUT);
  pinMode(4, OUTPUT); //light
  pinMode(5, OUTPUT); // шим 1
  pinMode(6, OUTPUT); // шим 2
  pinMode(7, OUTPUT); // 11
  pinMode(8, OUTPUT); // 12
  pinMode(11, OUTPUT); // 21
  pinMode(12, OUTPUT); // 22
}

void loop() {
 
  //Serial.print("1");
 
  if (Serial.available() > 0) {  //если есть доступные данные// считываем байт
        incomingByte = Serial.read();
        // отсылаем то, что получили
        digitalWrite(13, HIGH);
       
        if(incomingByte == 97) // A
          action = 7;
        if(incomingByte == 100) // D
          action = 8;
        if(incomingByte == 115) // S
          action = 11;
        if(incomingByte == 119) // W
          action = 12;
        if(incomingByte == 108) // L
          laight=!laight; 
                                 
        digitalWrite(4, laight);
                   
        //analogWrite(8, 255);
        //analogWrite(9, 255);
               
        digitalWrite(5, HIGH);
        digitalWrite(6, HIGH);
               
        digitalWrite(action, HIGH);
        delay(250);
        digitalWrite(action, LOW);
       
        action = 0;
       
        digitalWrite(5, LOW);
        digitalWrite(6, LOW);
       
        digitalWrite(13, LOW);
                         
        Serial.print("250: ");
        Serial.println(incomingByte, DEC);
    }
               
}

А если точнее, то должен ловить, но ему чисто пофиг, я любой символ отправляю, и все описанные порты на какое то время выдают единицу на выходе, а не тот, который должен исходя из кода. И передача длиться до пяти секунд. Откуда-то берётся куча мусора, которая пробегает через RxTx.
Кстати, скрипт отправки символа тоже есть, не я его писал. И вобще, мне бы с первой проблемой разобраться, а уж на основе скетча "Dimmer" я бы сам написал тот скетч, который мне нужен.


Rambler\'s Top100 Mail.ru counter