roboforum.ru

Технический форум по робототехнике.
Текущее время: 28 фев 2025, 04:00

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Ардуино не принимает данные из Com
СообщениеДобавлено: 20 окт 2012, 14:21 
Не в сети
Аватара пользователя

Зарегистрирован: 05 фев 2008, 15:33
Сообщения: 2687
Откуда: St. Petersburg - Moscow
Skype: SkyStorm77
ФИО: Костюк Константин Вячеславович
- В первом сообщении написано что Serial.print работает - т.е. с портами, настройками и железом все ОК.
- Но яркость не меняется! Мой вопрос - ПОЧЕМУ? - да много почему может быть. Схема рабочая? Диод правильно подключен? У людей которые не хотят думать такое часто бывает.
- То есть делаю вывод, что для Atmega328 это разные вещи, а для Atmega1280 - Да это разные контроллеры и есть специфика, но в случае если это пин 9 то должно работать.


Проверить работает ли диод при его прямом управлении без Serial
- digitalWrite
- analogWrite

_________________
Никто кроме нас!!!
4Robots.ru - Все для роботов!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ардуино не принимает данные из Com
СообщениеДобавлено: 21 окт 2012, 01:01 
Не в сети

Зарегистрирован: 18 фев 2011, 16:35
Сообщения: 56
SkyStorm писал(а):
Проверить работает ли диод при его прямом управлении без Serial
- digitalWrite
- analogWrite

Ну естественно работает диод. Даже более того, работает данный пин, выставлял на нём разную яркость через analogWrite.
Не, мне интересно, что, ни у кого нет больше ардуины на ATmega328? Я вторую сегодня надыбал, на ней тоже не работает. А ведь это стандартный скетч от самих разработчиков данной железки, которые гарантируют его правильность.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ардуино не принимает данные из Com
СообщениеДобавлено: 22 окт 2012, 14:16 
Не в сети
Аватара пользователя

Зарегистрирован: 05 фев 2008, 15:33
Сообщения: 2687
Откуда: St. Petersburg - Moscow
Skype: SkyStorm77
ФИО: Костюк Константин Вячеславович
У меня есть штук 100 их. А вот времени нет.
Заинтриговал :) Вечером посмотрю :)

_________________
Никто кроме нас!!!
4Robots.ru - Все для роботов!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ардуино не принимает данные из Com
СообщениеДобавлено: 23 окт 2012, 00:43 
Не в сети

Зарегистрирован: 18 фев 2011, 16:35
Сообщения: 56
Привет! Есть такой код:
Код:

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

void setup() {
  Serial.begin(9600);
  pinMode(4, OUTPUT); //light
  pinMode(7, OUTPUT); // 11
  pinMode(8, OUTPUT); // 12
  pinMode(11, OUTPUT); // 21
  pinMode(12, OUTPUT); // 22
}

void loop() {

  if (Serial.available() >0 ) {  //если есть доступные данные// считываем байт
        incomingByte = Serial.read();
     
        if(incomingByte == 97) // a
          action = 7;
        if(incomingByte == 65) // 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);
           
        digitalWrite(action, HIGH);
        delay(100);
        digitalWrite(action, LOW);
        action = 0;
    }
}

