roboforum.ru

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

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

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

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

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

здравствуйте!
я вот учусь программированию, и наткнулся на такую ошибку, по идеи работать должен так, када нажимаю кнопку и значение увеличивается на к++, и должен после каждой нажатий вывести на экран, точнее на терминал, работает через rs232. Почему када нажимаю увеличивается тока на 1 и дальше не идет, и глобально объявлял к, но все же, такой ответ выходит
Код: Выделить всёРазвернуть
/*****************************************************
This program was produced by the
CodeWizardAVR V2.04.8b Evaluation
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Chip type               : ATmega32
Program type            : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 512
*****************************************************/

#include <mega32.h>
#include <delay.h>

// Standard Input/Output functions
#include <stdio.h>

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0xFF;
DDRA=0;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0xFF;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0xFF;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0xFF;
DDRD=0;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;


// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;


// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;

while (1){                 
      int k;
        k = 20;
        switch(PIND){
        case 0b11111011:
            delay_ms(200);
            k++; 
            printf("%d \r\n\0", k);
            break;
        case 0b11110111: 
            delay_ms(200);
            k--;
            printf("%d \r\n\0", k);
            break;
        default: break;
        }
  }
}
chinga
 
Сообщения: 203
Зарегистрирован: 24 дек 2008, 17:55
Откуда: Актюбинск

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

Сообщение HarryStar » 21 май 2011, 21:16

1) Научитесь русскому языку. Это главное.
2) Вынесите объявление переменной "int k;" и присвоение ей начального значения за цикл while, т.е. перед ним.

У вас переменная k объявляется, потом k=20, потом например приращивается k++ потом переменная k объявляется, потом k=20, потом например приращивается k++ потом переменная k объявляется, потом k=20, потом например приращивается k++ потом переменная k объявляется, потом k=20 ...

Т.о. у вас k всегда равно или 19 или 21 в зависимости от порта D
Последний раз редактировалось HarryStar 21 май 2011, 21:20, всего редактировалось 1 раз.
Аватара пользователя
HarryStar
 
Сообщения: 995
Зарегистрирован: 15 ноя 2010, 13:56
Откуда: Нижний Новгород
прог. языки: С, С++, РНР

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

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

HarryStar писал(а):1) Научитесь русскому языку. Это главное.

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

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

Сообщение Grem » 21 май 2011, 21:29

в смысле?)

здравствуйте!
я вот учусь программированию, и наткнулся на такую ошибку, по идеи работать должен так, када нажимаю кнопку и значение увеличивается на к++, и должен после каждой нажатий вывести на экран, точнее на терминал, работает через rs232. Почему када нажимаю увеличивается тока на 1 и дальше не идет, и глобально объявлял к, но все же, такой ответ выходит

Ну и кучка пунктуационных и стилистических.
"There is nothing better than sliding down snow and flying through the air" (с) Shane McConkey.
Lieber ein Brett am Fuß als eins vorm Kopf, aber lieber ein Brett vorm Kopf als zwei am Fuß.
Аватара пользователя
Grem
 
Сообщения: 1530
Зарегистрирован: 16 май 2009, 12:50
Откуда: Россия
прог. языки: Java, C

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

Сообщение HarryStar » 21 май 2011, 21:30

chinga писал(а):в смысле?)


Помечу красным ошибки, зеленым пропущенные слова или неправильный смысл.

я вот учусь программированию, и наткнулся на такую ошибку, по идеи (тут пропущено слово код) работать должен так, када нажимаю кнопку и (лишний союз) значение увеличивается на к++(на 1 а не на к++), и должен после каждой нажатий вывести (пропущено слово значение)на экран, точнее на терминал, работает через rs232. Почему када нажимаю увеличивается тока на 1 и дальше не идет, и глобально объявлял к, но все же, такой ответ выходит (последние слова вообще не в тему)

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

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

Сообщение RootAdmin » 21 май 2011, 21:35

HarryStar правильно указал на ошибку в коде.
Как-то так:
Я вот учусь программированию. По задумке моя программа работать должна так: когда нажимаю кнопку - значение переменной k изменяется в строке k++, после каждого изменения ее значение выводится на терминал, подключенный через rs232. Почему-то когда нажимаю - отрабатывает один инкремент, занчение меняется на 1 и дальше не изменяется.
Что пробовал для поиска ошибки: глобально объявлял к. Результат тот же.
Сорри за редактуру. :)

На хороший вопрос и отвечать приятно.
Дым, идущий из всех устройств в помещении предвещает появление электрика.
RootAdmin
 
Сообщения: 1725
Зарегистрирован: 07 авг 2010, 21:29
Откуда: КМВ
прог. языки: C
ФИО: Андрей

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

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

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

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

Сообщение =DeaD= » 21 май 2011, 22:54

Вот именно что пишете код так же как говорите :)

Есть такое правило - если не можешь грамотно выразить алгоритм русским языком, значит скорее всего и напишешь его неправильно в коде. Поэтому учите русский.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

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

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

еще такая проблема: при нажатий кнопки должен светодиод гореть, и когда отпускаю должен гаснуть) кнопки с компа: w, a, s, d. а у меня сейчас нажимаю и горит пока не нажмешь вторую кнопку, нажимаешь вторую этот светодиод гаснет и горит следующий.
Код: Выделить всёРазвернуть
/*****************************************************
This program was produced by the
CodeWizardAVR V2.04.8b Evaluation
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Chip type               : ATmega32
Program type            : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 512
*****************************************************/

#include <mega32.h>
#include <delay.h>

// Standard Input/Output functions
#include <stdio.h>

// Declare your global variables here

