roboforum.ru

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

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




Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Прошу помощи! (помогите с написанием программы на Си Code..)
СообщениеДобавлено: 30 май 2005, 13:29 
Не в сети

Зарегистрирован: 12 апр 2005, 11:47
Сообщения: 188
Откуда: Москва
Вообщем беда - не могу написать программу на Си. (CodeVision)

Я научился мигать светодиодами, управлять таймерами, писать на LCD, отправлять символы по последовательному порту.

А теперь вот в ступоре! Прошу помощи.

Мне нужно что бы я мог послать команду по последовательному порту (от PC в МК) вида "stop" , "left motor on", "left motor off", "led on", "led off" и т.п.
Процедуры обработки напишу сам, а вот как принимать команды и вызывать соответствующие процедуры - ну не получается! И еще хочется что б данная обработка работала по прерыванию от UARTа (что б не сновном цикле крутилась)

Помогите плз.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 30 май 2005, 14:11 
Не в сети
Аватара пользователя

Зарегистрирован: 24 ноя 2004, 12:36
Сообщения: 195
Откуда: Харьков
Ну а вчем собственно у тебя проблема

Если ты умееш принимать(передавать) символы по RS232 то ты можеш и писать их в строку. А затем используя стандартные функции (см. string.h)находить подстроку в строке и по результату выполнять нужную ветку алгоритма

Разбор команд стандартная процедура в программах для простоты их можно и упростить Left motor ON -> LMON например


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 30 май 2005, 17:42 
Не в сети

