carboard: use adxl for x/y/z readings and data; signed sensor values are still completely broken
--- a/Makefile Thu Sep 25 01:00:08 2014 +0300
+++ b/Makefile Wed Oct 08 23:21:01 2014 +0300
@@ -6,7 +6,9 @@
HEX = build/src/$(PROG).hex
build/src/carboard.elf: build/src/carboard.o \
+ build/qmsk/src/adxl345.o \
build/qmsk/src/serial.o \
+ build/qmsk/src/spi.o \
build/qmsk/src/switch.o \
build/qmsk/src/timer.o
@@ -28,7 +30,7 @@
CC = avr-gcc
CPPFLAGS = -DF_CPU=$(CPU)UL -I$(QMSK_ARDUINO)/include
-CFLAGS = -mmcu=$(MCU) -std=$(STD) -Os -g
+CFLAGS = -mmcu=$(MCU) -std=$(STD) -Os
LDFLAGS = -mmcu=$(MCU)
LDLIBS = -lc
--- a/src/carboard.c Thu Sep 25 01:00:08 2014 +0300
+++ b/src/carboard.c Wed Oct 08 23:21:01 2014 +0300
@@ -35,34 +35,42 @@
SWITCH_MASK = 0b00111100,
};
+#include "adxl345.h"
#include "debug.h"
#include "relay.h"
#include "serial.h"
+#include "spi.h"
#include "switch.h"
#include "timer.h"
int main (void)
{
+ adxl345_init();
debug_init();
relay_init(RELAY_PINS);
serial_init(SERIAL_BAUD_9600, SERIAL_PARITY_N, SERIAL_STOPBITS_1);
+ spi_init();
switch_init();
timer_init();
// init
- char c = '.';
+ unsigned char c = '.';
byte s;
unsigned short timeout = 8000;
+ int16_t adxl;
debug_set();
sei();
+ adxl345_setup();
+
// start
while (true) {
c = s = 0;
+ adxl = 0;
if (timer_sleep(timeout)) {
- c = '.';
+ c = 0;
} else if ((c = serial_read())) {
switch (c) {
case 'L': relay_open(RELAY_LEFT); break;
@@ -79,6 +87,11 @@
relay_close(RELAY_DOWN2);
break;
+ case 'd': c = adxl345_read_devid(); break;
+ case 'x': adxl = adxl345_read_x(); break;
+ case 'y': adxl = adxl345_read_y(); break;
+ case 'z': adxl = adxl345_read_z(); break;
+
default:
c = '!';
break;
@@ -106,6 +119,20 @@
// out
debug_toggle();
- serial_write(c);
+ if (c == 'x' || c == 'y' || c == 'z') {
+ int8_t v = adxl / 255;
+
+ /*
+ if (adxl > 0)
+ serial_write('+');
+ else if (adxl < 0)
+ serial_write('-');
+ else
+ serial_write(' ');
+ */
+ serial_write(v);
+ } else if (c) {
+ serial_write(c);
+ }
}
}