You are thinking too complicated at the moment. You need to break the problem down into simple parts
1. understand how to edit boot.py so that it does not mount the /flash or /sd card on the host PC (i.e uncomment the line pyb.usb_mode('CDC+HID')). If you don’t do this you will have problems logging data to a text file
2. Learn how to use the rshell.py program. Rshell is your friend. It will let you transfer your files to and from the host PC to your pyboard when the flash drive and sd card are not mounted as storage devices.
3. Write a very simple program that just writes numbers to a text file. This will teach you about the python string formatting, stuff like print('{},{},{}'.format(1,2,3)).
4. Write a simple program that creates a ADXL345Accel object using the library/driver you have posted earlier in this thread. This program should just
a) create an ADXL345Accel object
b) get the three acceleration values
c) print them to the screen (see 3 above) and exit
5. Modify the program so that it runs continuously, gets three acceleration values once a second and prints them to the screen. This will teach you how to control the speed of the program loop
6. Now put it all together. Modify the program so that it writes the values to a file but only once a second!
7. Gradually increase the speed of the program so it writes faster and faster. This will reveal all sorts of issues with your program and teach you loads.
This is exactly what I have done over the last few weeks........
ADXL345 with Pyboard
-
- Posts: 288
- Joined: Sun May 04, 2014 8:54 am
Re: Interfacing Sparkfun ADXL345 with Pyboard.
There is a datalogger in the examples folder of the micropython repo.
Re: Interfacing Sparkfun ADXL345 with Pyboard.
Open a file and write the data (it's the same in micropython as regular python).
Re: Interfacing Sparkfun ADXL345 with Pyboard.
[quote="Turbinenreiter"]There is a datalogger in the examples folder of the micropython repo.[/quote]
Also here: http://wiki.micropython.org/SDdatalogger
Also here: http://wiki.micropython.org/SDdatalogger
-
- Posts: 28
- Joined: Mon Aug 27, 2018 4:43 pm
Re: Interfacing Sparkfun ADXL345 with Pyboard.
This code misses the write_bytes method, could you please provide the complete working library, please?Abhinay_1 wrote: ↑Wed Apr 13, 2016 9:59 amCode: Select all
from pyb import Pin from pyb import SPI READWRITE_CMD = const(0x80) MULTIPLEBYTE_CMD = const(0x40) DEVID_ADDR = const(0x00) DATAX1_ADDR = const(0x33) DATAY1_ADDR = const(0x35) DATAZ1_ADDR = const(0x37) ADXL345_DEVID_VAL = const(0xE5) ADXL345_POWER_CTL_ADDR = const(0x2D) ADXL345_BW_RATE_ADDR = const(0x2C) ADXL345_DATA_FORMAT_ADDR = const(0x31) ADXL345_ENABLE_MSRM_ADDR = const(0x2D) ADXL345_POWER_CTL_CONF = const(0x00) ADXL345_BW_RATE_CONF = const(0x0F) ADXL345_DATA_FORMAT_CONF = const(0x10) ADXL345_ENABLE_MSRM_CONF = const(0x08) class ADXL345Accel: def _init_(self): self.cs_pin = Pin('X5', Pin.OUT_PP, Pin.PULL_NONE) self.cs_pin.high() self.spi = SPI(1, SPI.MASTER, baudrate=2000000, polarity=0, phase=1, bits=8) self.devid = self.read_id() if self.devid == ADXL345_DEVID_VAL: self.write_bytes(ADXL345_POWER_CTL_ADDR, bytearray([ADXL345_POWER_CTL_CONF])) self.write_bytes(ADXL345_BW_RATE_ADDR, bytearray([ADXL345_BW_RATE_CONF])) self.write_bytes(ADXL345_DATA_FORMAT_ADDR, bytearray([ADXL345_DATA_FORMAT_CONF])) self.write_bytes(ADXL345_ENABLE_MSRM_ADDR, bytearray([ADXL345_ENABLE_MSRM_CONF])) self.sensitivity = 32 else: raise Exception('ADXL345 accelerometer not present') def convert_raw_to_g(self, x): if x & 0x80: x = x - 256 return x * self.sensitivity / 1000 def read_bytes(self, addr, nbytes): if len(buf) > 1: addr |= MULTIPLEBYTE_CMD self.cs_pin.low() self.spi.send(addr) for b in buff: self.spi.send(b) self.cs_pin.high() def read_id(self): return self.read_bytes(DEVID_ADDR, 1)[0] def x(self): return self.convert_raw_to_g(self.read_bytes(DATAX1_ADDR, 1)[0]) def y(self): return self.convert_raw_to_g(self.read_bytes(DATAY1_ADDR, 1)[0]) def z(self): return self.convert_raw_to_g(self.read_bytes(DATAZ1_ADDR, 1)[0]) def xyz(self): return (self.x(), self.y(), self.z())