roboforum.ru

Технический форум по робототехнике.

помогите с программой...

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

Re: помогите с программой...

Сообщение dccharacter » 22 май 2011, 16:13

Так смотри, что ты делаешь (если я правильно эти ваши атмеги понимаю):

1. Ты нажимаешь кнопку
2. Через терминал и УАРТ отправляется код этой кнопки
3. МК обрабатывает нажатие этой кнопки (загорелся светодиод)
4. Ты отпускашь кнопку. Вопрос - что отправляется в терминал? Как МК узнает, что ты отпустил кнопку?
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: помогите с программой...

Сообщение chinga » 22 май 2011, 16:16

dccharacter писал(а):4. Ты отпускашь кнопку. Вопрос - что отправляется в терминал? Как МК узнает, что ты отпустил кнопку?

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

Re: помогите с программой...

Сообщение dccharacter » 22 май 2011, 16:56

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

Re: помогите с программой...

Сообщение chinga » 22 май 2011, 18:04

а если вот так сделать, то когда нажимаешь мигает потом тока горит, и когда отпускаешь нормально гаснет. вот почему когда нажимаешь и держишь в начале мигает и потом только горит?
Код: Выделить всёРазвернуть
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' и все светодиоды гаснут...я правильно понимаю?
chinga
 
Сообщения: 203
Зарегистрирован: 24 дек 2008, 17:55
Откуда: Актюбинск

Re: помогите с программой...

Сообщение dccharacter » 22 май 2011, 18:15

asd = 'q';
if(asd == 'q')

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

Re: помогите с программой...

Сообщение chinga » 22 май 2011, 18:21

dccharacter писал(а):asd = 'q';
if(asd == 'q')

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

ну я то буду еще что то добавлять кроме этой программы) что б еще от мк передавать сигналы на ПК)
chinga
 
Сообщения: 203
Зарегистрирован: 24 дек 2008, 17:55
Откуда: Актюбинск

Re: помогите с программой...

Сообщение HarryStar » 22 май 2011, 18:28

У вас нет ничего, что бы гасило светодиоды при отпускании кнопок.
Если кнопки не нажаты, вы не попадаете во внутренний while(UCSRA.7==1), и крутитесь во внешнем while(1), где ничего не гасит светодиоды. Поэтому у вас так и происходит. Поставьте перед while(UCSRA.7==1) строчку PORTB = 0; и все, светодиоды всегда будут погашены, и будут только загораться (точнее мигать) когда вы держите кнопки.

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

Re: помогите с программой...

Сообщение chinga » 22 май 2011, 18:48

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

Re: помогите с программой...

Сообщение HarryStar » 22 май 2011, 19:25

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

Re: помогите с программой...

Сообщение chinga » 22 май 2011, 19:38

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

Re: помогите с программой...

Сообщение chinga » 23 май 2011, 20:33

HarryStar писал(а):Уберите задержки - будет чаще мигать, почти гореть - это простой вариант.

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

Re: помогите с программой...

Сообщение HarryStar » 23 май 2011, 22:56

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

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

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

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

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

Пред.

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

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

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