Помогите с алгоритмом)

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Помогите с алгоритмом)

Сообщение Аlex »

Т.е. светодиод "water_pump" не должен гореть вначале ? Или должен, но должен погаснуть как импульсы пойдут ?
Нормально опишите алгоритм :)
Sel4
Открыл глаза
Сообщения: 74
Зарегистрирован: Пн дек 06, 2010 23:57:09
Откуда: Обнинск

Re: Помогите с алгоритмом)

Сообщение Sel4 »

Код: Выделить всё


b=key2; //а было key1
if(b!=c) count1=500000;
if(count1){
  count1--;
  pump_on;
}
else{
  pump_off;
}
c=b;
Последний раз редактировалось Sel4 Вт май 12, 2015 22:52:35, всего редактировалось 1 раз.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Помогите с алгоритмом)

Сообщение Аlex »

Вы можете сказать, что должно быть со светодиодом "water_pump" в начале программы, и что с ним должно происходить когда есть импульсы и когда их нет ?
Sel4
Открыл глаза
Сообщения: 74
Зарегистрирован: Пн дек 06, 2010 23:57:09
Откуда: Обнинск

Re: Помогите с алгоритмом)

Сообщение Sel4 »

ПРи нормальной работе в данном тесте не должен гореть. А если импульсы не пойдут, то должен загореться. Но это так , для наглядности. В место его в программе заведу разрешение или запрет на работу )
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Помогите с алгоритмом)

Сообщение Аlex »

Держите вариант.
Pump_achtung.rar
(58.75 КБ) 99 скачиваний
При нормальной работе (импульсы идут) светодиод не горит (также вначале при старте). Как импульсы пропадают (либо их изначально не было), через 500000 тиков счётчика он загорается.

Код :
Спойлер

Код: Выделить всё

#define key1 (bit_is_set(PINC, PC0))

#define TIME_OUT        500000L

//**********************************************************************************************************************//
void pump(void){
static struct{unsigned start:1; unsigned cur:1; unsigned pre:1; unsigned long count;}mPomp={0,0,0,TIME_OUT};

if(!mPomp.start){mPomp.start=1; mPomp.pre = key1;}

mPomp.cur=key1;
if(mPomp.cur!=mPomp.pre) mPomp.count=TIME_OUT;
if(mPomp.count){
  mPomp.count--;
  pump_off;
}
else{
  pump_on;
}
mPomp.pre=mPomp.cur;
}
//**********************************************************************************************************************//

//**********************************************************************************************************************//
int main(void)
{

................
................

while (1)    {

pump();

}
}
//**********************************************************************************************************************//
Sel4
Открыл глаза
Сообщения: 74
Зарегистрирован: Пн дек 06, 2010 23:57:09
Откуда: Обнинск

Re: Помогите с алгоритмом)

Сообщение Sel4 »

Alex, вы не будете против, если я к вам обращусь за помщью в причесывании кода программы? ))
А то там такое, ужос)) Это такой мой первый проект на МК. Но работает оно , в автомобиле стоит, по сигналке запускается и останавливается. Планируется туда rs232 , чтобы на дешевый андроид выводить параметры, даже rc-05 Bluetooth модуль прикупил )) Нужна будет помощь в том, чтобы некоторые части кода в функции оформить.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Помогите с алгоритмом)

Сообщение Аlex »

Вы лучше сюда обращайтесь, здесь не только я один нахожусь :)
У меня, в основном, нет свободного времени для помощи. Это сегодня я коротаю вечерок на форумах, с кружечкой пива :)
Sel4
Открыл глаза
Сообщения: 74
Зарегистрирован: Пн дек 06, 2010 23:57:09
Откуда: Обнинск

Re: Помогите с алгоритмом)

Сообщение Sel4 »

Спасибо большое )) Пойду я спать, пожалуй, на работу с утра )) до связи.
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Re: Помогите с алгоритмом)

Сообщение pokk »

Я последнее время всякие переключения отлавливаю следующим образом.

Код: Выделить всё

#define key1  PINC.0 
unsigned char mode=PIN_NULL;

//----------
if(count>500000){      //Период опроса
   count=0;         //
   switch(mode){
//---------- состояние на выводе 0-----------
      case PIN_NULL:{
         if(key1==1){      //На выводе поймали 1 значит произошёл переход с 0 в 1
            mode=PIN_ONE;   //Переключаемся в "единичное" состояние 
         }
         //=================
         //Тут можно запускать обработчик "нулевого" состояния     
         break;
      }
//--------Текущее состояние на выводе 1-------------
      case PIN_ONE:{   
         if(key1==0){      //На выводе поймали 0 значит произошёл переход с 0 в 1
            mode=PIN_NULL;   //Переключаемся в "нулевое" состояние 
         }
         //=================
         //Тут можно запускать обработчик "единичного" состояния     
         break;
      }   
   }
}
Ответить

Вернуться в «AVR»