Суть, понятна, думаю. Отправляем значение, Ардуино парсит его, в случае с четвёртым пином меняет его состояние на противоположное, в других случаях на 100 милисек выставляет высокий уровень на пине, соответствующем значению action, которое в свою очередь назначено распарсенному символу. Всё, вроде бы ок, и должно работать. Работает, если отправляю значения в порт через ардуино ide. Но, если отправлять значение из роутера, то происходит какая-то задержка, всегда равная установленному delay. А именно,когда пин HIGH, потом задержка, потом пин LOW, а потом, если сразу же послать команду (или слать непрерывно) пин не сразу переходит в HIGH, а через указанное delay. Такое только когда с роутера данные отправляю. Пробовал разные задержки ставить, до пяти сек, delay почемуто повторяется ещё раз. Это первая проблема.
Второе, если долго держать кнопку (а скетч не так быстро выполняется, как передаются данные), то происходит накопление комманд в ардуино, и после снятия воздействия (отпускания кнопки) эти комманды ещё долгое время выполняются, так долго, как долго держал кнопку. Это не приемлемо, так как эти кнопки - кнопки управления движением машинки, и получается, чтобы ей управлять, нужно либо постоянно тыкать на кнопку, как бы пошагово выполняя движение, (нажал кратковременно, отпустил, она поехала, остановилась, как остановилась, снова нажал, и т.д.) либо если держать, то это накопится в буфере ардуино, и потом эту машинку долго не остановишь. Вопрос, как решить эту проблему? Как-то можно каждый цикл очищать буфер комманд, ну или каждый n- цикл.
P.S. Я всё о том проекте: http://habrahabr.ru/post/153017/ , все скрипты и код отсюда.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ардуино не принимает данные из Com
СообщениеДобавлено: 23 окт 2012, 15:35 
Не в сети
Аватара пользователя

Зарегистрирован: 21 май 2007, 22:57
Сообщения: 600
Откуда: Калининград
прог. языки: C++
а если после считывания принятого байта:
Код:
incomingByte = Serial.read();

добавить проверку:
Код:
if(incomingByte<0) return;

_________________
RoboCraft.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ардуино не принимает данные из Com
СообщениеДобавлено: 23 окт 2012, 17:09 
Не в сети
Аватара пользователя

Зарегистрирован: 05 фев 2008, 15:33
Сообщения: 2687
Откуда: St. Petersburg - Moscow
Skype: SkyStorm77
ФИО: Костюк Константин Вячеславович
Попробовал Dimmer из стандартных примеров на pin9 - Все работает.
Плата Arduino Pro 5V/16Mhz

_________________
Никто кроме нас!!!
4Robots.ru - Все для роботов!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ардуино не принимает данные из Com
СообщениеДобавлено: 23 окт 2012, 18:40 
Не в сети

Зарегистрирован: 18 фев 2011, 16:35
Сообщения: 56
noonv писал(а):
а если после считывания принятого байта:
Код:
incomingByte = Serial.read();

добавить проверку:
Код:
if(incomingByte<0) return;

Не меняет ситуации... Откуда берётся эта задержка?

Добавлено спустя 7 минут 19 секунд:
SkyStorm писал(а):
Попробовал Dimmer из стандартных примеров на pin9 - Все работает.
Плата Arduino Pro 5V/16Mhz

А у меня вот не работает, на двух платах. Парадокс. Ну как не работает... Работает так: отправляю ноль, на пине должен быть ноль. А на пине устанавливается не ноль, а 48. То есть отправляется не символ, а код. Если отправляю "а", то на пине ставится уровень 97, диод светится ярче. Чё за хрень? Почему может не работать? Как добиться того, чтоб отправлялось то, что надо? И почему оно где-то у кого-то нормально отправляется, а у меня нет. На всякий случай: Windows 7 64 bit RU, Arduino IDE от 0018 до 1,0,1.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ардуино не принимает данные из Com
СообщениеДобавлено: 23 окт 2012, 18:44 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
код символов: "а" 160, "a" 97, "0" 48. :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ардуино не принимает данные из Com
СообщениеДобавлено: 23 окт 2012, 18:58 
Не в сети

Зарегистрирован: 18 фев 2011, 16:35
Сообщения: 56
noonv писал(а):
добавить проверку:
Код:
if(incomingByte<0) return;

Допёр, блин... Дело было вот в чём: при отправке из роутера отправляется ещё 10 13.
Добавил
Код:
if(incomingByte<14) return;

и задержка исчезла.
Так как не знаю, как убрать отправку из роутера "10" и "13", то собираюсь исключить их обработку в ардуино.
Так корректно будет, или есть способ лучше/правильнее?:
Код:
if(incomingByte=10) return;
if(incomingByte=13) return;


Добавлено спустя 3 минуты 19 секунд:
Angel71 писал(а):
код символов: "а" 160, "a" 97, "0" 48. :)

