This is test purpose program only for GR-PEACH. This program only run one hour 11 minutes!
Dependencies: L3GD20 LIS3DH TextLCD
main.cpp@6:849caec97744, 2015-01-09 (annotated)
- Committer:
- kenjiArai
- Date:
- Fri Jan 09 22:50:07 2015 +0000
- Revision:
- 6:849caec97744
- Parent:
- 5:e8d4095d9c19
Delete SPI LCD function
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 1:a399a743d109 | 1 | /* |
kenjiArai | 1:a399a743d109 | 2 | * mbed Application program for the mbed |
kenjiArai | 1:a399a743d109 | 3 | * Test program for GR-PEACH |
kenjiArai | 1:a399a743d109 | 4 | * |
kenjiArai | 1:a399a743d109 | 5 | * Copyright (c) 2014 Kenji Arai / JH1PJL |
kenjiArai | 1:a399a743d109 | 6 | * http://www.page.sannet.ne.jp/kenjia/index.html |
kenjiArai | 1:a399a743d109 | 7 | * http://mbed.org/users/kenjiArai/ |
kenjiArai | 1:a399a743d109 | 8 | * Created: November 29th, 2014 |
kenjiArai | 6:849caec97744 | 9 | * Revised: January 10th, 2015 |
kenjiArai | 1:a399a743d109 | 10 | * |
kenjiArai | 1:a399a743d109 | 11 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, |
kenjiArai | 1:a399a743d109 | 12 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE |
kenjiArai | 1:a399a743d109 | 13 | * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
kenjiArai | 1:a399a743d109 | 14 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
kenjiArai | 1:a399a743d109 | 15 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
kenjiArai | 1:a399a743d109 | 16 | */ |
kenjiArai | 1:a399a743d109 | 17 | |
kenjiArai | 4:76b3113c79ff | 18 | // Include --------------------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 19 | #include "mbed.h" |
kenjiArai | 4:76b3113c79ff | 20 | #include "L3GD20.h" |
kenjiArai | 4:76b3113c79ff | 21 | #include "LIS3DH.h" |
kenjiArai | 5:e8d4095d9c19 | 22 | #include "TextLCD.h" |
kenjiArai | 2:3747397a1618 | 23 | |
kenjiArai | 4:76b3113c79ff | 24 | // Definition ------------------------------------------------------------------------------------ |
kenjiArai | 4:76b3113c79ff | 25 | #define USE_COM // use Communication with PC(UART) |
kenjiArai | 5:e8d4095d9c19 | 26 | #define USE_I2C_LCD |
kenjiArai | 5:e8d4095d9c19 | 27 | #define USE_I2C_SENSOR |
kenjiArai | 4:76b3113c79ff | 28 | |
kenjiArai | 4:76b3113c79ff | 29 | // Com |
kenjiArai | 4:76b3113c79ff | 30 | #ifdef USE_COM |
kenjiArai | 4:76b3113c79ff | 31 | #define BAUD(x) pcx.baud(x) |
kenjiArai | 4:76b3113c79ff | 32 | #define GETC(x) pcx.getc(x) |
kenjiArai | 4:76b3113c79ff | 33 | #define PUTC(x) pcx.putc(x) |
kenjiArai | 4:76b3113c79ff | 34 | #define PRINTF(...) pcx.printf(__VA_ARGS__) |
kenjiArai | 4:76b3113c79ff | 35 | #define READABLE(x) pcx.readable(x) |
kenjiArai | 4:76b3113c79ff | 36 | #else |
kenjiArai | 4:76b3113c79ff | 37 | #define BAUD(x) {;} |
kenjiArai | 4:76b3113c79ff | 38 | #define GETC(x) {;} |
kenjiArai | 4:76b3113c79ff | 39 | #define PUTC(x) {;} |
kenjiArai | 4:76b3113c79ff | 40 | #define PRINTF(...) {;} |
kenjiArai | 4:76b3113c79ff | 41 | #define READABLE(x) {;} |
kenjiArai | 0:a17b3cf2f466 | 42 | #endif |
kenjiArai | 0:a17b3cf2f466 | 43 | |
kenjiArai | 4:76b3113c79ff | 44 | // Object ---------------------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 45 | // LED's |
kenjiArai | 4:76b3113c79ff | 46 | DigitalOut LEDs[4] = { |
kenjiArai | 4:76b3113c79ff | 47 | DigitalOut(LED1), DigitalOut(LED2), DigitalOut(LED3), DigitalOut(LED4) |
kenjiArai | 4:76b3113c79ff | 48 | }; |
kenjiArai | 4:76b3113c79ff | 49 | // Swiches |
kenjiArai | 4:76b3113c79ff | 50 | DigitalIn USER_SWITCH[2] = { |
kenjiArai | 4:76b3113c79ff | 51 | #if defined(TARGET_RZ_A1H) |
kenjiArai | 4:76b3113c79ff | 52 | DigitalIn(P6_0), DigitalIn(P6_1) |
kenjiArai | 5:e8d4095d9c19 | 53 | #elif defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE)\ |
kenjiArai | 4:76b3113c79ff | 54 | || defined(TARGET_NUCLEO_L152RE) |
kenjiArai | 4:76b3113c79ff | 55 | DigitalIn(PC_13), DigitalIn(A0) |
kenjiArai | 4:76b3113c79ff | 56 | #elif defined(TARGET_LPC1768) |
kenjiArai | 4:76b3113c79ff | 57 | DigitalIn(A0), DigitalIn(A1) |
kenjiArai | 4:76b3113c79ff | 58 | #elif defined(TARGET_K64F) |
kenjiArai | 4:76b3113c79ff | 59 | DigitalIn(PTA4), DigitalIn(PTC6) |
kenjiArai | 4:76b3113c79ff | 60 | #endif |
kenjiArai | 4:76b3113c79ff | 61 | }; |
kenjiArai | 4:76b3113c79ff | 62 | // com |
kenjiArai | 4:76b3113c79ff | 63 | #ifdef USE_COM |
kenjiArai | 4:76b3113c79ff | 64 | Serial pcx(USBTX, USBRX); // Communication with Host |
kenjiArai | 4:76b3113c79ff | 65 | #endif |
kenjiArai | 4:76b3113c79ff | 66 | I2C i2c(D14,D15); |
kenjiArai | 4:76b3113c79ff | 67 | // Gyro |
kenjiArai | 4:76b3113c79ff | 68 | L3GX_GYRO gyro(i2c, L3GD20_V_CHIP_ADDR, L3GX_DR_95HZ, L3GX_BW_HI, L3GX_FS_250DPS); |
kenjiArai | 4:76b3113c79ff | 69 | // Acc |
kenjiArai | 4:76b3113c79ff | 70 | LIS3DH acc(i2c, LIS3DH_G_CHIP_ADDR, LIS3DH_DR_NR_LP_50HZ, LIS3DH_FS_8G); |
kenjiArai | 5:e8d4095d9c19 | 71 | #ifdef USE_I2C_LCD |
kenjiArai | 5:e8d4095d9c19 | 72 | // LCD |
kenjiArai | 5:e8d4095d9c19 | 73 | TextLCD_I2C_N lcd0(&i2c, 0x7c, TextLCD::LCD16x2); // LCD(Akizuki AQM0802A) |
kenjiArai | 5:e8d4095d9c19 | 74 | #endif |
kenjiArai | 0:a17b3cf2f466 | 75 | |
kenjiArai | 4:76b3113c79ff | 76 | // RAM ------------------------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 77 | float fa[3]; // Acc 0:X, 1:Y, 2:Z |
kenjiArai | 4:76b3113c79ff | 78 | float fg[3]; // Gyro 0:X, 1:Y, 2:Z |
kenjiArai | 4:76b3113c79ff | 79 | |
kenjiArai | 4:76b3113c79ff | 80 | uint8_t show_flag; |
kenjiArai | 5:e8d4095d9c19 | 81 | uint32_t count; |
kenjiArai | 4:76b3113c79ff | 82 | |
kenjiArai | 4:76b3113c79ff | 83 | // ROM / Constant data --------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 84 | |
kenjiArai | 4:76b3113c79ff | 85 | // Function prototypes --------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 86 | |
kenjiArai | 4:76b3113c79ff | 87 | // Function prototypes --------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 88 | |
kenjiArai | 4:76b3113c79ff | 89 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 90 | // Control Program |
kenjiArai | 4:76b3113c79ff | 91 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 92 | void blink(void const *n) { |
kenjiArai | 4:76b3113c79ff | 93 | LEDs[(int)n] = !LEDs[(int)n]; |
kenjiArai | 4:76b3113c79ff | 94 | } |
kenjiArai | 4:76b3113c79ff | 95 | |
kenjiArai | 4:76b3113c79ff | 96 | // Read switch status |
kenjiArai | 4:76b3113c79ff | 97 | int read_sw(uint8_t n){ |
kenjiArai | 4:76b3113c79ff | 98 | if (USER_SWITCH[n] == 0){ return 1; |
kenjiArai | 4:76b3113c79ff | 99 | } else { return 0;} |
kenjiArai | 4:76b3113c79ff | 100 | } |
kenjiArai | 4:76b3113c79ff | 101 | |
kenjiArai | 5:e8d4095d9c19 | 102 | // Update sensor data |
kenjiArai | 5:e8d4095d9c19 | 103 | void update_angle(void){ |
kenjiArai | 5:e8d4095d9c19 | 104 | #ifdef USE_I2C_SENSOR |
kenjiArai | 5:e8d4095d9c19 | 105 | // read acceleration data from sensor |
kenjiArai | 5:e8d4095d9c19 | 106 | acc.read_data(fa); |
kenjiArai | 5:e8d4095d9c19 | 107 | // read gyroscope data from sensor |
kenjiArai | 5:e8d4095d9c19 | 108 | gyro.read_data(fg); |
kenjiArai | 5:e8d4095d9c19 | 109 | #else |
kenjiArai | 5:e8d4095d9c19 | 110 | fa[0] = fa[1] = fa[2] = 1.11f; |
kenjiArai | 5:e8d4095d9c19 | 111 | fg[0] = fg[1] = fg[2] = 1.11f; |
kenjiArai | 5:e8d4095d9c19 | 112 | #endif |
kenjiArai | 4:76b3113c79ff | 113 | } |
kenjiArai | 4:76b3113c79ff | 114 | |
kenjiArai | 4:76b3113c79ff | 115 | // Update sensor data |
kenjiArai | 5:e8d4095d9c19 | 116 | void display(void){ |
kenjiArai | 5:e8d4095d9c19 | 117 | #ifdef USE_I2C_LCD |
kenjiArai | 5:e8d4095d9c19 | 118 | lcd0.locate(0, 0); // 1st line top |
kenjiArai | 5:e8d4095d9c19 | 119 | lcd0.printf(" G=%4.1f ", sqrt(fa[0]*fa[0] + fa[1]*fa[1] + fa[2]*fa[2])); |
kenjiArai | 5:e8d4095d9c19 | 120 | lcd0.locate(0, 1); // 2nd line top |
kenjiArai | 5:e8d4095d9c19 | 121 | lcd0.printf("%8d",count++); |
kenjiArai | 5:e8d4095d9c19 | 122 | #endif |
kenjiArai | 4:76b3113c79ff | 123 | } |
kenjiArai | 4:76b3113c79ff | 124 | |
kenjiArai | 5:e8d4095d9c19 | 125 | void send_pc(void){ |
kenjiArai | 5:e8d4095d9c19 | 126 | PRINTF("G:%+6.1f,%+6.1f,%+6.1f, ", fg[0], fg[1], fg[2]); |
kenjiArai | 5:e8d4095d9c19 | 127 | PRINTF("A:%+6.1f,%+6.1f,%+6.1f \r\n", fa[0], fa[1], fa[2]); |
kenjiArai | 4:76b3113c79ff | 128 | } |
kenjiArai | 4:76b3113c79ff | 129 | |
kenjiArai | 5:e8d4095d9c19 | 130 | int main(void) { |
kenjiArai | 5:e8d4095d9c19 | 131 | // I2C LCD |
kenjiArai | 5:e8d4095d9c19 | 132 | #ifdef USE_I2C_LCD |
kenjiArai | 5:e8d4095d9c19 | 133 | lcd0.locate(0, 0); // 1st line top |
kenjiArai | 5:e8d4095d9c19 | 134 | lcd0.printf("I2C test"); |
kenjiArai | 5:e8d4095d9c19 | 135 | lcd0.locate(0, 1); // 2nd line top |
kenjiArai | 5:e8d4095d9c19 | 136 | lcd0.puts(" JH1PJL "); |
kenjiArai | 5:e8d4095d9c19 | 137 | lcd0.setContrast(0x14); |
kenjiArai | 5:e8d4095d9c19 | 138 | #endif |
kenjiArai | 5:e8d4095d9c19 | 139 | count = 0; |
kenjiArai | 4:76b3113c79ff | 140 | while (true) { |
kenjiArai | 5:e8d4095d9c19 | 141 | update_angle(); |
kenjiArai | 5:e8d4095d9c19 | 142 | display(); |
kenjiArai | 5:e8d4095d9c19 | 143 | send_pc(); |
kenjiArai | 5:e8d4095d9c19 | 144 | //wait(0.2); |
kenjiArai | 5:e8d4095d9c19 | 145 | blink((void *)0); |
kenjiArai | 5:e8d4095d9c19 | 146 | //wait(0.2); |
kenjiArai | 5:e8d4095d9c19 | 147 | blink((void *)1); |
kenjiArai | 5:e8d4095d9c19 | 148 | //wait(0.2); |
kenjiArai | 5:e8d4095d9c19 | 149 | blink((void *)2); |
kenjiArai | 5:e8d4095d9c19 | 150 | //wait(0.2); |
kenjiArai | 5:e8d4095d9c19 | 151 | blink((void *)3); |
kenjiArai | 5:e8d4095d9c19 | 152 | //wait(0.2); |
kenjiArai | 4:76b3113c79ff | 153 | } |
kenjiArai | 4:76b3113c79ff | 154 | } |