void temp_meter_05sec_timer(void)
{
    //flash_led_once();

    switch(timerCallNumber++)
    {
    case 0:             // Start measurements
    req:
        request_temperature_measurement();
        break;

    case 1:        	// 0.5 sec passed, do nothing - we need 0.75 sec
        break;

    case 2:        	// 1 sec passed, read measurements.

        read_temperature_data();
#if TEMP_FAST_RESTART
        timerCallNumber = 1;
        goto req;
#else
        timerCallNumber = 0;
        break;
#endif
    }
}
Esempio n. 2
0
int main(void)
{
	//disable interrupts
	cli();
	//reset watchdog
	wdt_reset();
	wdt_disable();
	
	init_serial_port(9600);
	init_rf_module();
	
	//TODO: set-up unused pins to avoid floating!
	
	//set direction registers ( 1 - output, 0 - input )
	DDRB |= ( 1 << LED1_PIN ) | ( 1 << LED2_PIN );
	
	set_led_state(1, 0);
	set_led_state(2, 0);
	
	
	//set up WDT interrupt
	_WD_CONTROL_REG = (1<<WDCE) | (1<<WDE);
	//Start watchdog timer with 8s prescaler
	_WD_CONTROL_REG = (1<<WDIE) | (1<<WDE) | (1<<WDP3) | (1<<WDP0);
	
	//Enable global interrupts
	sei();
	
	for ( int i = 0; i < 3; i++ )
	{
		set_led_state(1, 1);
		_delay_ms(100);
		set_led_state(1, 0);
		_delay_ms(350);
	}
	
	uint8_t cycle_count = 0;
	
	while ( 1 )
	{
		cycle_count++;
		if ( cycle_count == 3 )
		{
			for ( int i = 0; i < 2; i++ )
			{
				set_led_state(2, 1);
				_delay_ms(200);
				set_led_state(2, 0);
				_delay_ms(200);
			}
			wdt_reset();
			read_temperature_data();
			cycle_count = 0;
		}else
		{
			set_led_state(1, 1);
			_delay_ms(1000);
			set_led_state(1, 0);	
		}
		
		//wdt_reset();
		
		set_sleep_mode(SLEEP_MODE_PWR_DOWN);
		sei();
		sleep_mode();

	}
	
	/*
	float temperature, humidity;
	while(1)
    {
        _delay_ms(1000);
		power_up_sensor();
		_delay_ms(2500);
		temperature = 0.0;
		humidity = 0.0;
		read_data(&temperature, &humidity);
		
		_delay_ms(1500);
		power_down_sensor();
		
    }*/
}