Это я уже понял, пока пытался догнать как мне всё таки отправлять стандартное "160", и чтобы оно приняло эти "160". А не отправлять "а", чтобы дошло "160". Так и не понял, почему происходит конвертация и как её избежать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ардуино не принимает данные из Com
СообщениеДобавлено: 23 окт 2012, 19:00 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
10 13 это возврат каретки и переход на новую строку.
если меня не клинит, оболочка на процессинге. а процессинг это ява. ява это значит, что можно отправлять именно так, как нужно. шучу, почти. :) на самом деле есть такое гроооооомаднейшее предположение, что у вас в скетче (или как оно там у вас называется в этом "dimmer") вы данные не из кода отсылаете, а из этого чудного окошка
Изображение
и весь этот гимор до смешного легко лечится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ардуино не принимает данные из Com
СообщениеДобавлено: 23 окт 2012, 19:21 
Не в сети

Зарегистрирован: 18 фев 2011, 16:35
Сообщения: 56
Всё это сделано на роутере. И скрипт отправки на RxTx ардуино с RxTx платы роутера находится в недрах этого роутера. Кажись, он на яве. Если не ошибаюсь, этот код зарыт где-то тут:
serial.cgi
Код:
#!/usr/bin/awk -f
function unescape(s)
{
   gsub(/\+/," ",s)
   res = ""
   do {
     p = match(s,/%[0-9a-fA-F]{2}/)
     if(p>0) {
        res = res substr(s,0,p-1) sprintf("%c",0+("0x" substr(s,p+1,2)))
        s = substr(s,p+3)
     }
   } while(p>0)
   return res s
}

BEGIN {
   RS = "&"
   FS = "="
}
{
   if($1 == "SERIAL_DATA" ) print unescape($2) > "/dev/ttyATH0"
}
END
{
   print "202"
}


или тут:
index.html
Код:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>OR-WIFI-ROBOT</title>
    <link rel="stylesheet" type="text/css" href="res/main.css"/>
    <script type="text/javascript">
        var lastTurn = -1;
   var lastPress = -1;
        var lastPos = -1;

   function submitUART(uartString)
   {
       document.getElementById('serialData').value=uartString;
            document.getElementById('serialForm').submit()
       

   };

        function scrollCam(val)
        {
            document.getElementById("scr").parentNode.scrollLeft=val;
   };

   function keyPressed(e)
   {
      var keynum
      var keychar
      var numcheck

      if(window.event) // IE
      {
      keynum = e.keyCode
      }
      else if(e.which) // Netscape/Firefox/Opera
      {
      keynum = e.which
      }
      keychar = String.fromCharCode(keynum);
      //submitUART(keychar);
      if(keychar == "w" || keychar == "ц" || keychar == "W" || keychar == "Ц") submitUART("W");
      if(keychar == "a" || keychar == "ф" || keychar == "A" || keychar == "Ф") submitUART("A");
      if(keychar == "s" || keychar == "ы" || keychar == "S" || keychar == "Ы") submitUART("S");
      if(keychar == "d" || keychar == "в" || keychar == "D" || keychar == "В") submitUART("D");
      if(keychar == "l" || keychar == "д" || keychar == "L" || keychar == "Д") submitUART("l");
      return true;
   };

function keyUp(e)
   {
      var keynum
      var keychar
      var numcheck

      if(window.event) // IE
      {
      keynum = e.keyCode
      }
      else if(e.which) // Netscape/Firefox/Opera
      {
      keynum = e.which
      }
      keychar = String.fromCharCode(keynum);
      //submitUART(keychar);
      /*if(keychar == "w" || keychar == "ц" || keychar == "W" || keychar == "Ц") submitUART("w");
      if(keychar == "a" || keychar == "ф" || keychar == "A" || keychar == "Ф") submitUART("a");
      if(keychar == "s" || keychar == "ы" || keychar == "S" || keychar == "Ы") submitUART("s");
      if(keychar == "d" || keychar == "в" || keychar == "D" || keychar == "В") submitUART("d");
      
      if(keychar == "w" || keychar == "ц" || keychar == "W" || keychar == "Ц")
         {submitUART("w"); submitUART("w"); submitUART("w");}
      if(keychar == "a" || keychar == "ф" || keychar == "A" || keychar == "Ф")
         {submitUART("a"); submitUART("a"); submitUART("a");}
      if(keychar == "s" || keychar == "ы" || keychar == "S" || keychar == "Ы")
         {submitUART("s"); submitUART("s"); submitUART("s");}
      if(keychar == "d" || keychar == "в" || keychar == "D" || keychar == "В")
         {submitUART("d"); submitUART("d"); submitUART("d");}*/
      return true;
   };

   /*window.setInterval(
      function(){
         var pos = document.getElementById("scr").parentNode.scrollLeft;
         if(lastPos!=pos){
            submitUART("t");
            lastPos=pos;
         };
      },100
   );*/

    </script>
