Here is a very simple NesC code for getting X, Y and Z axis value from ADXL345 digital accelerometer with Telosb mote.
Connection
ADXL345 GND -> TELOSB 9 pin
ADXL345 VCC -> TELOSB 1 pin
ADXL345 CS -> TELOSB 1 pin
ADXL345 SDA -> TELOSB 8 pin
ADXL345 SCL -> TELOSB 6 pin
Apart from this connect pull-up resistor(10 KOhm) from SDA &SCL to VCC.
Program
Program has three main files Accelerometer345AppC.nc, Accelerometer345C.nc and Makefile.
Acclerometer345AppC.nc
Accelerometer345C.nc
Makefile
Connection
ADXL345 GND -> TELOSB 9 pin
ADXL345 VCC -> TELOSB 1 pin
ADXL345 CS -> TELOSB 1 pin
ADXL345 SDA -> TELOSB 8 pin
ADXL345 SCL -> TELOSB 6 pin
Apart from this connect pull-up resistor(10 KOhm) from SDA &SCL to VCC.
Program
Program has three main files Accelerometer345AppC.nc, Accelerometer345C.nc and Makefile.
Acclerometer345AppC.nc
configuration Accelerometer345AppC { } implementation { components MainC, Accelerometer345C as App; App.Boot -> MainC; components LedsC; App.Leds -> LedsC; components new TimerMilliC() as TimerAccel; App.TimerAccel -> TimerAccel; components new ADXL345C(); App.Xaxis -> ADXL345C.X; App.Yaxis -> ADXL345C.Y; App.Zaxis -> ADXL345C.Z; App.AccelControl -> ADXL345C.SplitControl; }
Accelerometer345C.nc
#include "printf.h" module Accelerometer345C { uses { interface Boot; interface Leds; interface Timer<TMilli>as TimerAccel; interface Read <uint16_t><uint16_t> as Xaxis; interface Read <uint16_t> as Yaxis; interface Read as Zaxis; interface SplitControl as AccelControl; } } implementation { event void Boot.booted() { call AccelControl.start(); } event void AccelControl.startDone(error_t err) { printf("\n\n-----Accelerometer Started-----\n\n"); call TimerAccel.startPeriodic(1000); } event void AccelControl.stopDone(error_t err) { } event void TimerAccel.fired() { call Leds.led0Toggle(); call Xaxis.read(); } event void Xaxis.readDone(error_t result, uint16_t data) { printf("X [%d] ",data); call Yaxis.read(); } event void Yaxis.readDone(error_t result, uint16_t data) { printf("Y [%d] ",data); call Zaxis.read(); } event void Zaxis.readDone(error_t result, uint16_t data) { printf("Z [%d]\n\n",data); printfflush(); } }
Makefile
COMPONENT=Accelerometer345AppC CFLAGS += -I$(TOSDIR)/lib/printf CFLAGS += -I$(TOSDIR)/chips/adxl345 include $(MAKERULES)
Hey, where you able to solve the "syntax error before '0x20' " compilation error for ADXL345C.nc.... I am not able to understand what to do in this case...
ReplyDeletein ADXL345.C try to replace this line:
ReplyDeletecomponents new Msp430I2C1C() as I2C;
with this one:
components new Msp430I2CC() as BusI2C;
hi sir.
ReplyDeletei followed your instruction, but still cannot read data from sensor. the output always be
X [16413] Y [16413] Z [16413]
, please help me out.
Hi I am getting the same output.
DeleteCould you please share the solution to this problem?
Hi every one ,
ReplyDeleteI am trying to use ADX345 for implementing fall detection algorithm in WSN for my theses . The problem is the driver package in tinyos is not for Telosb .How you guys modified it for telosb ? Please guide me I am really got stuck here Thanks in advance
After following the instructions, I am only getting the following output.
ReplyDeleteX [16413] Y [16413] Z [16413]
Please help!