Chciałem napisać program, który zlicza wystąpienia stanu niskiego na portach wejściowych (impulsy do 1kHz). Ten, który napisałem jakby liczył czas, w którym miałem wciśnięty przycisk. Podejmowałem już próby napisania programu, gdzie wykorzystując funkcję delay (i zabezpieczenie przed drganiami styków)
Jak poniżej:
Działanie jest takie - mam 4 klawisze, ale nie mogę dojść do sytuacji, by niezależnie od siebie inkrementowały wartości. Najpierw należy przytrzymać tego, który chcę by zwiększał wartość, następnie kliknąć tego, który działał do tej pory. A chcę niezależnej inkrementacji. Jak tego dokonać ?
Jak poniżej:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include "lcd.h"
#include <avr/delay.h>
int kolo1=0;
int kolo2=0;
int kolo3=0;
int kolo4=0;
unsigned char buf[10];
void vel1(void)
{
kolo1++;
_delay_us(90);
while(bit_is_clear(PINC, PC0)) ;
_delay_us(150);
while(!bit_is_clear(PINC, PC0));
}
void vel2(void)
{
kolo2++;
_delay_us(90);
while(bit_is_clear(PINC, PC1)) ;
_delay_us(150);
while(!bit_is_clear(PINC, PC1));
}
void vel3(void)
{
kolo3++;
_delay_us(90);
while(bit_is_clear(PINC, PC6)) ;
_delay_us(150);
while(!bit_is_clear(PINC, PC6));
}
void vel4(void)
{
kolo4++;
_delay_us(90);
while(bit_is_clear(PINC, PC7)) ;
_delay_us(150);
while(!bit_is_clear(PINC, PC7));
}
int main(void) //Program główny
{
// konfiuguracja portow
DDRB = 0b10000011;
PORTB = 0b01111111;
DDRC = 0b11111111;
PORTC = 0b11111111;
DDRD = 0b11111111;
PORTD = 0b11111111;
TCCR1A = 0x00;
TCCR1B = 0b00001101;
OCR1A = 0xD8;
TIMSK = _BV(TOIE1)|_BV(OCIE1A);
lcd_init(LCD_DISP_ON);
while (1)
{
if(bit_is_clear(PINC, PC0)) vel1();
if(bit_is_clear(PINC, PC1)) vel2();
if(bit_is_clear(PINC, PC6)) vel3();
if(bit_is_clear(PINC, PC7)) vel4();
if(1){
itoa(kolo1,buf,10); // zmiana int na char
lcd_gotoxy(0,0);
lcd_puts(buf);
itoa(kolo2,buf,10);
lcd_gotoxy(5,0);
lcd_puts(buf);
itoa(kolo3,buf,10);
lcd_gotoxy(0,1);
lcd_puts(buf);
itoa(kolo4,buf,10);
lcd_gotoxy(5,1);
lcd_puts(buf);
}} }Działanie jest takie - mam 4 klawisze, ale nie mogę dojść do sytuacji, by niezależnie od siebie inkrementowały wartości. Najpierw należy przytrzymać tego, który chcę by zwiększał wartość, następnie kliknąć tego, który działał do tej pory. A chcę niezależnej inkrementacji. Jak tego dokonać ?