подскажите пожалуйста как сделать чтобы при коротком нажатии кнопки свет не горел ,а при длинном все работало(когда жму долго кнопку яркость начинает увеличиваться,когда дошла пика при долгом нажатии кнопки яркость начинает падать)
с увеличением и уменьшением яркости все работает нормально а во с коротким нажатием не знаю как сделать
:
Код: Выделить всё
#include <tiny13.h>
#include <delay.h>
float i=43;
float t=0;
int b,c;
//внешнее прерывание
interrupt [EXT_INT0] void TO (void)
{
//////////////////
if (b)
{
i=(float)(i+0.03); //увеличиваем яркость
}
//////////////////
if (c)
{
i=(float)(i-0.03); //уменьшаем яркость
}
/////////////////
while(t<i)
{
t=(float)(t+0.1); //цикл увеличения или уменьшения яркости
delay_us(1);
}
t=0;
PORTB.2=1;
}
void main(void)
{
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_ //делитель частоты генератора
#pragma optsize+
#endif
PORTB=0b00001000;
DDRB=0x04;
GICR=0b01000000; //вкл внешнее прерывание
MCUCR=0x01; //вкл прерывание по спаду и по возраст
#asm ("sei") //разреш глоб прерывания
////////////////////////////////////////////////////////////
label0:
while(1)
{
while(i<45)
{ c=0;
if((!PINB.3)&(i<44)){b=1;}
else {b=0;}
if ((!PINB.3)&(i>43))
{goto label1;}
PORTB.2=0;
}
i=0;
}
///////////////////////////////////////////////
label1:
while(1)
{
while(i<45)
{ b=0;
if((!PINB.3)&(i<44)&(i>2)){c=1;}
else {c=0;}
if ((!PINB.3)&(i<2))
{goto label0;}
PORTB.2=0;
}
i=0;
}
}делал и с флагами
вот думал как правильно сделать эту кнопку чтобы уместить весь проект в attiny13
подскажите алгоритм


