roboforum.ru

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

 

Нужна помощь в совмещение 3 программ.

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Нужна помощь в совмещение 3 программ.

Сообщение space » 15 июн 2008, 11:46

Вообщем есть 2 программы. 1 - это свободное блуждание и движение на свет. Вообщем проект Congeror. 2 - это программа для следования по линии. Вы спросите а что за третья тогда, а 3 - это должна быть основная, то есть управлением теми двумя программами. То есть есть 4 кнопки старт, стоп, mobile и line tracer. С помощью этих кнопок буду всем этим рулить, а как рулить описал ниже в самом куске программы. Только как это сделать ума не приложу. Пробовал совместить сам по примеру. Но что - то совсем не то получилось.
Что касается совмещения(подпрограммы). Каждая из программ должна быть в своём текстовом документе. Вот как должна выглядить управляющая программа:
Код: Выделить всёРазвернуть
#include "tracer.h"
#include "mobile.h"

#define IN PINB
#define LIGHT_Start        PB0 //старт
#define LIGHT_Stop         PB1 // стоп
#define LIGHT_Line Tracer  PB2 // Line Tracer
#define LIGHT_mobile       PB3 // R1-b1 (mobile)

/**
* Главная функция
*/
int main( void )
{
    /**
     * Сдесь должен быть режим ожидания нажатия 2 кнупок.
     * О которых ниже. До тех пор пока не будет ни чего
     * нажато, робот должен стоять на месте.
   */
   
    /**
     * Нажатие кнопки Mobile, за тем start и если нужно остановить,
    * то нажимаем кнопку stop. После кнопки stop переходим сново в
    * режим ожидания.
    */
   
   
   /**
    * Нажатие кнопки Line Tracer, за тем start и если нужно остановить,
    * то нажимаем кнопку stop. После кнопки stop переходим сново в
    * режим ожидания.
   */

   sei();
   
   while(1);
   
   return 0;
}
Вложения
WinRAR.rar
Сдесь все программы. Ну то есть как пробовал совместить.
(13.37 КиБ) Скачиваний: 27
Аватара пользователя
space
 
Сообщения: 548
Зарегистрирован: 17 июн 2007, 23:44
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич

Re: Нужна помощь в совмещение 3 программ.

Сообщение Кирилл » 15 июн 2008, 15:41

А какой МК используешь? флеша то хватит?
Кирилл
 
Сообщения: 432
Зарегистрирован: 20 окт 2005, 16:11
Откуда: Вильнюс,Литва
прог. языки: Basic

Re: Нужна помощь в совмещение 3 программ.

Сообщение space » 15 июн 2008, 16:11

Ах. да. про это забыл упомянуть. Atmega16 я использую. А памяти хватит
Аватара пользователя
space
 
Сообщения: 548
Зарегистрирован: 17 июн 2007, 23:44
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич

Re: Нужна помощь в совмещение 3 программ.

Сообщение space » 17 июн 2008, 10:42

Подскажите хотя бы как вообще делаются подпрограммы. Ну или где про это почитать?
Аватара пользователя
space
 
Сообщения: 548
Зарегистрирован: 17 июн 2007, 23:44
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич

Re: Нужна помощь в совмещение 3 программ.

Сообщение EdGull » 17 июн 2008, 11:26

может все таки на васике попробуешь? ;)
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: Нужна помощь в совмещение 3 программ.

Сообщение space » 17 июн 2008, 14:07

извини, но привык к си.
Аватара пользователя
space
 
Сообщения: 548
Зарегистрирован: 17 июн 2007, 23:44
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич

Re: Нужна помощь в совмещение 3 программ.

Сообщение Myp » 17 июн 2008, 14:25

space писал(а):извини, но привык к си.

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

Re: Нужна помощь в совмещение 3 программ.

Сообщение EdGull » 17 июн 2008, 14:30

извини, но МУР прав... :D
а если по теме, то аналогичная прога выложена и разжевана в МиниБотовской вике в уроках, но там тока на васике, так что можешь туда даже не ходить... :pardon:
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: Нужна помощь в совмещение 3 программ.

Сообщение space » 17 июн 2008, 14:50

Мур, а не чего смеяться. Если мне на васике писать всё это, то значит заново во всё разбираться :o придётся, а на си я хоть что-то понимаю.
не можете помочь так и скажите :(
Аватара пользователя
space
 
Сообщения: 548
Зарегистрирован: 17 июн 2007, 23:44
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич

Re: Нужна помощь в совмещение 3 программ.

Сообщение Кирилл » 17 июн 2008, 17:58

с Бейсиком разобраться получиться очень быстро, тем более если есть опыт написания прог на си. А подпрограммы в бейсике осуществляются сказочно просто.
Кирилл
 
Сообщения: 432
Зарегистрирован: 20 окт 2005, 16:11
Откуда: Вильнюс,Литва
прог. языки: Basic

Re: Нужна помощь в совмещение 3 программ.

Сообщение AlexCH » 17 июн 2008, 18:24

space писал(а):Нажатие кнопки Mobile, за тем start и если нужно остановить,
* то нажимаем кнопку stop. После кнопки stop переходим сново в
* режим ожидания.
*/
* Нажатие кнопки Line Tracer, за тем start и если нужно остановить,
* то нажимаем кнопку stop. После кнопки stop переходим сново в
* режим ожидания.


А не проще сделать три кнопки - Mobile, LineTracer и Стоп?
Нажимаешь кнопку - запускается нужный режим.
Нажимаешь Стоп - режим ожидания.

Код: Выделить всёРазвернуть
void select_mode(void);  // опережающее описание select_mode(void)

char button;  // переменная кода кнопки

void scanbutton(void){
// тут сканирование кнопок. результат в переменную button
}


void prog1(void){
// тут подпрограмма 1
if (button = exit){
  select_mode(); 
};
}

void prog2(void){
// тут подпрограмма 2
if (button = exit){
  select_mode(); 
};
}

void select_mode(void){
button = 0;                        // обнуление переменной
while(Button == 0){             // ожидание нажатия кнопки
   PORTD^=(1<<6);              // изменить состояние светодиода подключенного к PORTD.6
   delay_ms(100);                //  светодиод будет мигать с этой задержкой пока не нажата ни одна кнопка
   scanbutton();                  //  проверить состояние кнопок
  };
  switch (button){
   case 1:
    prog1();  // запуск prog1
   break;
   case 2:
    prog2(); // запуск prog1
   break;
  };

}


void main(void)
{

while()1{
   select mode();
};                         
 
}


Вот примерно так :)
AlexCH
 
