roboforum.ru

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

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




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 22 май 2011, 16:13 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
Так смотри, что ты делаешь (если я правильно эти ваши атмеги понимаю):

1. Ты нажимаешь кнопку
2. Через терминал и УАРТ отправляется код этой кнопки
3. МК обрабатывает нажатие этой кнопки (загорелся светодиод)
4. Ты отпускашь кнопку. Вопрос - что отправляется в терминал? Как МК узнает, что ты отпустил кнопку?

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 22 май 2011, 16:16 
Не в сети

Зарегистрирован: 24 дек 2008, 17:55
Сообщения: 203
Откуда: Актюбинск
dccharacter писал(а):
4. Ты отпускашь кнопку. Вопрос - что отправляется в терминал? Как МК узнает, что ты отпустил кнопку?

вот это и хотел узнать)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 22 май 2011, 16:56 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
Правильный ответ - никак :-)

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 22 май 2011, 18:04 
Не в сети

Зарегистрирован: 24 дек 2008, 17:55
Сообщения: 203
Откуда: Актюбинск
а если вот так сделать, то когда нажимаешь мигает потом тока горит, и когда отпускаешь нормально гаснет. вот почему когда нажимаешь и держишь в начале мигает и потом только горит?
Код:
while (1){                 
        char asd;
      while(UCSRA.7==1){
        asd = UDR;
        if(asd == 'w'){
            PORTB.0 = 1;
            PORTB.2 = 0;
            PORTB.4 = 0;
            PORTB.6 = 0;
            delay_ms(100);   
        }
        if(asd == 'a'){
            PORTB.2 = 1;
            PORTB.0 = 0;
            PORTB.4 = 0;
            PORTB.6 = 0;
            delay_ms(100);
        }
        if(asd == 'd'){
            PORTB.4 = 1;
            PORTB.0 = 0;
            PORTB.2 = 0;
            PORTB.6 = 0;
            delay_ms(100);
        }
        if(asd == 's'){
            PORTB.6 = 1;
            PORTB.0 = 0;
            PORTB.2 = 0;
            PORTB.4 = 0;
            delay_ms(100);
        }         
  }
            asd = 'q';
            if(asd == 'q'){
                PORTB.6 = 0;
                PORTB.0 = 0;
                PORTB.2 = 0;
                PORTB.4 = 0;
            } 
}

вроде должен так работать, ну как я понимаю, когда нажимаю "w","a","s","d" заходит while(UCSRA.7==1) а когда не нажимаю, выходит из этого цикла, правильно? если я отпускаю то должны все светодиоды не гореть, то есть программа не заходит в while(UCSRA.7==1) то есть asd = 'q' и все светодиоды гаснут...я правильно понимаю?


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

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
asd = 'q';
if(asd == 'q')

Это - очень круто!!!!!!

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 22 май 2011, 18:21 
Не в сети

Зарегистрирован: 24 дек 2008, 17:55
Сообщения: 203
Откуда: Актюбинск
dccharacter писал(а):
asd = 'q';
if(asd == 'q')

Это - очень круто!!!!!!

ну я то буду еще что то добавлять кроме этой программы) что б еще от мк передавать сигналы на ПК)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 22 май 2011, 18:28 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2010, 13:56
Сообщения: 995
Откуда: Нижний Новгород
прог. языки: С, С++, РНР
У вас нет ничего, что бы гасило светодиоды при отпускании кнопок.
Если кнопки не нажаты, вы не попадаете во внутренний while(UCSRA.7==1), и крутитесь во внешнем while(1), где ничего не гасит светодиоды. Поэтому у вас так и происходит. Поставьте перед while(UCSRA.7==1) строчку PORTB = 0; и все, светодиоды всегда будут погашены, и будут только загораться (точнее мигать) когда вы держите кнопки.

Внутри цикла вместо кучи IF поставьте лучше switch - будет короче и красивее


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 22 май 2011, 18:48 
Не в сети

Зарегистрирован: 24 дек 2008, 17:55
Сообщения: 203
Откуда: Актюбинск
вот именно, у меня мигает, а мне надо что б только горел, вообщем я хотел сделать так: когда нажимаю "w" моторы должны крутиться вперед, а когда "s" назад, "a" - влево,"d"-вправо, но у меня тут когда нажимаешь и держишь, в начале мигает(когда моторы будут то будет робот трести) потом тока горит... вообщем надо что б когда нажимаешь должны моторы нормально крутиться) вроде объяснил))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 22 май 2011, 19:25 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2010, 13:56
Сообщения: 995
Откуда: Нижний Новгород
прог. языки: С, С++, РНР
Уберите задержки - будет чаще мигать, почти гореть - это простой вариант. Над более сложным уж сами подумайте :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 22 май 2011, 19:38 
Не в сети

Зарегистрирован: 24 дек 2008, 17:55
Сообщения: 203
Откуда: Актюбинск
если задержки убрать то ваще не горит)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 23 май 2011, 20:33 
Не в сети

Зарегистрирован: 24 дек 2008, 17:55
Сообщения: 203
Откуда: Актюбинск
HarryStar писал(а):
Уберите задержки - будет чаще мигать, почти гореть - это простой вариант.

а почему если задержку убрать то ваще не горит?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с программой...
СообщениеДобавлено: 23 май 2011, 22:56 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2010, 13:56
Сообщения: 995
Откуда: Нижний Новгород
прог. языки: С, С++, РНР
Возможно задержка необходима для нормально работы UART, а возможно большую часть времени прога находится в состоянии обмена данными и светодиод загорается лишь на мгновение, не заметное глазу.

В вашем случае проблему можно решить несколькими способами, лучше бы конечно если бы вы сами над ними думали а не ждали чужого решения.

Вот 1 из вариантов:
настраиваете таймер, который вызывает прерывание например 10 раз в секунду (возможно придется подобрать экспериментально) именно в нем и только в нем вы гасите светодиоды (выключаете свои моторы). А в обработке нажатий клавиш вы зажигаете нужные светодиоды И переводите таймер т.о. чтоб прерывание в ближайшие 1/10 секунды не произошло.

Итого получается, что если вы держите кнопку, то таймер постоянно переводится и прерывания не происходит. Соотв светодиод горит постоянно. Как только перестали нажимать, через 1/10 сек произойдет прерывание и погасит светодиоды.

Можно придумать кучу других вариантов, тренируйтесь в алгоритмизации, это интересно и полезно.


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

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


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

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


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

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