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.
Fork of GR-PEACH_test_wo_rtos by
main.cpp@5:e8d4095d9c19, 2015-01-09 (annotated)
- Committer:
- kenjiArai
- Date:
- Fri Jan 09 22:37:38 2015 +0000
- Revision:
- 5:e8d4095d9c19
- Parent:
- 4:76b3113c79ff
- Child:
- 6:849caec97744
SPI LCD function sets selective condition
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 | 5:e8d4095d9c19 | 9 | * Revised: January 9th, 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 | 4:76b3113c79ff | 23 | #include "ST7565_SPI_LCD.h" |
| kenjiArai | 2:3747397a1618 | 24 | |
| kenjiArai | 4:76b3113c79ff | 25 | // Definition ------------------------------------------------------------------------------------ |
| kenjiArai | 4:76b3113c79ff | 26 | #define USE_COM // use Communication with PC(UART) |
| kenjiArai | 5:e8d4095d9c19 | 27 | #define USE_I2C_LCD |
| kenjiArai | 5:e8d4095d9c19 | 28 | //#define USE_SPI_LCD |
| kenjiArai | 5:e8d4095d9c19 | 29 | #define USE_I2C_SENSOR |
| kenjiArai | 4:76b3113c79ff | 30 | |
| kenjiArai | 4:76b3113c79ff | 31 | // Com |
| kenjiArai | 4:76b3113c79ff | 32 | #ifdef USE_COM |
| kenjiArai | 4:76b3113c79ff | 33 | #define BAUD(x) pcx.baud(x) |
| kenjiArai | 4:76b3113c79ff | 34 | #define GETC(x) pcx.getc(x) |
| kenjiArai | 4:76b3113c79ff | 35 | #define PUTC(x) pcx.putc(x) |
| kenjiArai | 4:76b3113c79ff | 36 | #define PRINTF(...) pcx.printf(__VA_ARGS__) |
| kenjiArai | 4:76b3113c79ff | 37 | #define READABLE(x) pcx.readable(x) |
| kenjiArai | 4:76b3113c79ff | 38 | #else |
| kenjiArai | 4:76b3113c79ff | 39 | #define BAUD(x) {;} |
| kenjiArai | 4:76b3113c79ff | 40 | #define GETC(x) {;} |
| kenjiArai | 4:76b3113c79ff | 41 | #define PUTC(x) {;} |
| kenjiArai | 4:76b3113c79ff | 42 | #define PRINTF(...) {;} |
| kenjiArai | 4:76b3113c79ff | 43 | #define READABLE(x) {;} |
| kenjiArai | 0:a17b3cf2f466 | 44 | #endif |
| kenjiArai | 0:a17b3cf2f466 | 45 | |
| kenjiArai | 4:76b3113c79ff | 46 | // Object ---------------------------------------------------------------------------------------- |
| kenjiArai | 4:76b3113c79ff | 47 | // LED's |
| kenjiArai | 4:76b3113c79ff | 48 | DigitalOut LEDs[4] = { |
| kenjiArai | 4:76b3113c79ff | 49 | DigitalOut(LED1), DigitalOut(LED2), DigitalOut(LED3), DigitalOut(LED4) |
| kenjiArai | 4:76b3113c79ff | 50 | }; |
| kenjiArai | 4:76b3113c79ff | 51 | // Swiches |
| kenjiArai | 4:76b3113c79ff | 52 | DigitalIn USER_SWITCH[2] = { |
| kenjiArai | 4:76b3113c79ff | 53 | #if defined(TARGET_RZ_A1H) |
| kenjiArai | 4:76b3113c79ff | 54 | DigitalIn(P6_0), DigitalIn(P6_1) |
| kenjiArai | 5:e8d4095d9c19 | 55 | #elif defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE)\ |
| kenjiArai | 4:76b3113c79ff | 56 | || defined(TARGET_NUCLEO_L152RE) |
| kenjiArai | 4:76b3113c79ff | 57 | DigitalIn(PC_13), DigitalIn(A0) |
| kenjiArai | 4:76b3113c79ff | 58 | #elif defined(TARGET_LPC1768) |
| kenjiArai | 4:76b3113c79ff | 59 | DigitalIn(A0), DigitalIn(A1) |
| kenjiArai | 4:76b3113c79ff | 60 | #elif defined(TARGET_K64F) |
| kenjiArai | 4:76b3113c79ff | 61 | DigitalIn(PTA4), DigitalIn(PTC6) |
| kenjiArai | 4:76b3113c79ff | 62 | #endif |
| kenjiArai | 4:76b3113c79ff | 63 | }; |
| kenjiArai | 4:76b3113c79ff | 64 | // com |
| kenjiArai | 4:76b3113c79ff | 65 | #ifdef USE_COM |
| kenjiArai | 4:76b3113c79ff | 66 | Serial pcx(USBTX, USBRX); // Communication with Host |
| kenjiArai | 4:76b3113c79ff | 67 | #endif |
| kenjiArai | 4:76b3113c79ff | 68 | I2C i2c(D14,D15); |
| kenjiArai | 4:76b3113c79ff | 69 | // Gyro |
| kenjiArai | 4:76b3113c79ff | 70 | L3GX_GYRO gyro(i2c, L3GD20_V_CHIP_ADDR, L3GX_DR_95HZ, L3GX_BW_HI, L3GX_FS_250DPS); |
| kenjiArai | 4:76b3113c79ff | 71 | // Acc |
| kenjiArai | 4:76b3113c79ff | 72 | LIS3DH acc(i2c, LIS3DH_G_CHIP_ADDR, LIS3DH_DR_NR_LP_50HZ, LIS3DH_FS_8G); |
| kenjiArai | 5:e8d4095d9c19 | 73 | #ifdef USE_I2C_LCD |
| kenjiArai | 5:e8d4095d9c19 | 74 | // LCD |
| kenjiArai | 5:e8d4095d9c19 | 75 | TextLCD_I2C_N lcd0(&i2c, 0x7c, TextLCD::LCD16x2); // LCD(Akizuki AQM0802A) |
| kenjiArai | 5:e8d4095d9c19 | 76 | #endif |
| kenjiArai | 5:e8d4095d9c19 | 77 | #ifdef USE_SPI_LCD |
| kenjiArai | 4:76b3113c79ff | 78 | // SPI LCD |
| kenjiArai | 4:76b3113c79ff | 79 | SPI spi_lcd(D11, D12, D13); // mosi, miso, sck |
| kenjiArai | 4:76b3113c79ff | 80 | ST7565 lcd1(spi_lcd, D8, D9, D7, ST7565::AQM1248A); // spi,reset,a0,ncs, LCD(Akizuki AQM1248A) |
| kenjiArai | 5:e8d4095d9c19 | 81 | #endif |
| kenjiArai | 0:a17b3cf2f466 | 82 | |
| kenjiArai | 4:76b3113c79ff | 83 | // RAM ------------------------------------------------------------------------------------------- |
| kenjiArai | 4:76b3113c79ff | 84 | float fa[3]; // Acc 0:X, 1:Y, 2:Z |
| kenjiArai | 4:76b3113c79ff | 85 | float fg[3]; // Gyro 0:X, 1:Y, 2:Z |
| kenjiArai | 4:76b3113c79ff | 86 | |
| kenjiArai | 4:76b3113c79ff | 87 | uint8_t show_flag; |
| kenjiArai | 5:e8d4095d9c19 | 88 | uint32_t count; |
| kenjiArai | 4:76b3113c79ff | 89 | |
| kenjiArai | 4:76b3113c79ff | 90 | // ROM / Constant data --------------------------------------------------------------------------- |
| kenjiArai | 4:76b3113c79ff | 91 | |
| kenjiArai | 4:76b3113c79ff | 92 | // Function prototypes --------------------------------------------------------------------------- |
| kenjiArai | 4:76b3113c79ff | 93 | |
| kenjiArai | 4:76b3113c79ff | 94 | // Function prototypes --------------------------------------------------------------------------- |
| kenjiArai | 4:76b3113c79ff | 95 | |
| kenjiArai | 4:76b3113c79ff | 96 | //------------------------------------------------------------------------------------------------- |
| kenjiArai | 4:76b3113c79ff | 97 | // Control Program |
| kenjiArai | 4:76b3113c79ff | 98 | //------------------------------------------------------------------------------------------------- |
| kenjiArai | 4:76b3113c79ff | 99 | void blink(void const *n) { |
| kenjiArai | 4:76b3113c79ff | 100 | LEDs[(int)n] = !LEDs[(int)n]; |
| kenjiArai | 4:76b3113c79ff | 101 | } |
| kenjiArai | 4:76b3113c79ff | 102 | |
| kenjiArai | 4:76b3113c79ff | 103 | // Read switch status |
| kenjiArai | 4:76b3113c79ff | 104 | int read_sw(uint8_t n){ |
| kenjiArai | 4:76b3113c79ff | 105 | if (USER_SWITCH[n] == 0){ return 1; |
| kenjiArai | 4:76b3113c79ff | 106 | } else { return 0;} |
| kenjiArai | 4:76b3113c79ff | 107 | } |
| kenjiArai | 4:76b3113c79ff | 108 | |
| kenjiArai | 5:e8d4095d9c19 | 109 | // Update sensor data |
| kenjiArai | 5:e8d4095d9c19 | 110 | void update_angle(void){ |
| kenjiArai | 5:e8d4095d9c19 | 111 | #ifdef USE_I2C_SENSOR |
| kenjiArai | 5:e8d4095d9c19 | 112 | // read acceleration data from sensor |
| kenjiArai | 5:e8d4095d9c19 | 113 | acc.read_data(fa); |
| kenjiArai | 5:e8d4095d9c19 | 114 | // read gyroscope data from sensor |
| kenjiArai | 5:e8d4095d9c19 | 115 | gyro.read_data(fg); |
| kenjiArai | 5:e8d4095d9c19 | 116 | #else |
| kenjiArai | 5:e8d4095d9c19 | 117 | fa[0] = fa[1] = fa[2] = 1.11f; |
| kenjiArai | 5:e8d4095d9c19 | 118 | fg[0] = fg[1] = fg[2] = 1.11f; |
| kenjiArai | 5:e8d4095d9c19 | 119 | #endif |
| kenjiArai | 4:76b3113c79ff | 120 | } |
| kenjiArai | 4:76b3113c79ff | 121 | |
| kenjiArai | 4:76b3113c79ff | 122 | // Update sensor data |
| kenjiArai | 5:e8d4095d9c19 | 123 | void display(void){ |
| kenjiArai | 5:e8d4095d9c19 | 124 | #ifdef USE_I2C_LCD |
| kenjiArai | 5:e8d4095d9c19 | 125 | lcd0.locate(0, 0); // 1st line top |
| kenjiArai | 5:e8d4095d9c19 | 126 | lcd0.printf(" G=%4.1f ", sqrt(fa[0]*fa[0] + fa[1]*fa[1] + fa[2]*fa[2])); |
| kenjiArai | 5:e8d4095d9c19 | 127 | lcd0.locate(0, 1); // 2nd line top |
| kenjiArai | 5:e8d4095d9c19 | 128 | lcd0.printf("%8d",count++); |
| kenjiArai | 5:e8d4095d9c19 | 129 | #endif |
| kenjiArai | 5:e8d4095d9c19 | 130 | #ifdef USE_SPI_LCD |
| kenjiArai | 5:e8d4095d9c19 | 131 | lcd1.locate(0,0); |
| kenjiArai | 5:e8d4095d9c19 | 132 | lcd1.printf("G:%+6.1f,%+6.1f,%+6.1f \r\n", fg[0], fg[1], fg[2]); |
| kenjiArai | 5:e8d4095d9c19 | 133 | lcd1.printf("A:%+6.1f,%+6.1f,%+6.1f \r\n", fa[0], fa[1], fa[2]); |
| kenjiArai | 5:e8d4095d9c19 | 134 | lcd1.printf("%d\r\n", count++); |
| kenjiArai | 5:e8d4095d9c19 | 135 | #endif |
| kenjiArai | 4:76b3113c79ff | 136 | } |
| kenjiArai | 4:76b3113c79ff | 137 | |
| kenjiArai | 5:e8d4095d9c19 | 138 | void send_pc(void){ |
| kenjiArai | 5:e8d4095d9c19 | 139 | PRINTF("G:%+6.1f,%+6.1f,%+6.1f, ", fg[0], fg[1], fg[2]); |
| kenjiArai | 5:e8d4095d9c19 | 140 | PRINTF("A:%+6.1f,%+6.1f,%+6.1f \r\n", fa[0], fa[1], fa[2]); |
| kenjiArai | 4:76b3113c79ff | 141 | } |
| kenjiArai | 4:76b3113c79ff | 142 | |
| kenjiArai | 5:e8d4095d9c19 | 143 | int main(void) { |
| kenjiArai | 4:76b3113c79ff | 144 | // SPI LCD |
| kenjiArai | 5:e8d4095d9c19 | 145 | #ifdef USE_SPI_LCD |
| kenjiArai | 4:76b3113c79ff | 146 | spi_lcd.frequency(100000); |
| kenjiArai | 4:76b3113c79ff | 147 | lcd1.cls(); |
| kenjiArai | 4:76b3113c79ff | 148 | lcd1.set_contrast(0x2a); |
| kenjiArai | 4:76b3113c79ff | 149 | lcd1.printf("test\r\n" ); |
| kenjiArai | 4:76b3113c79ff | 150 | lcd1.printf("Kenji Arai / JH1PJL\r\n" ); |
| kenjiArai | 4:76b3113c79ff | 151 | lcd1.printf("ABCDEFG 1234567890\r\n" ); |
| kenjiArai | 4:76b3113c79ff | 152 | lcd1.rect(5,30,120,62,1); |
| kenjiArai | 4:76b3113c79ff | 153 | lcd1.circle(5,35,5,1); |
| kenjiArai | 4:76b3113c79ff | 154 | lcd1.fillcircle(60,55,5,1); |
| kenjiArai | 4:76b3113c79ff | 155 | lcd1.line(0,30,127,63,1); |
| kenjiArai | 5:e8d4095d9c19 | 156 | #endif |
| kenjiArai | 5:e8d4095d9c19 | 157 | // I2C LCD |
| kenjiArai | 5:e8d4095d9c19 | 158 | #ifdef USE_I2C_LCD |
| kenjiArai | 5:e8d4095d9c19 | 159 | lcd0.locate(0, 0); // 1st line top |
| kenjiArai | 5:e8d4095d9c19 | 160 | lcd0.printf("I2C test"); |
| kenjiArai | 5:e8d4095d9c19 | 161 | lcd0.locate(0, 1); // 2nd line top |
| kenjiArai | 5:e8d4095d9c19 | 162 | lcd0.puts(" JH1PJL "); |
| kenjiArai | 5:e8d4095d9c19 | 163 | lcd0.setContrast(0x14); |
| kenjiArai | 5:e8d4095d9c19 | 164 | #endif |
| kenjiArai | 5:e8d4095d9c19 | 165 | count = 0; |
| kenjiArai | 4:76b3113c79ff | 166 | while (true) { |
| kenjiArai | 5:e8d4095d9c19 | 167 | update_angle(); |
| kenjiArai | 5:e8d4095d9c19 | 168 | display(); |
| kenjiArai | 5:e8d4095d9c19 | 169 | send_pc(); |
| kenjiArai | 5:e8d4095d9c19 | 170 | //wait(0.2); |
| kenjiArai | 5:e8d4095d9c19 | 171 | blink((void *)0); |
| kenjiArai | 5:e8d4095d9c19 | 172 | //wait(0.2); |
| kenjiArai | 5:e8d4095d9c19 | 173 | blink((void *)1); |
| kenjiArai | 5:e8d4095d9c19 | 174 | //wait(0.2); |
| kenjiArai | 5:e8d4095d9c19 | 175 | blink((void *)2); |
| kenjiArai | 5:e8d4095d9c19 | 176 | //wait(0.2); |
| kenjiArai | 5:e8d4095d9c19 | 177 | blink((void *)3); |
| kenjiArai | 5:e8d4095d9c19 | 178 | //wait(0.2); |
| kenjiArai | 4:76b3113c79ff | 179 | } |
| kenjiArai | 4:76b3113c79ff | 180 | } |