</head>
<body onKeyPress="return keyPressed(event)" onKeyUp="keyUp(event)" bgcolor="black" text="green">
<pre class="banner">
* <b>Made by <a href="http://open-robotics.ru/" target="_blank">Open-Robotics.ru</a></b>                       Powered by <a href="http://openwrt.org" target="_blank">OpenWrt.org</a> *
</pre>
<table align="center">

    <tr>
        <td>
            <script type="text/javascript">
                document.write("<img alt='Robot Eye' class='bot-eye' src='http://" + document.location.host + ":8080/?action=stream'/>")
            </script>
            <br/>
        </td>
     
        <td align="right">
            <hr style="width: 240px;margin-top: 15px">
       Chassis control: W-Forward, A-Left, S-Backward, D-Right<br>
      <button type="button" onclick="submitUART('W')">Forward</button><br>
        <button type="button" onclick="submitUART('A')">Left</button>
        <button type="button" onclick="submitUART('l')">Light</button>
        <button type="button" onclick="submitUART('D')">Right</button><br>
        <button type="button" onclick="submitUART('S')">Backward</button>
             
            <hr style="width: 480px;margin-top: 15px">
            <form id="serialForm" action="cgi-bin/serial.cgi" method="POST" target="hidden">
                <label>Serial data:<br/>
                    <textarea id="serialData" name="SERIAL_DATA" rows="2" cols="20">TEST SERIAL</textarea>
                </label><br/>
                <input type="submit" value="Send">
            </form>
        </td>
    </tr>
</table>
<hr/>
<iframe name="hidden" src="/nothing.html" style="width: 1px;height: 1px;visibility: hidden"></iframe>

<a href="admin/index.html" >>Robot administration</a>
</body>
</html>

Если видите где они, эти "10 13", скажите, я их вырежу отсюда.

Добавлено спустя 5 минут 36 секунд:
Angel71 писал(а):
на самом деле есть такое гроооооомаднейшее предположение, что у вас в скетче (или как оно там у вас называется в этом "dimmer") вы данные не из кода отсылаете, а из этого чудного окошка
и весь этот гимор до смешного легко лечится.

Я данные и из этого окошка отсылаю, и из роутера, код отсылки и скрипт привёл. Как же это лечится? Просто об этом нигде ни слова не встретил. Есть гарантированно рабочий пример (гарантия от производителя ардуины и программы arduino ide), сказано, что оно работает, и всё. Точка. И некоторые утверждают что действительно работает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ардуино не принимает данные из Com
СообщениеДобавлено: 23 окт 2012, 19:45 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
Код:
<form id="serialForm" action="cgi-bin/serial.cgi" method="POST" target="hidden">
                <label>Serial data:<br/>
                    <textarea id="serialData" name="SERIAL_DATA" rows="2" cols="20">TEST SERIAL</textarea>
                </label><br/>
                <input type="submit" value="Send">
            </form>

т.е. в текстовом поле написали символ, и выплюнули его в уарт. дык, всё правильно оно отсылает
Цитата:
код символов: "а" 160, "a" 97, "0" 48.

