#include "main.h"
#include "IR.h"
#define OUT PB2 // пин выхода устройства



volatile uint16_t count=0; // счетчик прерываний по таймеру
volatile uint8_t signal=0; // пременная для принятого сигнала
volatile uint16_t start; // стартовое значение count
volatile uint16_t dlinna; // длинна сигнала в тиках count
volatile uint8_t code; // код


// перерывание по таймеру
ISR (TIM0_COMPA_vect) {
	count++; // тик так
	if (count>=10000) // максимум для обнуления, при 5000 приемник не воспринимает сигнал
	{
		count=0;
	}
}


// прерывание по сигналу от приемника
ISR (PCINT0_vect) {
	if (!(PINB&(1<<RX)))
	{
		start=count; // начало сигнала
	} else {
		dlinna=count-start; // конец сигнала
		if (dlinna>=50) // если длинна в диапазоне
		{
			code|=(1<<signal);
		}
		signal++;
	}
}


	
int main(void)
{
	DDRB|=(1<<OUT); // выход 
	
	uint8_t stat=0; // статус датчика
	IR_ini(); // настройки приема и предачи инфракрасного сигнала, все в куче
	sei();// разрешаем прерывания
	


    while (1) 
    {
		if (!count) // когда нуль - шлем и принимаем сигнал
		{
			signal=0; // 
			code=0;	//
			//IR_code(IR_CODE);// для протеуса
			IRR_code(IR_CODE); // для прошивки
			//stat=status(code, 0);
     stat=status(code);
		}

//-------- индикация припятствия--------------
			if (stat)
			{
				PORTB|=(1<<OUT); // врубаем
			} else
			{
				PORTB&=~(1<<OUT); // вырубаем
			}


				
    }//w
}//m