void main(void)
{

// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0xFF;
DDRA=0;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0xFF;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0xFF;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0xFF;
DDRD=0;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;


// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;


// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;

while (1){                 
     
      while(UCSRA.7==1){
        char asd;
        asd = UDR;
        if(asd == 'w'){
            PORTB.0 = 1;
            asd = 0;
            UCSRA.7 = 0;
            UCSRA.6 = 0;
            UDR = 0;
            //delay_ms(100);   
        }else{
            PORTB.0 = 0;
        }
        if(asd == 'a'){
            PORTB.2 = 1;
            //delay_ms(100);
        }else{
            PORTB.2 = 0;
        }
        if(asd == 'd'){
            PORTB.4 = 1;
            //delay_ms(100);
        }else{
            PORTB.4 = 0;
        }
        if(asd == 's'){
            PORTB.6 = 1;
            //delay_ms(100);
        }else{
            PORTB.6 = 0;
        }         
  }
}


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

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

Сообщение RealRobot » 22 май 2011, 14:52

пристали к человеку, учи да учи. Может он индиец или африканец. И тогда такой уровень русского это ого.го.го. Вы бы так смогли бегло изъясняться по африкански? да еще код на мегу написать, на фарси например?
http://igrybogov.com - ну о.о.очень интересно
сознание определяет бытие, улыбнись своему отражению
RealRobot
 
Сообщения: 340
Зарегистрирован: 18 окт 2007, 23:46
Откуда: Москва
прог. языки: С++ , 1С :-)
ФИО: Михаил

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

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

RealRobot писал(а):пристали к человеку, учи да учи. Может он индиец или африканец. И тогда такой уровень русского это ого.го.го. Вы бы так смогли бегло изъясняться по африкански? да еще код на мегу написать, на фарси например?

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

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

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

для Чинга
Смотря как и чем отсылается символ? а в коде меги надо в тот момент когда зажигаешь один светодиот гасить все остальные кроме зажигаемого.

Добавлено спустя 3 минуты 42 секунды:
ну вот видите, Чинга казах. Чинга, у вас там неверно уже и русский то в школах не преподают? или если преподают, то как иностранный? в этих реалиях то, что вы сносно изъясняетесь по русски уже подвиг.
http://igrybogov.com - ну о.о.очень интересно
сознание определяет бытие, улыбнись своему отражению
RealRobot
 
Сообщения: 340
Зарегистрирован: 18 окт 2007, 23:46
Откуда: Москва
прог. языки: С++ , 1С :-)
ФИО: Михаил

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

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

RealRobot писал(а):ну вот видите, Чинга казах. Чинга, у вас там неверно уже и русский то в школах не преподают? или если преподают, то как иностранный? в этих реалиях то, что вы сносно изъясняетесь по русски уже подвиг.

это только у меня проблема с русским, и еще в таких случаях когда объясняю, еще хуже становится) у нас учат русский) и не как иностранный))
RealRobot писал(а):для Чинга
Смотря как и чем отсылается символ? а в коде меги надо в тот момент когда зажигаешь один светодиот гасить все остальные кроме зажигаемого.

примерно так?
Код: Выделить всёРазвернуть
      while(UCSRA.7==1){ //RXC флаг завершения приема устанавл.в 1 когда UDR(регистр данных приемника) не прочитан
        char asd;
        asd = UDR;
        if(asd == 'w'){
            PORTB.0 = 1;
            PORTB.2 = 0;
            PORTB.4 = 0;
            PORTB.6 = 0;
            //asd = 0;
            //UCSRA.7 = 0;
            //UCSRA.6 = 0;
            //UDR = 0;
            //delay_ms(100);   
        }else{
            PORTB.0 = 0;
            PORTB.2 = 0;
            PORTB.4 = 0;
            PORTB.6 = 0;
        }
        if(asd == 'a'){
            PORTB.2 = 1;
            PORTB.0 = 0;
            PORTB.4 = 0;
            PORTB.6 = 0;
            //asd = 0;
            //UCSRA.7 = 0;
            //UCSRA.6 = 0;
            //UDR = 0;
            //delay_ms(100);
        }else{         
            PORTB.0 = 0;
            PORTB.2 = 0;
            PORTB.4 = 0;
            PORTB.6 = 0;

        }
        if(asd == 'd'){
            PORTB.4 = 1;
            PORTB.0 = 0;
            PORTB.2 = 0;
            PORTB.6 = 0;
            //asd = 0;
            //UCSRA.7 = 0;
            //UCSRA.6 = 0;
            //UDR = 0;
            //delay_ms(100);
        }else{
            PORTB.0 = 0;
            PORTB.2 = 0;
            PORTB.4 = 0;
            PORTB.6 = 0;

        }
        if(asd == 's'){
            PORTB.6 = 1;
            PORTB.0 = 0;
            PORTB.2 = 0;
            PORTB.4 = 0;
            //asd = 0;
            //UCSRA.7 = 0;
            //UCSRA.6 = 0;
            //UDR = 0;
            //delay_ms(100);
        }else{
            PORTB.0 = 0;
            PORTB.2 = 0;
            PORTB.4 = 0;
            PORTB.6 = 0;
        }
chinga
 
Сообщения: 203
Зарегистрирован: 24 дек 2008, 17:55
Откуда: Актюбинск

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

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

else .. уже не нужен
http://igrybogov.com - ну о.о.очень интересно
сознание определяет бытие, улыбнись своему отражению
RealRobot
 
Сообщения: 340
Зарегистрирован: 18 окт 2007, 23:46
Откуда: Москва
прог. языки: С++ , 1С :-)
ФИО: Михаил

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

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

RealRobot писал(а):else .. уже не нужен

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

След.

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

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

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

cron