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

Как собрать и запрограммировать робота на Arduino(Freeduino, Roboduino, Seeduino ...). Используем Wiring и Processing.

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

Сообщение Sirocco » 17 окт 2012, 23:32

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

Добавлено спустя 5 минут 41 секунду:
P.S. Serial.print - работает, данные выводит
Sirocco
 
Сообщения: 56
Зарегистрирован: 18 фев 2011, 16:35

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

Сообщение NeON79 » 17 окт 2012, 23:33

А можно код заливаемого скетча сюда запостить?
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили “Титаник“
2:5020/2140.1979@fidonet
Аватара пользователя
NeON79
 
Сообщения: 536
Зарегистрирован: 09 май 2011, 16:43
Откуда: Украина, Киев
прог. языки: Нецензурный
ФИО: Евгений НеОН

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" то пять... Почему то с первого символа по три раза.
Sirocco
 
Сообщения: 56
Зарегистрирован: 18 фев 2011, 16:35

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

Сообщение NeON79 » 18 окт 2012, 00:25

Скорости и режимы портов одинаковы? Без добавления строки - работает, как должно?
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили “Титаник“
2:5020/2140.1979@fidonet
Аватара пользователя
NeON79
 
Сообщения: 536
Зарегистрирован: 09 май 2011, 16:43
Откуда: Украина, Киев
прог. языки: Нецензурный
ФИО: Евгений НеОН

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

Сообщение Aquarius » 18 окт 2012, 11:53

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

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

Скорее всего там в конце добавляется <CR><LF> - перенос каретки.
Замените "Serial.println("test");" на "Serial.println(brightness);" - так видно будет что получает ардуина.
Aquarius
 
Сообщения: 59
Зарегистрирован: 13 мар 2012, 12:40
Откуда: Дзержинск
прог. языки: Delphi

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

Сообщение noonv » 18 окт 2012, 21:05

а может вместо строчки "test" выводить brightness? ;)
Аватара пользователя
noonv
 
Сообщения: 600
Зарегистрирован: 21 май 2007, 22:57
Откуда: Калининград
прог. языки: C++

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.
Sirocco
 
Сообщения: 56
Зарегистрирован: 18 фев 2011, 16:35

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

Сообщение noonv » 18 окт 2012, 21:55

вы отправляете символ и соответственно получаете его код 8)
Аватара пользователя
noonv
 
Сообщения: 600
Зарегистрирован: 21 май 2007, 22:57
Откуда: Калининград
прог. языки: C++

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

Сообщение Sirocco » 18 окт 2012, 21:58

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

STOP! Почему я должен получать его код? А ща не обламался, разобрал свой старый проект собранный на меге, там это простейший код работает, и возвращает то, что отправляю не переводя в код. Что не так?
Sirocco
 
Сообщения: 56
Зарегистрирован: 18 фев 2011, 16:35

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

Сообщение noonv » 18 окт 2012, 22:03

char var = '1';
и
char var = 1;
- это две разные вещи :roll:
а 1013 - это \r\n :D
вы как данные отправляете? скрипт бы хоть показали :)
Аватара пользователя
noonv
 
Сообщения: 600
Зарегистрирован: 21 май 2007, 22:57
Откуда: Калининград
прог. языки: C++

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
Sirocco
 
Сообщения: 56
Зарегистрирован: 18 фев 2011, 16:35

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

Сообщение SkyStorm » 19 окт 2012, 00:33

Гы - Гы
Символ 1 не равен цифре 1 :)
Если это ничего не говорит, то может стоит остановится и подумать
Никто кроме нас!!!
4Robots.ru - Все для роботов!
Аватара пользователя
SkyStorm
 
Сообщения: 2687
Зарегистрирован: 05 фев 2008, 15:33
Откуда: St. Petersburg - Moscow
Skype: SkyStorm77
ФИО: Костюк Константин Вячеславович

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

Сообщение Sirocco » 19 окт 2012, 00:37

Останавливаться не стоит в любом случае.
Sirocco
 
Сообщения: 56
Зарегистрирован: 18 фев 2011, 16:35

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:
Аватара пользователя
noonv
 
Сообщения: 600
Зарегистрирован: 21 май 2007, 22:57
Откуда: Калининград
прог. языки: C++

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" я бы сам написал тот скетч, который мне нужен.
Sirocco
 
Сообщения: 56
Зарегистрирован: 18 фев 2011, 16:35

След.

Вернуться в Arduino и другие Xduino

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20