Нормально опишите алгоритм
Помогите с алгоритмом)
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Помогите с алгоритмом)
Т.е. светодиод "water_pump" не должен гореть вначале ? Или должен, но должен погаснуть как импульсы пойдут ?
Нормально опишите алгоритм
Нормально опишите алгоритм
Re: Помогите с алгоритмом)
Код: Выделить всё
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: Помогите с алгоритмом)
Вы можете сказать, что должно быть со светодиодом "water_pump" в начале программы, и что с ним должно происходить когда есть импульсы и когда их нет ?
Re: Помогите с алгоритмом)
ПРи нормальной работе в данном тесте не должен гореть. А если импульсы не пойдут, то должен загореться. Но это так , для наглядности. В место его в программе заведу разрешение или запрет на работу )
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Помогите с алгоритмом)
Держите вариант.При нормальной работе (импульсы идут) светодиод не горит (также вначале при старте). Как импульсы пропадают (либо их изначально не было), через 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();
}
}
//**********************************************************************************************************************//
Re: Помогите с алгоритмом)
Alex, вы не будете против, если я к вам обращусь за помщью в причесывании кода программы? ))
А то там такое, ужос)) Это такой мой первый проект на МК. Но работает оно , в автомобиле стоит, по сигналке запускается и останавливается. Планируется туда rs232 , чтобы на дешевый андроид выводить параметры, даже rc-05 Bluetooth модуль прикупил )) Нужна будет помощь в том, чтобы некоторые части кода в функции оформить.
А то там такое, ужос)) Это такой мой первый проект на МК. Но работает оно , в автомобиле стоит, по сигналке запускается и останавливается. Планируется туда rs232 , чтобы на дешевый андроид выводить параметры, даже rc-05 Bluetooth модуль прикупил )) Нужна будет помощь в том, чтобы некоторые части кода в функции оформить.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Помогите с алгоритмом)
Вы лучше сюда обращайтесь, здесь не только я один нахожусь 
У меня, в основном, нет свободного времени для помощи. Это сегодня я коротаю вечерок на форумах, с кружечкой пива
У меня, в основном, нет свободного времени для помощи. Это сегодня я коротаю вечерок на форумах, с кружечкой пива
Re: Помогите с алгоритмом)
Спасибо большое )) Пойду я спать, пожалуй, на работу с утра )) до связи.
Re: Помогите с алгоритмом)
Я последнее время всякие переключения отлавливаю следующим образом.
Код: Выделить всё
#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;
}
}
}