85 lines
2.3 KiB
Python
85 lines
2.3 KiB
Python
import board
|
|
import busio
|
|
import time
|
|
import adafruit_sdcard
|
|
#import adafruit_pcf8523
|
|
import microcontroller
|
|
import digitalio
|
|
import storage
|
|
import os
|
|
|
|
switch = digitalio.DigitalInOut(board.A5)
|
|
switch.direction = digitalio.Direction.INPUT
|
|
switch.pull = digitalio.Pull.UP
|
|
|
|
#Zeitronix Packet format, bytes[]
|
|
#[0] always 0
|
|
#[1] always 1
|
|
#[2] always 2
|
|
#[3] AFR
|
|
#[4] EGT Low
|
|
#[5] EGT High
|
|
#[6] RPM Low
|
|
#[7] RPM High
|
|
#[8] MAP Low
|
|
#[9] MAP High
|
|
#[10] TPS
|
|
#[11] USER1
|
|
#[12] Config Register1
|
|
#[13] Config Register2
|
|
|
|
#led = digitalio.DigitalInOut(board.D13)
|
|
#led.direction = digitalio.Direction.OUTPUT
|
|
|
|
SD_CS = board.D10
|
|
# Connect to the sdcard and mount the filesystem.
|
|
spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
|
|
cs = digitalio.DigitalInOut(SD_CS)
|
|
sdcard = adafruit_sdcard.SDCard(spi, cs)
|
|
vfs = storage.VfsFat(sdcard)
|
|
storage.mount(vfs, "/sd")
|
|
|
|
uart = busio.UART(board.TX, board.RX, baudrate=9600, timeout=10)
|
|
|
|
#date = rtc.datetime() # will use this for the filename
|
|
# this board doesn't seem to have enough ram for the rtc library & sd & everything else going on here.. getting an allocation error
|
|
#filename = str(date.tm_year) + "-" + str(date.tm_mon) + "-" + str(date.tm_mday) + "-" + str(date.tm_hour) + "" + str(date.tm_min)
|
|
filename = "2017-09-11-test"
|
|
filename += ".csv"
|
|
|
|
def getPacket():
|
|
rcdbyte = [None] * 3
|
|
packet = [0] * 15
|
|
packet[0] = time.monotonic()
|
|
i = 0
|
|
while True:
|
|
rcdbyte[i] = uart.read(1) #read a single byte
|
|
if rcdbyte[i] == None: #if we got an empty byte, assume the serial link is down, and return zeros.
|
|
return packet
|
|
if rcdbyte[i] == b'\x02' and rcdbyte[i-1] == b'\x01' and rcdbyte[i-2] == b'\x00': # we got our 3 bytes in order for the start of packet
|
|
packet[1] = 0
|
|
packet[2] = 1
|
|
packet[3] = 2
|
|
|
|
for x in range(4, 15): #get the rest of the packet.
|
|
byte = uart.read(1)
|
|
if byte == None: #if we got an empty byte, assume the serial link is down, and return zeros.
|
|
packet[x] = 0
|
|
return packet
|
|
packet[x] = byte[0]
|
|
return packet
|
|
i += 1
|
|
if i == 3:
|
|
i = 0
|
|
|
|
#this is currently configured so that you have to short the pin to ground momentarily to start logging, then again to stop.
|
|
while True:
|
|
if switch.value == False:
|
|
time.sleep(0.2)
|
|
f = open("/sd/" + filename, "w")
|
|
while switch.value == True:
|
|
packet = getPacket()
|
|
f.write('{}\n'.format(packet))
|
|
print('.',end='')
|
|
f.close()
|
|
time.sleep(0.2) |