Kenji Arai / GR-PEACH_test_ADC

Dependencies:  

Fork of GR-PEACH_test_wo_rtos by Kenji Arai

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?

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