Ola a todos,
Sim, também pensei em usar um disco de um rato, mas continuei a alimentar a ideia do potenciómetro pelo facto de ser mais robusto mecanicamente.
A função de der o botão estou a usar o exemplo do mikroC, mas o meu problema é mesmo timers e interrupções, estou leigo nessa materia, tenho andado a ler um pouco sobre como configura-los e usa-los.
Aproveito para postar o código que já tenho, mas que ainda está muito crú....
int i, cont, temp, aux_R, aux_0, aux_1, aux_2, aux_3, aux_4, aux_5, aux_6, tol_A=100, tol_B=300;
unsigned short oldstate, oldstate1,contador, modo_prog = 0, modo_RUN, xx;
void mem_R(){
PORTB = 0x08;
Delay_ms(50);
aux_R = ADC_Read(2);
Delay_ms(200);
PORTB = 0x88;
Delay_ms(200);
PORTB = 0x08;
}
void mem_0(){
PORTB = 0x40;
Delay_ms(50);
aux_0 = ADC_Read(2);
Delay_ms(200);
PORTB = 0xC0;
Delay_ms(200);
PORTB = 0x40;
}
void mem_1(){
PORTB = 0x79;
Delay_ms(50);
aux_1 = ADC_Read(2);
Delay_ms(200);
PORTB = 0xF9;
Delay_ms(200);
PORTB = 0x79;
}
void mem_2(){
PORTB = 0x24;
Delay_ms(50);
aux_2 = ADC_Read(2);
Delay_ms(200);
PORTB = 0xA4;
Delay_ms(200);
PORTB = 0x24;
}
void mem_3(){
PORTB = 0x30;
Delay_ms(50);
aux_3 = ADC_Read(2);
Delay_ms(200);
PORTB = 0xB0;
Delay_ms(200);
PORTB = 0x30;
}
void mem_4(){
PORTB = 0x19;
Delay_ms(50);
aux_4 = ADC_Read(2);
Delay_ms(200);
PORTB = 0x99;
Delay_ms(200);
PORTB = 0x19;
}
void mem_5(){
PORTB = 0x12;
Delay_ms(50);
aux_5 = ADC_Read(2);
Delay_ms(200);
PORTB = 0x92;
Delay_ms(200);
PORTB = 0x12;
}
void mem_6(){
PORTB = 0x02;
Delay_ms(50);
aux_6 = ADC_Read(2);
Delay_ms(200);
PORTB = 0x82;
Delay_ms(200);
PORTB = 0x02;
}
unsigned short digitos_RUN(unsigned short num)
{
switch (num)
{
case 0 : return 0x08; //R.
case 1 : return 0x40; //0.
case 2 : return 0x79; //1.
case 3 : return 0x24; //2.
case 4 : return 0x30; //3.
case 5 : return 0x19; //4.
case 6 : return 0x12; //5.
case 7 : return 0x02; //6.
}
}
void main()
{
TRISA = 0xFF; // Configura para ser Entrada
TRISB = 0x00; // Configura para ser saída
TRISC = 0xFF; // Configura para ser Entrada
PORTA = 0x00; //Inicializa as portas
PORTB = 0x00; //Inicializa as portas
PORTC = 0x00; //Inicializa as portas
do{
if (Button(&PORTC,0,20,1)) //botão do RC0 (incrementa) pressionado?
{
modo_RUN = (1);
modo_PROG = (0);
//PORTB = (0xBF);
PORTB = (0xB6);
}
// modo Programação
else {
modo_RUN = (0);
modo_PROG = (1);
if (Button(&PORTC,7,1,0)) //botão do RA0 (incrementa) pressionado?
{
oldstate = 1;
}
if (oldstate && Button(&PORTC,7,1,1))
{
contador++;
oldstate = 0;
}
if(contador>=7) contador = 7; //testa para ver se chegou no valor máximo
PORTB = digitos_RUN(contador); //faz a conversão de binário para 7 segmentos
if (Button(&PORTC,2,1,0))
oldstate1 = 1;
}
if (oldstate1 && Button(&PORTC,2,1,1))
{
contador--;
oldstate1 = 0;
}
if(contador>=14) contador = 0; //testa para ver se chegou no valor mínimo
PORTB = digitos_RUN(contador); //faz a conversão de binário para 7 segmentos
if (PORTC.F1==0 && contador==0 )
{
mem_R();
}
if (PORTC.F1==0 && contador==1 )
{
mem_R();
}
if (PORTC.F1==0 && contador==2 )
{
mem_1();
}
if (PORTC.F1==0 && contador==3 )
{
mem_2();
}
if (PORTC.F1==0 && contador==4 )
{
mem_3();
}
if (PORTC.F1==0 && contador==5 )
{
mem_4();
}
if (PORTC.F1==0 && contador==6 )
{
mem_5();
}
if (PORTC.F1==0 && contador==7 )
{
mem_6();
}
} while (modo_prog = 1);
O que dizem? Façam os vossos comentários...
Obrigado.