Sample code for using the Xively peripheral board.

Dependencies:   MMA7660 PinDetect ST7565R TriLED mbed-rtos mbed

Committer:
fossum_13
Date:
Sun May 26 00:10:38 2013 +0000
Revision:
0:48a8b110f225
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fossum_13 0:48a8b110f225 1 /**
fossum_13 0:48a8b110f225 2 * My custom Xively code. This program will use most of the peripherals
fossum_13 0:48a8b110f225 3 * on the board. If you need anything else let me know and I can probably
fossum_13 0:48a8b110f225 4 * make some task for it to do.
fossum_13 0:48a8b110f225 5 *
fossum_13 0:48a8b110f225 6 * Eric Fossum
fossum_13 0:48a8b110f225 7 */
fossum_13 0:48a8b110f225 8 #include "mbed.h"
fossum_13 0:48a8b110f225 9 #include "MMA7660.h"
fossum_13 0:48a8b110f225 10 #include "PinDetect.h"
fossum_13 0:48a8b110f225 11 #include "rtos.h"
fossum_13 0:48a8b110f225 12 #include "ST7565R.h"
fossum_13 0:48a8b110f225 13 #include "tricolor.h"
fossum_13 0:48a8b110f225 14
fossum_13 0:48a8b110f225 15 /// Updates the potentiometers and prints their values to the LCD
fossum_13 0:48a8b110f225 16 void pot_update(void const *args);
fossum_13 0:48a8b110f225 17 /// Updates the devices on the I2C bus and prints their values to the LCD
fossum_13 0:48a8b110f225 18 void i2c_update(void const *args);
fossum_13 0:48a8b110f225 19 /// Function call for when down on the joystick is pressed
fossum_13 0:48a8b110f225 20 void down();
fossum_13 0:48a8b110f225 21 /// Function call for when left on the joystick is pressed
fossum_13 0:48a8b110f225 22 void left();
fossum_13 0:48a8b110f225 23 /// Function call for when the joystick is clicked
fossum_13 0:48a8b110f225 24 void click();
fossum_13 0:48a8b110f225 25 /// Function call for when up on the joystick is pressed
fossum_13 0:48a8b110f225 26 void up();
fossum_13 0:48a8b110f225 27 /// Function call for when right on the joystick is pressed
fossum_13 0:48a8b110f225 28 void right();
fossum_13 0:48a8b110f225 29
fossum_13 0:48a8b110f225 30 Serial pc(USBTX, USBRX);
fossum_13 0:48a8b110f225 31 ST7565R lcd(p11, p8, p7, p5, p6, false);
fossum_13 0:48a8b110f225 32 Tricolor led(p23, p24, p25);
fossum_13 0:48a8b110f225 33 I2C i2c(p28, p27);
fossum_13 0:48a8b110f225 34 MMA7660 accl(p28, p27);
fossum_13 0:48a8b110f225 35
fossum_13 0:48a8b110f225 36 const int temp_addr = 0x90;
fossum_13 0:48a8b110f225 37
fossum_13 0:48a8b110f225 38 Mutex lcd_mutex;
fossum_13 0:48a8b110f225 39
fossum_13 0:48a8b110f225 40 AnalogIn pot1(p19);
fossum_13 0:48a8b110f225 41 AnalogIn pot2(p20);
fossum_13 0:48a8b110f225 42
fossum_13 0:48a8b110f225 43 DigitalOut led1(LED1);
fossum_13 0:48a8b110f225 44 DigitalOut led2(LED2);
fossum_13 0:48a8b110f225 45 DigitalOut led3(LED3);
fossum_13 0:48a8b110f225 46 DigitalOut led4(LED4);
fossum_13 0:48a8b110f225 47
fossum_13 0:48a8b110f225 48 PinDetect joy_down(p12);
fossum_13 0:48a8b110f225 49 PinDetect joy_left(p13);
fossum_13 0:48a8b110f225 50 PinDetect joy_click(p14);
fossum_13 0:48a8b110f225 51 PinDetect joy_up(p15);
fossum_13 0:48a8b110f225 52 PinDetect joy_right(p16);
fossum_13 0:48a8b110f225 53
fossum_13 0:48a8b110f225 54 /** Main
fossum_13 0:48a8b110f225 55 * Sets up the hardware and threads, then toggles the LED every half a second.
fossum_13 0:48a8b110f225 56 */
fossum_13 0:48a8b110f225 57 int main() {
fossum_13 0:48a8b110f225 58 joy_left.mode(PullDown);
fossum_13 0:48a8b110f225 59 joy_right.mode(PullDown);
fossum_13 0:48a8b110f225 60 joy_click.mode(PullDown);
fossum_13 0:48a8b110f225 61 joy_up.mode(PullDown);
fossum_13 0:48a8b110f225 62 joy_down.mode(PullDown);
fossum_13 0:48a8b110f225 63
fossum_13 0:48a8b110f225 64 joy_left.attach_asserted(&left);
fossum_13 0:48a8b110f225 65 joy_right.attach_asserted(&right);
fossum_13 0:48a8b110f225 66 joy_click.attach_asserted(&click);
fossum_13 0:48a8b110f225 67 joy_up.attach_asserted(&up);
fossum_13 0:48a8b110f225 68 joy_down.attach_asserted(&down);
fossum_13 0:48a8b110f225 69
fossum_13 0:48a8b110f225 70 wait(0.2);
fossum_13 0:48a8b110f225 71
fossum_13 0:48a8b110f225 72 joy_left.setSampleFrequency();
fossum_13 0:48a8b110f225 73 joy_right.setSampleFrequency();
fossum_13 0:48a8b110f225 74 joy_click.setSampleFrequency();
fossum_13 0:48a8b110f225 75 joy_up.setSampleFrequency();
fossum_13 0:48a8b110f225 76 joy_down.setSampleFrequency();
fossum_13 0:48a8b110f225 77
fossum_13 0:48a8b110f225 78 led.SetLEDColor(0, 60, 0);
fossum_13 0:48a8b110f225 79
fossum_13 0:48a8b110f225 80 pc.printf("Debug out\n");
fossum_13 0:48a8b110f225 81
fossum_13 0:48a8b110f225 82 lcd.moveto(0,0);
fossum_13 0:48a8b110f225 83 lcd.printf("Custom Xively!");
fossum_13 0:48a8b110f225 84 // Create Tasks - task, argument, priority, stack, stk_ptr
fossum_13 0:48a8b110f225 85 Thread pot_thread(pot_update);
fossum_13 0:48a8b110f225 86 Thread i2c_thread(i2c_update);
fossum_13 0:48a8b110f225 87
fossum_13 0:48a8b110f225 88 while(1) {
fossum_13 0:48a8b110f225 89 wait(0.5);
fossum_13 0:48a8b110f225 90 led.Toggle();
fossum_13 0:48a8b110f225 91 }
fossum_13 0:48a8b110f225 92 }
fossum_13 0:48a8b110f225 93
fossum_13 0:48a8b110f225 94 void pot_update(void const *args) {
fossum_13 0:48a8b110f225 95 char str[lcd.columns()+1];
fossum_13 0:48a8b110f225 96
fossum_13 0:48a8b110f225 97 while(true) {
fossum_13 0:48a8b110f225 98 lcd_mutex.lock();
fossum_13 0:48a8b110f225 99 lcd.moveto(0,1);
fossum_13 0:48a8b110f225 100 sprintf(str, "Pot1: %00.2f Pot2: %00.2f", pot1.read(), pot2.read());
fossum_13 0:48a8b110f225 101 lcd.printf(str);
fossum_13 0:48a8b110f225 102 lcd_mutex.unlock();
fossum_13 0:48a8b110f225 103 }
fossum_13 0:48a8b110f225 104 }
fossum_13 0:48a8b110f225 105
fossum_13 0:48a8b110f225 106 void i2c_update(void const *args) {
fossum_13 0:48a8b110f225 107 char str[lcd.columns()+1];
fossum_13 0:48a8b110f225 108 char cmd[2];
fossum_13 0:48a8b110f225 109 float temp;
fossum_13 0:48a8b110f225 110
fossum_13 0:48a8b110f225 111 while(true) {
fossum_13 0:48a8b110f225 112 // Temp Sensor
fossum_13 0:48a8b110f225 113 cmd[0] = 0x01;
fossum_13 0:48a8b110f225 114 cmd[1] = 0x00;
fossum_13 0:48a8b110f225 115 i2c.write(temp_addr, cmd, 2);
fossum_13 0:48a8b110f225 116 wait(0.5);
fossum_13 0:48a8b110f225 117 cmd[0] = 0x00;
fossum_13 0:48a8b110f225 118 i2c.write(temp_addr, cmd, 1);
fossum_13 0:48a8b110f225 119 i2c.read(temp_addr, cmd, 2);
fossum_13 0:48a8b110f225 120 temp = ((float((cmd[0]<<8)|cmd[1]) / 256.0)*1.8) + 32;
fossum_13 0:48a8b110f225 121
fossum_13 0:48a8b110f225 122 lcd_mutex.lock();
fossum_13 0:48a8b110f225 123 lcd.moveto(0,2);
fossum_13 0:48a8b110f225 124 sprintf(str, "Temp: %2.1f, Z: % 2.1f", temp, lcd.rows());
fossum_13 0:48a8b110f225 125 lcd.printf(str);
fossum_13 0:48a8b110f225 126
fossum_13 0:48a8b110f225 127 // Accelerometer
fossum_13 0:48a8b110f225 128 lcd.moveto(0,3);
fossum_13 0:48a8b110f225 129 sprintf(str, "X: % 2.1f Y: % 2.1f", accl.x(), accl.y());
fossum_13 0:48a8b110f225 130 lcd.printf(str);
fossum_13 0:48a8b110f225 131 lcd_mutex.unlock();
fossum_13 0:48a8b110f225 132 }
fossum_13 0:48a8b110f225 133 }
fossum_13 0:48a8b110f225 134
fossum_13 0:48a8b110f225 135 void down() {
fossum_13 0:48a8b110f225 136 led3 = !led3;
fossum_13 0:48a8b110f225 137 }
fossum_13 0:48a8b110f225 138
fossum_13 0:48a8b110f225 139 void left() {
fossum_13 0:48a8b110f225 140 led1 = !led1;
fossum_13 0:48a8b110f225 141 }
fossum_13 0:48a8b110f225 142
fossum_13 0:48a8b110f225 143 void click() {
fossum_13 0:48a8b110f225 144 led1 = !led1;
fossum_13 0:48a8b110f225 145 led2 = !led2;
fossum_13 0:48a8b110f225 146 led3 = !led3;
fossum_13 0:48a8b110f225 147 led4 = !led4;
fossum_13 0:48a8b110f225 148 }
fossum_13 0:48a8b110f225 149
fossum_13 0:48a8b110f225 150 void up() {
fossum_13 0:48a8b110f225 151 led2 = !led2;
fossum_13 0:48a8b110f225 152 }
fossum_13 0:48a8b110f225 153
fossum_13 0:48a8b110f225 154 void right() {
fossum_13 0:48a8b110f225 155 led4 = !led4;
fossum_13 0:48a8b110f225 156 }