This is test purpose program only for GR-PEACH. This program only run one hour 11 minutes!

Dependencies:   L3GD20 LIS3DH TextLCD

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?

UserRevisionLine numberNew 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 }