carboard: use adxl for x/y/z readings and data; signed sensor values are still completely broken default tip
authorTero Marttila <terom@paivola.fi>
Wed, 08 Oct 2014 23:21:01 +0300
changeset 5 5c86d54080c1
parent 4 d0f29c45fe52
carboard: use adxl for x/y/z readings and data; signed sensor values are still completely broken
Makefile
src/carboard.c
--- 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);
+        }
     }
 }