I want to get three value from tmote sky.I use 3-axis accelerator sensor, and I
need the X, Y, Z Output.I'm unable to get three values at one time, so i try
to get one value at one time, then get three times to be a cycle.(If anyone
get some solutione like get three values at one time, please tell my how to
do.)This program seems to get only one value.Please help me to solve this
problem. ***************** IntMsg.h *****************typedef struct IntMsg {
uint16_t val; //uint16_t src; uint16_t testval; //uint16_t testval2;
//uint16_t testval3;} IntMsg; enum { AM_INTMSG = 153}; *****************
SensorX.h *****************enum{ TOS_ADC_SENSORX_PORT = unique("ADCPort"),
TOSH_ACTUAL_ADC_SENSORX_PORT = ASSOCIATE_ADC_CHANNEL(/* INPUT_CHANNEL_A3,*/
INPUT_CHANNEL_A2, REFERENCE_VREFplus_AVss, REFVOLT_LEVEL_1_5 ),};
***************** SensorY.h *****************enum{ TOS_ADC_SENSORY_PORT =
unique("ADCPort"), TOSH_ACTUAL_ADC_SENSORY_PORT = ASSOCIATE_ADC_CHANNEL(/*
INPUT_CHANNEL_A1, */ INPUT_CHANNEL_A0, REFERENCE_VREFplus_AVss,
REFVOLT_LEVEL_1_5 ),}; ***************** SensorZ.h *****************enum{
TOS_ADC_SENSORZ_PORT = unique("ADCPort"), TOSH_ACTUAL_ADC_SENSORZ_PORT =
ASSOCIATE_ADC_CHANNEL(/* INPUT_CHANNEL_A2,*/ INPUT_CHANNEL_A1,
REFERENCE_VREFplus_AVss, REFVOLT_LEVEL_1_5 ),}; *****************
ProjectOther.nc *****************includes IntMsg;includes SensorX;includes
SensorY;includes SensorZ; configuration ProjectOther { } implementation{
components Main, ProjectOtherM, TimerC, LedsC, ADCC, GenericComm as Comm;
Main.StdControl -> ProjectOtherM.StdControl; ProjectOtherM.Timer ->
TimerC.Timer[unique("Timer")]; Main.StdControl -> TimerC.StdControl;
ProjectOtherM.Leds -> LedsC.Leds; ProjectOtherM.SendMsg ->
Comm.SendMsg[AM_INTMSG]; ProjectOtherM.SubControl -> Comm.Control;
ProjectOtherM.ADC -> ADCC.ADC[TOS_ADC_SENSORX_PORT]; ProjectOtherM.ADC ->
ADCC.ADC[TOS_ADC_SENSORY_PORT]; ProjectOtherM.ADC ->
ADCC.ADC[TOS_ADC_SENSORZ_PORT]; ProjectOtherM.ADCControl -> ADCC; }
***************** ProjectOtherM.nc *****************includes IntMsg;includes
SensorX;includes SensorY;includes SensorZ; module ProjectOtherM { provides
{ interface StdControl; interface IntOutput; }
uses { interface StdControl as SubControl; interface SendMsg;
interface Timer; interface Leds; interface ADC;
interface ADCControl; }} implementation { int state; bool pending,
flag_y, flag_g, flag_r; TOS_Msg msg_data; uint16_t ADCval;
void readIRSensor(); task void chooseADCChannel(); /* interface
StdControl */ command result_t StdControl.init() { atomic
ADCval = 0; atomic state = 1; pending = FALSE;
call Leds.init(); call Leds.redOff(); call
Leds.yellowOff(); call Leds.greenOff(); call ADCControl.init();
return call SubControl.init(); } command result_t
StdControl.start() { call Timer.start(TIMER_REPEAT, 1000);
return call SubControl.start(); } command result_t
StdControl.stop() { return call SubControl.stop(); }
/* interface IntOutput */ command result_t IntOutput.output(uint16_t
value) { IntMsg *message = (IntMsg *)msg_data.data;
if(!pending) { pending = TRUE;
readIRSensor(); atomic {
message->val = ADCval; /*message->src = TOS_LOCAL_ADDRESS;*/
if(!(state%3)) message->testval = 0x0099; else
if((state%3)==1) message->testval = 0x0088; else
message->testval = 0x0077; } if (call
SendMsg.send(0x0111, sizeof(IntMsg), &msg_data)) return SUCCESS;
pending = FALSE; } return FAIL; } /*
interface ADC */ void readIRSensor(){ call Leds.greenToggle();
call ADC.getData(); } async event result_t ADC.dataReady( uint16_t
data ) { ADCval = data; post chooseADCChannel(); return SUCCESS;
} task void chooseADCChannel() { if(!(state%3)) call
ADCControl.bindPort( TOS_ADC_SENSORX_PORT, TOSH_ACTUAL_ADC_SENSORX_PORT );
else if((state%3)==1)call ADCControl.bindPort( TOS_ADC_SENSORY_PORT,
TOSH_ACTUAL_ADC_SENSORY_PORT ); else call ADCControl.bindPort(
TOS_ADC_SENSORZ_PORT, TOSH_ACTUAL_ADC_SENSORZ_PORT ); }
/* interface SendMsg */ event result_t SendMsg.sendDone(TOS_MsgPtr msg,
result_t success) { if (pending && msg == &msg_data) {
pending = FALSE; if(success == 0) atomic state--; } return
SUCCESS; } /* interface Timer */ event result_t
Timer.fired() { if (call IntOutput.output(state)) atomic state++;
dbg(DBG_USR1,"state=%i\n",state); dbg(DBG_USR1,"ADCval=%i\n",ADCval);
return SUCCESS; }}
_________________________________________________________________
2 GB 超大容量 、創新便捷、安全防護垃圾郵件和病毒 — 立即升級 Windows Live Hotmail
http://mail.live.com _______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help