Esempio n. 1
0
int main(void) {
	DDRB |= _BV(PB0); // LED out

	PORTB |= _BV(PB3); //set CS for RFM12 high in case it is present
	DDRB |= _BV(PB3);

	init();
	init_timer();
	dimmer_init();

	sei();

	new_netvar_output_8(0x0000, 0x00, set_led,    (void *) 0);

	new_netvar_output_8(0x0100, 0x50, set_dimmer, (void *) 0);
	new_netvar_output_8(0x0100, 0x51, set_dimmer, (void *) 1);
	new_netvar_output_8(0x0100, 0x52, set_dimmer, (void *) 2);
	new_netvar_output_8(0x0100, 0x53, set_dimmer, (void *) 3);

	new_lamp_controller(0x0100, 4);


	while (1) {
		can_handler();
		if (ticks_in_ms >= 10) {
			cli();
			ticks_in_ms -= 10;
			sei();

			netvar_handle_events();
		}
	}
}
Esempio n. 2
0
LOCAL void ICACHE_FLASH_ATTR dimmer_event(i2c_config *config) {
	LOCAL uint8 count = 0;
	i2c_status status;
	
	dimmer_config_data *config_data = (dimmer_config_data *)config->data;
	uint8  old_relay = config_data->relay;
	uint8  old_brightness = config_data->brightness;
	uint16 old_current = config_data->current;
	
	count++;
	uint8 addr = config->address;
	dimmer_init(&addr, &status);
	
	if (
		status == I2C_OK && 
		(
			config_data->relay != old_relay ||
			config_data->brightness != old_brightness ||
			abs(config_data->current - old_current) > dimmer_threshold || 
			(count > dimmer_each && config_data->current != old_current)
		)
	) {
		count = 0;
		
		char response[WEBSERVER_MAX_VALUE];
		dimmer_response(config, response, false);
		user_event_raise(DIMMER_URL, response);
	}
	
	if (count > dimmer_each) {
		count = 0;
	}
}
Esempio n. 3
0
int main(void)
{
	// watchdog is still enabled after a software reset and needs to be cleared immediately
	MCUSR = 0;
	wdt_disable();
	
	//uart_init(UART_BAUD_SELECT_DOUBLE_SPEED(57600, F_CPU));
	
	buttons_leds_init();
	dimmer_init();
	hm_init();
	sei();
	
	while(1)
    {
		hm_task();
    }
}
Esempio n. 4
0
 void wakeup(void) {
   if (!sleepmode)
     return;
   CLKPR = _BV(CLKPCE);
   CLKPR = 0;
   DEBUGP("waketime");
   sleepmode = 0;
   // plugged in
   // wait to verify
   _delay_ms(20);
   if (ACSR & _BV(ACO)) 
     return;
   
   // turn on pullups
   initbuttons();

   dimmer_init();

   // turn on boost
   brightness_level = eeprom_read_byte((uint8_t *)EE_BRIGHT);
   boost_init(brightness_level);

   // turn on vfd control
   vfd_init();

   // turn on display
   VFDSWITCH_PORT &= ~_BV(VFDSWITCH); 
   VFDBLANK_PORT &= ~_BV(VFDBLANK);
   volume = eeprom_read_byte((uint8_t *)EE_VOLUME); // reset
   
   speaker_init();

   kickthedog();

   setalarmstate();

   // wake up sound
   beep(880, 1);
   beep(1760, 1);
   beep(3520, 1);

   kickthedog();
 }
Esempio n. 5
0
void ICACHE_FLASH_ATTR user_dimmer_init() {
	uint8 addr = 0;
	i2c_status status;
	#ifdef DIMMER_REV_A   // DIMMER - Revision A
	stdout_disable();
	#endif
	dimmer_init(&addr, &status);
	
	uint8 i;
	for (i=0; i<DIMMER_URLs_COUNT; i++) {
		webserver_register_handler_callback(DIMMER_URLs[i], dimmer_handler);
	}
	
	device_register(I2C, DIMMER_ID, DIMMER_URL, NULL, NULL);
	
	if (status == I2C_OK) {
		dimmer_timer_init();
	}
}
Esempio n. 6
0
int main(void) {
  //  uint8_t i;
  uint8_t mcustate;

  // turn boost off
  TCCR0B = 0;
  BOOST_DDR |= _BV(BOOST);
  BOOST_PORT &= ~_BV(BOOST); // pull boost fet low

  // check if we were reset
  mcustate = MCUSR;
  MCUSR = 0;

  wdt_disable();
  // now turn it back on... 2 second time out
  //WDTCSR |= _BV(WDP0) | _BV(WDP1) | _BV(WDP2);
  //WDTCSR = _BV(WDE);
  wdt_enable(WDTO_2S);
  kickthedog();

  // we lost power at some point so lets alert the user
  // that the time may be wrong (the clock still works)
  timeunknown = 1;

  // have we read the time & date from eeprom?
  restored = 0;

  // setup uart
  uart_init(BRRL_192);
  //DEBUGP("VFD Clock");
  DEBUGP("!");

  //DEBUGP("turning on anacomp");
  // set up analog comparator
  ACSR = _BV(ACBG) | _BV(ACIE); // use bandgap, intr. on toggle!
  // settle!
  if (ACSR & _BV(ACO)) {
    // hmm we should not interrupt here
    ACSR |= _BV(ACI);

    // even in low power mode, we run the clock 
    DEBUGP("clock init");
    clock_init();  

  } else {
    // we aren't in low power mode so init stuff

    // init io's
    initbuttons();
    
    VFDSWITCH_PORT &= ~_BV(VFDSWITCH);
    
    DEBUGP("turning on buttons");
    // set up button interrupts
    DEBUGP("turning on alarmsw");
    // set off an interrupt if alarm is set or unset
    EICRA = _BV(ISC00);
    EIMSK = _BV(INT0);
  
    displaymode = SHOW_TIME;
    DEBUGP("vfd init");
    vfd_init();
   
    dimmer_init();
 
    DEBUGP("boost init");
    brightness_level = eeprom_read_byte((uint8_t *)EE_BRIGHT);
    boost_init(brightness_level);
    sei();

    region = eeprom_read_byte((uint8_t *)EE_REGION);
    
    DEBUGP("speaker init");
    speaker_init();

    beep(4000, 1);

    DEBUGP("clock init");
    clock_init();  

    DEBUGP("alarm init");
    setalarmstate();
  }
  DEBUGP("done");
  while (1) {
    //_delay_ms(100);
    kickthedog();
    //uart_putc_hex(ACSR);
    if (ACSR & _BV(ACO)) {
      // DEBUGP("SLEEPYTIME");
      gotosleep();
      continue;
    }
    //DEBUGP(".");
    if (just_pressed & 0x1) {
      just_pressed = 0;
      switch(displaymode) {
      case (SHOW_TIME):
	displaymode = SET_ALARM;
	display_str("set alarm");
	set_alarm();
	break;
      case (SET_ALARM):
	displaymode = SET_TIME;
	display_str("set time");
	set_time();
	timeunknown = 0;
	break;
      case (SET_TIME):
	displaymode = SET_DATE;
	display_str("set date");
	set_date();
	break;
      case (SET_DATE):
	displaymode = SET_BRIGHTNESS;
	display_str("set brit");
	set_brightness();
	break;
      case (SET_BRIGHTNESS):
	displaymode = SET_DIMMER;
	display_str("set dimr");
	set_dimmer();
	break;
      case (SET_DIMMER):
	displaymode = SET_VOLUME;
	display_str("set vol ");
	set_volume();
	break;
      case (SET_VOLUME):
	displaymode = SET_REGION;
	display_str("set regn");
	set_region();
	break;
	/*
      case (SET_REGION):
	displaymode = SET_SNOOZE;
	display_str("set snoz");
	set_snooze();
	break;
	*/
      default:
	displaymode = SHOW_TIME;
      }
    } else if ((just_pressed & 0x2) || (just_pressed & 0x4)) {
      just_pressed = 0;
      displaymode = NONE;
      display_date(DAY);

      kickthedog();
      delayms(1500);
      kickthedog();

      displaymode = SHOW_TIME;     
    } 
  }
}