roboforum.ru

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

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




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: разные типы данных, ламерский вопрос
СообщениеДобавлено: 12 фев 2007, 22:05 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
начал я вобщем по уарту принимать данные
и процесс встал

getchar() что возращает?
я так понимаю если  я по уарту передам единичку то getchar() выдаст мне символ 1

эммм а как мне цифири выжать из уарта?
тоесть даже так
как мне  выжать из уарта отдельно буквы и отдельно цифры?


короче, как мне из 2х символов принятых по уарту (например: "а2") вырезать двоечку??
наверняка моно както просто сделать :lol:

upd.
помогите плиз
в хелпе  CVAVR по англицки написано
и всё равно непонятно как мне из строки выделить и букву и цифру?

не я конечно могу обойтись без букв, но с буквами красивей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 12 фев 2007, 22:54 
Не в сети
Мастер Самоделкин
Аватара пользователя

Зарегистрирован: 11 окт 2004, 19:20
Сообщения: 3678
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич
Любая книга по Си - глава о работе со строками.
А вообще все просто, типа того if((a>="0")&(a<="9"))...
А чтоб преобразовать код цифры в цифру - надо из него вычесть число Дауна (48 ).  :wink:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 12 фев 2007, 23:29 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
вобщем я посмотрел 30 минут бабий бунт по MTV и сразу почувствовал уменьшение серого вещества
собрав остатки этого вещества я выдал мысли

ход  мыслей был таков:

всякими шаманствами получили  мы строчку "а55" по уарту и записали её в переменную resived типа unsigned char.
типа так: resived = *gets(символ_конца_строки, 3);
предварительно договорились что MSS это главный значащий символ, а LSS младшие значащие символы.

1.  дальше определяем первый буквенный символ сдвигом строки вправо на 2 позиции. MSS = resived >> 2 (тут маленькая заковыка, строки вобще по жизни можно таким образом сдвигать :?  :?: ато в "Памятка Си для МК на ОДНОЙ странице !" не сказано).

2. потом определяем что типа символ как раз тот который мне нужен
if (MSS = "a")...

3. теперь мне надо сдвигом строки в другую сторону выделить оставшиеся 2 символа
которые как раз и будут искомыми символами обозначающими нужные мне цифры.
LSS = resived << 1 (а при сдвиге влево на пустое место нолик дописываеться? :lol: а  как же тогда быть? ).

4. открываем книжку по СИ и смотрим как мне перевести получившиеся "55" в цифры (вспоминаем дауна и смеёмся 8) ).
чёто типа Х = (int)LSS - 4; ???

5. else if ...перебираем все остальные символы которые я использую для общения.


Последний раз редактировалось Myp 13 фев 2007, 01:03, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 13 фев 2007, 00:19 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
в хелпе написано

Цитата:
char *gets(char *str, unsigned char len)

inputs, using getchar, the character string str terminated by the new line character.
The new line character will be replaced with 0.
The maximum length of the string is len. If len characters were read without encountering the new line character, then the string is terminated with 0 and the function ends.
The function returns a pointer to str.


в проекте пишу: resived = *gets(*X, 3);
ругаеться: L200 undefined symbol "X"
а как мне тогда по человечески записать символ конца строки???


Последний раз редактировалось Myp 13 фев 2007, 01:03, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 13 фев 2007, 00:57 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
короче
в итоге пришёл к этому:


Цитата:
      unsigned char resived;  //объявляем

while (1)
{
      unsigned char *end = 'z';  //считаем что символ конца строки "х"
      resived = *gets(end, 3);      //собсно принимаем
}



вопрос, что это за звёздочки  *  и для чего они нужны?


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

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Myp писал(а):
вопрос, что это за звёздочки  *  и для чего они нужны?


это указатели.

Вот я попросил ПРОФИ рассказать что такое указатели и как их применять:

http://electronix.ru/forum/index.php?showtopic=26545


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: разные типы данных, ламерский вопрос
СообщениеДобавлено: 13 фев 2007, 02:14 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Myp писал(а):
getchar() что возращает?


число от 0 до 255  которому соответствует передаваемый
символ в таблице ASCII  

( таблицу ASCII  можно скачать на avr123.nm.ru/05.htm )

Myp писал(а):
я так понимаю если  я по уарту передам единичку то getchar() выдаст мне символ 1


выдаст вам число  которому в таблице  ASCII соостветствует символ  '1'

подробней в упражнении 5:
avr123.nm.ru/z5.htm

Цитата:

"Символьный в нашем случае - потому что char указывает на типа данных - бесзнаковый символьный - это числа от 0 до 255 - по таблице ASCII им соответствуют символы  - (таблицу ASCII  см. стр. 5 курса)."


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: разные типы данных, ламерский вопрос
СообщениеДобавлено: 13 фев 2007, 11:03 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
Цитата:
"Символьный в нашем случае - потому что char указывает на типа данных - бесзнаковый символьный - это числа от 0 до 255 - по таблице ASCII им соответствуют символы  - (таблицу ASCII  см. стр. 5 курса)."

во теперь въехал =)


а всё остальное я так понял похоже на правду раз никто не возмущается :roll:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 13 фев 2007, 22:48 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
ещё над вопросом задумался

мне в принципе надо чтоб по прерыванию срабатывал уарт и записывал
в глобальные переменные значения в зависимости от  того что пришло(ну и конечно слал обратно отчёт "Яволь, натюрлих!")
а главная программа  работает непрерывно используя эти глобальные переменные
если переменные изменились то и программа соответственно отрабатывает изменения.

а щас я сделал так:
уарт сам по прерыванию принимает символы и хранит их в буфере(мастер  начального кода так сделал =)),
а главная программа в  каждом цикле main опрашивает буфер приёма уарта на наличие там строки,
потом обрабатывает строку в технический вид и если  там всё ок(тоесть есть прямые указания к действию)
действует по плану дальше.

собсно вопрос, как мне  прилепить к прерыванию уарта кроме просто приёма байтов
ещё и обработку этих байтов чтоб зазря не опрашивать этот буфер в каждом цикле, уарт же эпизодически у меня включаеться

КОРОЧЕ:
засунуть процедуру приёма и обработки строки в процедуру прерывания
interrupt [USART_RXC] void usart_rx_isr(void) :?: :?:  :?:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 14 фев 2007, 22:07 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
еееееееее
я это сделал


блин засада реальная
мастер начального кода не пишет инклюд stdio.h там где все инклюды в начале программы

я изза этого пострадал
так как вызывал процедуру описанную в stdio.h до собственно инклюда stdio.h
переставил #include <stdio.h> в самое начало программы  и всё заработало

в аттаче собсно то о чём речь
код умеет реагировать на 3 события
тоесть 2 двигателя и светик =)


ЗЫ
если на уарт подключить ик приёмник то получиться ДУ =)


Вложения:
контроллер.c [4.9 КиБ]
Скачиваний: 345
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

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


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

Сейчас этот форум просматривают: Google [Bot] и гости: 6


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

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