Пример #1
0
void AsebaVMResetCB(AsebaVMState *vm) {
	leds_set_circle(0,0,0,0,0,0,0,0);
	leds_set_body_rgb(0,0,0);
	leds_set(LED_SOUND,0);
	leds_set(LED_RC,0);
	behavior_start(B_LEDS_ACC);
	behavior_start(B_LEDS_NTC);
	behavior_start(B_LEDS_MIC);
	behavior_start(B_LEDS_PROX);
	behavior_start(B_SOUND_BUTTON);
	behavior_start(B_LEDS_MIC);
	behavior_start(B_LEDS_RC5);
	prox_disable_network();
	memset(vm->variables, 0, vm->variablesSize*sizeof(sint16));
	vmVariables.id = vmState.nodeId;
	vmVariables.productid = PRODUCT_ID;
	vmVariables.fwversion[0] = FW_VERSION;
	vmVariables.fwversion[1] = FW_VARIANT;	
}
Пример #2
0
static int behavior_switch(unsigned char id)
{
  /* if the current behavior is done, dont
     take into the account the priority and
     dont stop it.
   */

  if (!behavior_is_done())
    {
      if (prio_by_id(id) < prio_by_id(current_behavior.id))
	return -1;

      behavior_stop();
    }

  /* start the new one */

  behavior_start(id);

  return 0;
}
Пример #3
0
void AsebaVMResetCB(AsebaVMState *vm) {
	leds_set_circle(0,0,0,0,0,0,0,0);
	leds_set_body_rgb(0,0,0);
	leds_set(LED_SOUND,0);
	leds_set(LED_RC,0);
	behavior_start(B_LEDS_ACC);
	behavior_start(B_LEDS_NTC);
	behavior_start(B_LEDS_MIC);
	behavior_start(B_LEDS_PROX);
	behavior_start(B_SOUND_BUTTON);
	behavior_start(B_LEDS_MIC);
	behavior_start(B_LEDS_RC5);
	prox_disable_network();
	events_flags[0] = 0;
	events_flags[1] = 0;
	memset(vm->variables, 0, vm->variablesSize*sizeof(int16_t));
	vmVariables.id = vmState.nodeId;
	vmVariables.productid = PRODUCT_ID;
	vmVariables.fwversion[0] = FW_VERSION;
	vmVariables.fwversion[1] = FW_VARIANT;
	vmVariables.sd_present = !sd_user_open("_TESTSD");
	sd_user_open(NULL);	
}
Пример #4
0
void main(void)
{
  sched_timer_t* light_timer;
  sched_timer_t* dist_timer;

  unsigned char is_light_disabled;
  unsigned char is_dist_disabled;

  osc_setup();
  int_setup();

  srf04_setup();
  sched_setup();

  behavior_setup();

  /* sensor timers */

  light_timer = sched_add_timer(2, on_light_timer, 1);
  is_light_disabled = 0;

  dist_timer = sched_add_timer(2, on_distance_timer, 1);
  is_dist_disabled = 0;

  /* default behaviour */

  behavior_start(BEHAVIOR_ID_LAND_EXPLORER);

  /* main loop */

  sched_enable();

  while (1)
    {
      /* sensors. order matters so that object
	 avoider takes priority over light tracker.
	 this can be removed as soon as behavior
	 priority is implemented.
       */

      if (TIMER_MAP_ISSET(DISTANCE))
	{
	  {
#define MIN_DISTANCE_VALUE 0x0a00 /* 20 cms */
	    unsigned int dist = srf04_get_distance(MIN_DISTANCE_VALUE);

	    if (dist <= MIN_DISTANCE_VALUE)
	      {
		if (behavior_switch(BEHAVIOR_ID_OBJECT_AVOIDER) != -1)
		  {
		    sched_disable_timer(dist_timer);
		    is_dist_disabled = 1;
		  }
	      }
	  }

	  /* clear after the timer may have been disabled */

	  TIMER_MAP_CLEAR(DISTANCE);
	}

      if (TIMER_MAP_ISSET(LIGHT))
	{
	  {
	    unsigned short light = adc_read(LIGHT_ADC_CHANNEL);

	    if ((light <= ADC_QUANTIZE_5_10(2.35)) || (light >= ADC_QUANTIZE_5_10(2.65)))
	      {
		if (behavior_switch(BEHAVIOR_ID_LIGHT_TRACKER) != -1)
		  {
		    sched_disable_timer(light_timer);
		    is_light_disabled = 1;
		  }
	      }
	  }

	  TIMER_MAP_CLEAR(LIGHT);
	}

      /* schedule behavior */

      behavior_next();

      if (behavior_is_done())
	{
	  /* reenable timer */

	  if (is_light_disabled)
	    {
	      sched_enable_timer(light_timer);
	      is_light_disabled = 0;
	    }

	  if (is_dist_disabled)
	    {
	      sched_enable_timer(dist_timer);
	      is_dist_disabled = 0;
	    }

	  /* switch to default behavior */

	  behavior_switch(BEHAVIOR_ID_DEFAULT);
	}
    }
}