естесственно символ и получили.
с 10 13 пока даже пытаться не буду в телепата играть. более детально описывайте, а то у вас то скетч, то роутер, то один код, то другой + хз что конкретно где делаете. где вылезают эти 10 13 я хз. сидеть гадать в каком участке кода ошибку искать... дануне.
либо стирайте всё в этом cgi и начинайте смотреть что пришло (выплёвывайте куда там сейчас выплёвывается) полученые данные и их длину. а там уже видно будет.


Последний раз редактировалось Angel71 23 окт 2012, 20:06, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ардуино не принимает данные из Com
СообщениеДобавлено: 23 окт 2012, 20:05 
Не в сети

Зарегистрирован: 18 фев 2011, 16:35
Сообщения: 56
Angel71 писал(а):
сидеть гадать в каком участке кода ошибку искать... дануне.

Может быть это что-нибудь вам прояснит: http://roboforum.ru/forum86/topic12113.html#p253442
Проблема раз: Отправляю циферку "0", ардуино видит не "цифру ноль", а её код "48". Отправляю через arduino ide или как вы сказали "т.е. в текстовом поле написали символ, потом взяли его код и выплюнули в уарт". Как сделать чтоб видела "0" а не код нуля, при отправке нуля, в том и другом способе. Как брать символ, и отправлять символ, а не его код?
И ранее я писал, что отправляя через старую версию arduino IDE, и возвращая отправленное обратно, приходит как раз не "48" вместо отправленного "0", а именно ноль. Но, этото значение на пине всё равно не устанавливается, устанавливается "48", делаю вывод, что так отображает программа
Проблема два: при способе "т.е. в текстовом поле написали символ, потом взяли его код и выплюнули в уарт" отправляется "10" и "13". А не нужно. Как и где исправить.
А ваще уже надоело переформулировать одно и то же разными словами для разных желающих помочь. В ответ на мои вопросы, получаю ещё больше вопросов. Считаю, что достаточно ясно сформулировал проблему.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ардуино не принимает данные из Com
СообщениеДобавлено: 23 окт 2012, 20:10 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
плииин. ещё раз повторяю. на форме веб страницы вы пишите символы в текстовое поле. потом берёте этот текст и отправляете его на роутер cgi скрипту. если в скетче дуни вы отправляете через ото мелкое окошко внизу и чуть левее, то там таже самая ситуация - тестовое поле ака куча символов. "0" ака '0' совсем не тоже самое, что и число 0. или можно поподробней где именно вы отсылаете число 0, а не символ "0"? в коде? в каком? при чём тут опять ардуина, когда только что речь была за вебстраницу и роутер? где код скетча? просил же более жетально всё описывать. :) давайте по одной проблеме за раз и без всякого "смешались в кучу кони, люди,..."? а то и вас не поймут и вы ничего не поймёте. :pardon: или ждите телепатов, у которых есть дуня и роутер с таким же софтом и они либо поковыряются в вашем коде или просто выложат свой рабочий код для примера.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ардуино не принимает данные из Com
СообщениеДобавлено: 23 окт 2012, 20:42 
Не в сети

Зарегистрирован: 18 фев 2011, 16:35
Сообщения: 56
Попробую как блондинка объяснить. Хочу с клавиатуры num pad ввести в то самое окошко, или текстовое поле веб странички(давайте на веб страничке остановимся) циферку(символ, а не его код), например "0", и чтоб он прилетел в ардуино не кодом этого символа "48", а нулём, тем самым нулём, который установит уровень напряжения на пине в ноль. Анологично от 0 до 255. Если 255 установить на пине, это будет соответствовать пяти вольтам.
Вот код, который беру за основу:
Код:
const int ledPin = 9;      // the pin that the LED is attached to

void setup()
{
  // initialize the serial communication:
  Serial.begin(9600);
  // initialize the ledPin as an output:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  byte brightness;

  // check if data has been sent from the computer:
  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);
  }
}

Всё упёрлось в то, что когда я ввожу в окно(поле) отправки свой символ "ноль", отправляется не сам "ноль", а его код "48". Соответственно вопрос, как мне отсылать не коды символов, а сами символы. Или пусть шлются коды символов, как сейчас, но тогда нужен скетч, который бы их переводил в символы. Уж не знаю что проще сделать.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 4 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO