Sample code for using the Xively peripheral board.
Dependencies: MMA7660 PinDetect ST7565R TriLED mbed-rtos mbed
main.cpp@0:48a8b110f225, 2013-05-26 (annotated)
- Committer:
- fossum_13
- Date:
- Sun May 26 00:10:38 2013 +0000
- Revision:
- 0:48a8b110f225
Initial commit
Who changed what in which revision?
User | Revision | Line number | New 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 | } |