Всё с сервами покончено!!!
Теперь есть поддержка до 8-ми серв,правда они занимают весь PORTB.
Управляется все это дело так:
1.Сначала передаётся буква s(0x73), контроллер переходит в подпрограмму управления сервами(это я сделал чтобы потом расширить функциональность программы).
2.Потом передаётся номер сервы, это число от 1 до 9 (0x31..0x39)
,т.к процедура принимает только шестнадцатеричное число то
из полученного числа вычитается 0x31 и получается искомый промежутор 0x00..0x08.
3.Тут самое интересное, я не стал заморачиватся с переводом из char в int а просто сделал так
- Код: Выделить всё
#define m5 1804
#define m10 1770
#define m15 1736
//Итак до m90 с шагом в 5 градусов
//и
#define p5 1873
#define p10 1907
#define p15 1941
//Итак до p90 с шагом в 5 градусов
//как вы наверно уже поняли 'm' означает поворот на -x градусов а
//'p' на +x градусов
В итоге 37 констант
:shock: :shock:.
Дальше - больше:
- Код: Выделить всё
s=USART_Receive();
s=s-0x31;
angle=USART_Receive();
if(angle=='a')
{
turn=m5;}
else
if(angle=='b')
{turn=m10;
}
else
//...
if(angle=='A')
{
turn=p5;}
else
if(angle=='B')
{turn=p10;
}
else
//...
Pos(s,turn);
Как видите всё проще пареной репы
.
Каждому 5-му градусу соответствует буква английского алфавита,
т.к получилось 17 отрицательных положений, 17 положитнльных и нулевое то положительным соотв. буквы в верхнем регистре, а отрицательным - в нижнем.
Вот такой вот некислый код получился:D
Высказывайте своё мнение господа.