Зарегистрирован: 12 апр 2005, 11:47
Сообщения: 188
Откуда: Москва
Понимаю, что туплю :(

Но если кусок кода скинете, то буду должен пиво :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 30 май 2005, 17:57 
Не в сети
Аватара пользователя

Зарегистрирован: 21 янв 2005, 12:16
Сообщения: 977
Откуда: Germany
прог. языки: asm
в принципе ... примерно так:

отсылаешь , скажим , "1" - загорается лампочка... "2" - крутится мотор ... и в таком духе дальше ...
просто будет завязка "символ<->команда" (это то ты сможешь ?)

если хочешь отправлять текстовые комманды - придётся позаботиться о разграничителях пакетов ... типа: %stop& , %motor_on&
(т.е. "%" - начало пакета, "&" - конец пакета ...)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 31 май 2005, 11:29 
Не в сети

Зарегистрирован: 12 апр 2005, 11:47
Сообщения: 188
Откуда: Москва
nest писал(а):
в принципе ... примерно так:

отсылаешь , скажим , "1" - загорается лампочка... "2" - крутится мотор ... и в таком духе дальше ...
просто будет завязка "символ<->команда" (это то ты сможешь ?)


типа

k=getchar();
if (k=="1") { зажгли лампочку}

и т.д.

это неинтересно, ибо будем постоянно ждать введенные символы ..


Цитата:
если хочешь отправлять текстовые комманды - придётся позаботиться о разграничителях пакетов ... типа: %stop& , %motor_on&
(т.е. "%" - начало пакета, "&" - конец пакета ...)


вроде этого, но использовать rx_buffer - а тут и туплю :(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 31 май 2005, 11:53 
Не в сети
Аватара пользователя

Зарегистрирован: 24 ноя 2004, 12:36
Сообщения: 195
Откуда: Харьков
Зачем ждать Ты же размещаеш код в функции прерывания по приему символа

switch(UDR)
      {
      case {код символа}: {зажигаем лампочку};break;
      case {код символа}: {Left motor ON};break;
      .....
      default: break;
      }


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 31 май 2005, 13:13 
Не в сети

Зарегистрирован: 12 апр 2005, 11:47
Сообщения: 188
Откуда: Москва
Tracer писал(а):
Зачем ждать Ты же размещаеш код в функции прерывания по приему символа

switch(UDR)
      {
      case {код символа}: {зажигаем лампочку};break;
      case {код символа}: {Left motor ON};break;
      .....
      default: break;
      }


Это я понял, а как сделать если я хочу текстовые команды использовать  ? и еще с параметрами ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 31 май 2005, 14:04 
Не в сети
Аватара пользователя

Зарегистрирован: 24 ноя 2004, 12:36
Сообщения: 195
Откуда: Харьков
Без разбора строки на подстроку никуда не деться
Прийдется делать нечто такое

#include <string.h>
#define ON 1
#define OFF 0
...

   if(strstr(uartbuffer,"Light") != NULL)
     {
        if(strstr(uartbuffer,"ON") != NULL) light(ON);
        if(strstr(uartbuffer,"OFF) != NULL) light(OFF);
      }
if(strstr(uartbuffer,"Motor") != NULL)
     {
        if(strstr(uartbuffer,"ON") != NULL) motor(ON);
        if(strstr(uartbuffer,"OFF) != NULL) motor(OFF);
      }


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 31 май 2005, 14:36 
Не в сети

Зарегистрирован: 12 апр 2005, 11:47
Сообщения: 188
Откуда: Москва
т.е. в обработчике прерывания ловим идентификатор конца команды, далее из буфера в строку - и ее уже обратываем, так ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 31 май 2005, 15:08 
Не в сети
Аватара пользователя

Зарегистрирован: 24 ноя 2004, 12:36
Сообщения: 195
Откуда: Харьков
Именно ТАК


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 01 июн 2005, 13:31 
Не в сети

Зарегистрирован: 23 май 2005, 09:14
Сообщения: 7
Цитата:
... если я хочу текстовые команды использовать? и еще с параметрами ?

я думаю будет оригинально использовать вместо команд
четверостишья допустим А.С.Пушкина, что-то вроде этого:
Команда 1:
"Идет на право - песнь заводит"  означает
Поворот на право с включением сирены
Команда 2:
"Выпьем няня, где же кружка <Параметр>"  -
Робот галопом несется на кухню за пивом  
<Параметр> количество банок пива.  :lol:
А если серьезно, ИМХО, текстовые команды - явный пербор.
Пакета длиной байта 3 + CRC должно хватить.
Пусть
  $01 -  Команда позиционирование сервопривода
  <п1>- id сервопривода
  <п2>- позиция
Пример  01 04 83 (CRC)
Ну и дальше начинаешь обрабатывать ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 01 июн 2005, 18:36 
Не в сети

Зарегистрирован: 12 апр 2005, 11:47
Сообщения: 188
Откуда: Москва
FSnow писал(а):
Цитата:
... если я хочу текстовые команды использовать? и еще с параметрами ?

я думаю будет оригинально использовать вместо команд
четверостишья допустим А.С.Пушкина, что-то вроде этого:
Команда 1:
"Идет на право - песнь заводит"  означает
Поворот на право с включением сирены
Команда 2:
"Выпьем няня, где же кружка <Параметр>"  -
Робот галопом несется на кухню за пивом  
<Параметр> количество банок пива.  :lol:
А если серьезно, ИМХО, текстовые команды - явный пербор.
Пакета длиной байта 3 + CRC должно хватить.
Пусть
  $01 -  Команда позиционирование сервопривода
  <п1>- id сервопривода
  <п2>- позиция
Пример  01 04 83 (CRC)
Ну и дальше начинаешь обрабатывать ...



Текстовые команды возможно и перебор - но:

1. Наглядно
2. Для повторения боллее чем удобно


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 01 июн 2005, 19:13 
Не в сети
Аватара пользователя

Зарегистрирован: 24 ноя 2004, 12:36
Сообщения: 195
Откуда: Харьков
Исключительно для удобства НАЧИНАЮЩИХ и при наличии избыточного МК текстовые команды - ПРАВИЛЬНО
Но красивее в КЛАССИЧЕСКОМ смысле всетаки числовое представление

КАК промежуточное решение

Интерфейсная программа  на ПК преобразует ТЕКСТОВЫЕ команды в числовые и передает их в МК по  СОМ порту

Ну а вообще РАЗРАБОТЧИК всегда ПРАВ (ИМНО) :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 01 июн 2005, 19:19 
Не в сети

Зарегистрирован: 12 апр 2005, 11:47
Сообщения: 188
Откуда: Москва
Tracer писал(а):
Исключительно для удобства НАЧИНАЮЩИХ и при наличии избыточного МК текстовые команды - ПРАВИЛЬНО
Но красивее в КЛАССИЧЕСКОМ смысле всетаки числовое представление

КАК промежуточное решение

Интерфейсная программа  на ПК преобразует ТЕКСТОВЫЕ команды в числовые и передает их в МК по  СОМ порту

Ну а вообще РАЗРАБОТЧИК всегда ПРАВ (ИМНО) :D


Хм, может я и заблуждаюсь, но:

Все свои разработки по теме роботов, я буду делать открытыми!, и поэтому, для помощи начинающим-повторяющим текстовые команды будут проще для освоения. опять таки ИМХО :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 02 июн 2005, 09:06 
Не в сети

Зарегистрирован: 23 май 2005, 09:14
Сообщения: 7
Цитата:
Ну а вообще РАЗРАБОТЧИК всегда ПРАВ (ИМНО)

возможно, возможно...  :wink:

2Slava
Кстати, Вы прикинули планируемое количество команд?

Цитата:
для помощи начинающим-повторяющим текстовые команды будут проще для освоения

Спорно. Мне кажется, если начинающий разобрался
с МК, то таблица из 15 (допустим) команд его наврядли напрягет.

Цитата:
КАК промежуточное решение
Интерфейсная программа  на ПК преобразует ТЕКСТОВЫЕ команды в числовые и передает их в МК по  СОМ порту

смущает только фраза "промежуточное решение".
ИМХО, это нормальное решение.

и еще пытаюсь представить ситуацию (возможно я ее не так вижу).
Решил начинающий повторить Ваш проект
(кстати я с интересом за ним слежу, делаю что-то подобное,
чуть по проще, и планирую идти по Вашим стопам  :wink: )
Далее начинающий собрал плату. Прошил контроллер.
Запустил интерфейсную прогу на ПК. Работает (повезло ему).
Потом начал разбираться с кодом (для общего развития).
читает:
Цитата:
switch(UDR) {
     // Код $01 - Зажигаем лампу №1 (к примеру)
     case {код символа}: {зажигаем лампочку};break;
     .....

неужели это менее понятно и наглядно, чем  
Цитата:
  // Light - Зажигаем лампу №1
 if(strstr(uartbuffer,"Light") != NULL)
    {
       if(strstr(uartbuffer,"ON") != NULL) light(ON);
       if(strstr(uartbuffer,"OFF) != NULL) light(OFF);
     }


К слову, операции со строками, само собой будут выполнятся
медленнее, хотя я понял что на это забили.
И еще обязательно прийдется выковыривать слова из строки
если работать с параметрами, преобразовывать  их в числа и т.п.

Все выше сказанное - всего лишь мое мнение.
Ничего личного  :lol:


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

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


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

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


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

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