Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: C12832 FXOS8700Q eCompass_FPU_Lib mbed-rtos mbed
Fork of K64F_eCompass by
Revision 2:770f77c92bab, committed 2014-04-21
- Comitter:
- JimCarver
- Date:
- Mon Apr 21 23:13:22 2014 +0000
- Parent:
- 1:788e16551392
- Commit message:
- Another K64F eCompass that used the LCD on an app shield to display heading data
Changed in this revision
| C12832.lib | Show annotated file Show diff for this revision Revisions of this file |
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/C12832.lib Mon Apr 21 23:13:22 2014 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/chris/code/C12832/#7de323fa46fe
--- a/main.cpp Mon Apr 14 17:17:00 2014 +0000
+++ b/main.cpp Mon Apr 21 23:13:22 2014 +0000
@@ -2,13 +2,17 @@
#include "FXOS8700Q.h"
#include "eCompass_Lib.h"
#include "rtos.h"
-
+#include "C12832.h"
-
+// Using Arduino pin notation
+C12832 lcd(D11, D13, D12, D7, D10); // App shield LCD
FXOS8700Q combo1( PTE25, PTE24, FXOS8700CQ_SLAVE_ADDR1);
Serial pc(USBTX, USBRX);
DigitalOut gpo(D0);
-DigitalOut led(LED_RED);
+DigitalOut red(LED_RED);
+DigitalOut led(D5);
+DigitalOut green(LED_GREEN);
+DigitalOut blue(LED_BLUE);
eCompass compass;
extern axis6_t axis6;
@@ -46,6 +50,45 @@
printf("Quaternion: Q0= %1.4f Q1= %1.4f Q2= %1.4f Q3= %1.4f\r\n\r\n", axis6.q0, axis6.q1, axis6.q2, axis6.q3);
}
+void doRGB(void)
+{
+ int16_t h;
+ h = axis6.yaw;
+ if((h >= 358) || (h <= 2)) {
+ red = 1;
+ green = 0;
+ blue = 1;
+ return;
+ }
+ if((h >= 353) || (h <= 7)) {
+ red = 1;
+ green = 0;
+ blue = 0;
+ return;
+ }
+ if((h >= 85) && (h <= 95)) {
+ red = 0;
+ green = 1;
+ blue = 1;
+ return;
+ }
+ if((h >= 265) && (h <= 275)) {
+ red = 0;
+ green = 1;
+ blue = 1;
+ return;
+ }
+ if((h >= 175) && (h <= 185)) {
+ red = 0;
+ green = 1;
+ blue = 0;
+ return;
+ }
+ red = 1;
+ green = 1;
+ blue = 1;
+}
+
void compass_thread(void const *argument) {
static int16_t acc_raw[3], mag_raw[3];
@@ -53,12 +96,14 @@
combo1.AccXYZraw( acc_raw);
combo1.MagXYZraw( mag_raw);
if(tcount) compass.run( acc_raw, mag_raw); // calculate the eCompass
+ if(!l) led = 0;
+ else led = 1;
+ doRGB();
if(l++ >= 50) { // take car of business once a second
seconds++;
debug_print();
compass.calibrate(); // re-calibrate the eCompass every second
l = 0;
- led = !led;
}
tcount++;
}
@@ -68,7 +113,13 @@
uint8_t d[2];
int16_t acc_raw[3], mag_raw[3];
d[0] = 0;
+red = 1;
+green = 1;
+blue = 1;
//cdebug = 1; // uncomment to disable compass
+lcd.cls();
+lcd.locate(0,1);
+lcd.printf("K64F eCompass");
printf("\r\n\n\n\n\n\n\n");
combo1.enable();
combo1.readRegs( FXOS8700Q_STATUS, d, 1);
@@ -89,5 +140,11 @@
RtosTimer compass_timer(compass_thread, osTimerPeriodic);
compass_timer.start(20); // Run the Compass every 20ms
-Thread::wait(osWaitForever);
+while(1) {
+ lcd.locate(0,11);
+ lcd.printf("Seconds: %04d Heading: %03d", seconds, axis6.yaw);
+ lcd.locate(0,22);
+ lcd.printf("Roll : %03d Pitch: %02d", axis6.roll, axis6.pitch);
+ wait(0.1);
+ }
}