Сообщения: 50
Зарегистрирован: 12 мар 2007, 23:15
Откуда: Иркутск

Re: Нужна помощь в совмещение 3 программ.

Сообщение space » 17 июн 2008, 18:51

Можно и без кнопки старт. Завтра и попробую после сдачи экзамена.

Добавлено спустя 5 минут 53 секунды:
А вставлять программу полностью сюда:
Код: Выделить всёРазвернуть
void prog1(void){
// тут подпрограмма 1
if (button = exit){
  select_mode();
};

Вот так?
Код: Выделить всёРазвернуть
void prog1(void){
#include <avr/io.h>
#define IN PIND
#define LED PD6 // светодиод

//------------------------------------------------------------------------------
// Задержка t х 10ms
//------------------------------------------------------------------------------
#define K_DELAY_10ms   F_CPU/600   // для F_CPU=8000000
void Delay_10ms(unsigned char t) {
  if (t==0) return;
  unsigned int i;
  while (t--) for(i=0;i<K_DELAY_10ms; i++);
}

//------------------------------------------------------------------------------
// Главная программа
//------------------------------------------------------------------------------
int main(void)
{

  DDRD  = 0x40;  // назначаем все линии порта D на вход, кроме PD6
  PORTD = 0xbf;  // подключаем внутренние нагрузочные резисторы, кроме PD6
 
  while(1) {   // запускаем бесконечный цикл
    cbi(PORTD, LED); // Зажигаем LED
    Delay_10ms(100);  // пауза
    sbi(PORTD, LED); // гасим LED
    Delay_10ms(100);  // пауза
    }
}

if (button = exit){
  select_mode();
};
Аватара пользователя
space
 
Сообщения: 548
Зарегистрирован: 17 июн 2007, 23:44
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич

Re: Нужна помощь в совмещение 3 программ.

Сообщение AlexCH » 17 июн 2008, 19:27

Нет, не так. Видимо надо учиться программировать :)
Тебе нужно разобраться, что значит каждая строка кода.
Иначе написать что-то свое не сможешь.
И компилятор, у меня CVAVR, у тебя видимо другой.
В последнем твоем примере программа мигает светодиодом. Если ее перенести в функцию prog1, это будет примерно так:

Код: Выделить всёРазвернуть
void prog1(void){
  while(1) {   // запускаем бесконечный цикл
    cbi(PORTD, LED); // Зажигаем LED
    Delay_10ms(100);  // пауза
    sbi(PORTD, LED); // гасим LED
    Delay_10ms(100);  // пауза
    // здесь нужно проверить какая кнопка нажата
    if (button = exit){   // если кнопка выход
     select_mode();      // переходим в режим выбора
  };
}


При этом используемая в подпрограмме "prog1" функция "Delay_10ms" должна быть описана в программе.
AlexCH
 
Сообщения: 50
Зарегистрирован: 12 мар 2007, 23:15
Откуда: Иркутск

Re: Нужна помощь в совмещение 3 программ.

Сообщение space » 21 июн 2008, 17:56

Ну вот. Как делать подпрограммы в WinAVR разобрался. Теперь пробую сделать типо стартовой кнопки чтоб разобраться как это дело работать будет.
Но пока как то не очень получается. Прога получилась из 3 файлов. R1-B1.c - главный файл, R1-B1.h - заголовочный файл и Button.c - файл в котором прога для стартовой кнопки. Помучаюсь пока ещё сам, если ни чего не получится надеюсь поможите. А вот собственно результат:
Вложения
.rar
(22.32 КиБ) Скачиваний: 28
Аватара пользователя
space
 
Сообщения: 548
Зарегистрирован: 17 июн 2007, 23:44
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич

Re: Нужна помощь в совмещение 3 программ.

Сообщение space » 24 июн 2008, 15:20

Слушайте, а можите хотя бы примерно показать как сделать запуск программы (всей) по нажатию кнопки(В WinAVR)? Пожалуйста :oops:
Аватара пользователя
space
 
Сообщения: 548
Зарегистрирован: 17 июн 2007, 23:44
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич

След.

Вернуться в Микроконтроллеры

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

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

Mail.ru counter