#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define F_CPU 8000000
//----------------------------------
#define S0 6
#define S1 3
#define S2 6
#define S3 4
#define sensorOut 2
//---------------------------------------
volatile unsigned char status;
volatile int tim = 0;
//---------------------------------------
void red_value(void)
{
DDRD &= ~(1 << S2);
DDRD &= ~(1 << S3);
}
//----------------------------------------
void green_value(void)
{
DDRD &= ~(1 << S2);
DDRD &= ~(1 << S3);
}
//----------------------------------------
void blue_value(void)
{
DDRD &= ~(1 << S2);
DDRD |= (1 << S3);
}
//----------------------------------------
void data_ini(void)
{
DDRD = B11110111;
//DDRD |= (1 << S2);
// DDRD |= (1 << S3);
}
//-----------------------------------------
void int_ini(void)
{
//включим прерывания INT0 по нисходящему фронту
EICRA |= (1 << ISC00);
//разрешим внешнее прерывание INT0 и INT1
EIMSK |= (1 << INT0);
}
//------------------------------------------
void TIMER_INI(void)
{
TCCR1A = 0x00; //обычный режим работы таймера
TCCR1B = B00000010; //предделитель на 1024
TIMSK1 = 0x00; //прерывание по переполнению нет
}
//------------------------------------
int main(void)
{
Serial.begin(9600);
data_ini();
int_ini();
TIMER_INI();
while (1)
{
red_value();
while ( status != 2 );
Serial.println(TCNT1);
}
}
//-----------------------------
ISR(INT0_vect)
{
//проверяем уровень синала PD2( ECHO )
if (digitalRead(2)==1)
{
TCNT1 = 0;
status = 1;
}
else
{
//задний фронт - запоминаем значение таймера
tim = TCNT1;
status = 2;
}
}




