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; }
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; }
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); }
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); } } }