разные типы данных, ламерский вопрос

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

разные типы данных, ламерский вопрос

Сообщение Myp » 12 фев 2007, 22:05

начал я вобщем по уарту принимать данные
и процесс встал

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

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


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

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

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

Сообщение -= Александр =- » 12 фев 2007, 22:54

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

Сообщение Myp » 12 фев 2007, 23:29

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

Сообщение Myp » 13 фев 2007, 00:19

в хелпе написано

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

Сообщение Myp » 13 фев 2007, 00:57

короче
в итоге пришёл к этому:


      unsigned char resived;  //объявляем

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



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

Сообщение avr123.nm.ru » 13 фев 2007, 02:10

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


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

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

http://electronix.ru/forum/index.php?showtopic=26545
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: разные типы данных, ламерский вопрос

Сообщение avr123.nm.ru » 13 фев 2007, 02:14

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 курса)."
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: разные типы данных, ламерский вопрос

Сообщение Myp » 13 фев 2007, 11:03

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

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


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

Сообщение Myp » 13 фев 2007, 22:48

ещё над вопросом задумался

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

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

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

КОРОЧЕ:
засунуть процедуру приёма и обработки строки в процедуру прерывания
interrupt [USART_RXC] void usart_rx_isr(void) :?: :?:  :?:
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение Myp » 14 фев 2007, 22:07

еееееееее
я это сделал


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

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

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


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


Вернуться в Новичкам или основы основ роботостроения.

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

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