use mbed-src latest version and everything works well. RTC is also fine.

Dependencies:   L3GD20 LIS3DH TextLCD mbed-rtos mbed

Use standard library mbed & mbed-rtos (GR-PEACH can run without mbed-src and special mbed-rtos).

Committer:
kenjiArai
Date:
Sat Jan 10 04:57:33 2015 +0000
Revision:
6:f14cce59e7fe
Parent:
5:dccdaaa1e57b
Child:
8:4006b111c0d4
more simple but problem is there (delete SPI LCD control)

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:f14cce59e7fe 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 "rtos.h"
kenjiArai 4:76b3113c79ff 21 #include "L3GD20.h"
kenjiArai 4:76b3113c79ff 22 #include "LIS3DH.h"
kenjiArai 5:dccdaaa1e57b 23 #include "TextLCD.h"
kenjiArai 2:3747397a1618 24
kenjiArai 4:76b3113c79ff 25 // Definition ------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 26 #define USE_COM // use Communication with PC(UART)
kenjiArai 5:dccdaaa1e57b 27 #define USE_I2C_LCD
kenjiArai 5:dccdaaa1e57b 28 #define USE_I2C_SENSOR
kenjiArai 4:76b3113c79ff 29
kenjiArai 4:76b3113c79ff 30 // Com
kenjiArai 4:76b3113c79ff 31 #ifdef USE_COM
kenjiArai 4:76b3113c79ff 32 #define BAUD(x) pcx.baud(x)
kenjiArai 4:76b3113c79ff 33 #define GETC(x) pcx.getc(x)
kenjiArai 4:76b3113c79ff 34 #define PUTC(x) pcx.putc(x)
kenjiArai 4:76b3113c79ff 35 #define PRINTF(...) pcx.printf(__VA_ARGS__)
kenjiArai 4:76b3113c79ff 36 #define READABLE(x) pcx.readable(x)
kenjiArai 4:76b3113c79ff 37 #else
kenjiArai 4:76b3113c79ff 38 #define BAUD(x) {;}
kenjiArai 4:76b3113c79ff 39 #define GETC(x) {;}
kenjiArai 4:76b3113c79ff 40 #define PUTC(x) {;}
kenjiArai 4:76b3113c79ff 41 #define PRINTF(...) {;}
kenjiArai 4:76b3113c79ff 42 #define READABLE(x) {;}
kenjiArai 0:a17b3cf2f466 43 #endif
kenjiArai 0:a17b3cf2f466 44
kenjiArai 4:76b3113c79ff 45 #define TIMEBASE 12000
kenjiArai 4:76b3113c79ff 46 #define FIXED_STEPS 100
kenjiArai 4:76b3113c79ff 47
kenjiArai 4:76b3113c79ff 48 #define PI 3.1415926536
kenjiArai 4:76b3113c79ff 49 #define RAD_TO_DEG 57.29578
kenjiArai 5:dccdaaa1e57b 50 #define TIME_BASE_S 0.02
kenjiArai 4:76b3113c79ff 51 #define TIME_BASE_MS ( TIME_BASE_S * 1000)
kenjiArai 4:76b3113c79ff 52 #define RATE 0.1
kenjiArai 4:76b3113c79ff 53
kenjiArai 4:76b3113c79ff 54 // Object ----------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 55 // LED's
kenjiArai 4:76b3113c79ff 56 DigitalOut LEDs[4] = {
kenjiArai 4:76b3113c79ff 57 DigitalOut(LED1), DigitalOut(LED2), DigitalOut(LED3), DigitalOut(LED4)
kenjiArai 4:76b3113c79ff 58 };
kenjiArai 4:76b3113c79ff 59 // Swiches
kenjiArai 4:76b3113c79ff 60 DigitalIn USER_SWITCH[2] = {
kenjiArai 5:dccdaaa1e57b 61 #if defined(TARGET_RZ_A1H)
kenjiArai 4:76b3113c79ff 62 DigitalIn(P6_0), DigitalIn(P6_1)
kenjiArai 6:f14cce59e7fe 63 #elif defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE)
kenjiArai 4:76b3113c79ff 64 DigitalIn(PC_13), DigitalIn(A0)
kenjiArai 5:dccdaaa1e57b 65 #endif
kenjiArai 4:76b3113c79ff 66 };
kenjiArai 5:dccdaaa1e57b 67
kenjiArai 5:dccdaaa1e57b 68 // OS check
kenjiArai 5:dccdaaa1e57b 69 #if defined(TARGET_RZ_A1H)
kenjiArai 5:dccdaaa1e57b 70 DigitalOut task0(P1_8);
kenjiArai 5:dccdaaa1e57b 71 DigitalOut task1(P1_9);
kenjiArai 6:f14cce59e7fe 72 #elif defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE)
kenjiArai 5:dccdaaa1e57b 73 DigitalOut task0(A0);
kenjiArai 5:dccdaaa1e57b 74 DigitalOut task1(A1);
kenjiArai 5:dccdaaa1e57b 75 #endif
kenjiArai 5:dccdaaa1e57b 76
kenjiArai 4:76b3113c79ff 77 // com
kenjiArai 4:76b3113c79ff 78 #ifdef USE_COM
kenjiArai 4:76b3113c79ff 79 Serial pcx(USBTX, USBRX); // Communication with Host
kenjiArai 4:76b3113c79ff 80 #endif
kenjiArai 4:76b3113c79ff 81 I2C i2c(D14,D15);
kenjiArai 4:76b3113c79ff 82 // Gyro
kenjiArai 4:76b3113c79ff 83 L3GX_GYRO gyro(i2c, L3GD20_V_CHIP_ADDR, L3GX_DR_95HZ, L3GX_BW_HI, L3GX_FS_250DPS);
kenjiArai 4:76b3113c79ff 84 // Acc
kenjiArai 4:76b3113c79ff 85 LIS3DH acc(i2c, LIS3DH_G_CHIP_ADDR, LIS3DH_DR_NR_LP_50HZ, LIS3DH_FS_8G);
kenjiArai 5:dccdaaa1e57b 86 #ifdef USE_I2C_LCD
kenjiArai 5:dccdaaa1e57b 87 // LCD
kenjiArai 5:dccdaaa1e57b 88 TextLCD_I2C_N lcd0(&i2c, 0x7c, TextLCD::LCD16x2); // LCD(Akizuki AQM0802A)
kenjiArai 5:dccdaaa1e57b 89 #endif
kenjiArai 4:76b3113c79ff 90 // Mutex
kenjiArai 4:76b3113c79ff 91 Mutex i2c_mutex;
kenjiArai 0:a17b3cf2f466 92
kenjiArai 4:76b3113c79ff 93 // RAM -------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 94 Queue<uint32_t, 2> queue0;
kenjiArai 4:76b3113c79ff 95 float fa[3]; // Acc 0:X, 1:Y, 2:Z
kenjiArai 4:76b3113c79ff 96 float fg[3]; // Gyro 0:X, 1:Y, 2:Z
kenjiArai 4:76b3113c79ff 97
kenjiArai 4:76b3113c79ff 98 /* Mail */
kenjiArai 4:76b3113c79ff 99 typedef struct {
kenjiArai 4:76b3113c79ff 100 float voltage; /* AD result of measured voltage */
kenjiArai 4:76b3113c79ff 101 float current; /* AD result of measured current */
kenjiArai 4:76b3113c79ff 102 uint32_t counter; /* A counter value */
kenjiArai 4:76b3113c79ff 103 } mail_t;
kenjiArai 4:76b3113c79ff 104
kenjiArai 4:76b3113c79ff 105 Mail<mail_t, 16> mail_box;
kenjiArai 4:76b3113c79ff 106
kenjiArai 4:76b3113c79ff 107 uint8_t show_flag;
kenjiArai 5:dccdaaa1e57b 108 uint32_t count;
kenjiArai 5:dccdaaa1e57b 109
kenjiArai 5:dccdaaa1e57b 110 #if defined(TARGET_RZ_A1H)
kenjiArai 5:dccdaaa1e57b 111 uint8_t big_data[4096*1024];
kenjiArai 5:dccdaaa1e57b 112 uint32_t big_data_index = 0;
kenjiArai 5:dccdaaa1e57b 113 #endif
kenjiArai 4:76b3113c79ff 114
kenjiArai 4:76b3113c79ff 115 // ROM / Constant data ---------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 116
kenjiArai 4:76b3113c79ff 117 // Function prototypes ---------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 118
kenjiArai 4:76b3113c79ff 119 // Function prototypes ---------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 120 extern int mon( void);
kenjiArai 4:76b3113c79ff 121
kenjiArai 4:76b3113c79ff 122 //-------------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 123 // Control Program
kenjiArai 4:76b3113c79ff 124 //-------------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 125 void send_thread (void const *args) {
kenjiArai 4:76b3113c79ff 126 uint32_t i = 0;
kenjiArai 4:76b3113c79ff 127 while (true) {
kenjiArai 4:76b3113c79ff 128 i++; // fake data update
kenjiArai 4:76b3113c79ff 129 mail_t *mail = mail_box.alloc();
kenjiArai 4:76b3113c79ff 130 mail->voltage = (i * 0.1) * 33;
kenjiArai 4:76b3113c79ff 131 mail->current = (i * 0.1) * 11;
kenjiArai 4:76b3113c79ff 132 mail->counter = i;
kenjiArai 4:76b3113c79ff 133 mail_box.put(mail);
kenjiArai 4:76b3113c79ff 134 Thread::wait(1000);
kenjiArai 4:76b3113c79ff 135 }
kenjiArai 4:76b3113c79ff 136 }
kenjiArai 4:76b3113c79ff 137
kenjiArai 4:76b3113c79ff 138 void blink(void const *n) {
kenjiArai 4:76b3113c79ff 139 LEDs[(int)n] = !LEDs[(int)n];
kenjiArai 4:76b3113c79ff 140 }
kenjiArai 4:76b3113c79ff 141
kenjiArai 4:76b3113c79ff 142 // Read switch status
kenjiArai 4:76b3113c79ff 143 int read_sw(uint8_t n){
kenjiArai 4:76b3113c79ff 144 if (USER_SWITCH[n] == 0){ return 1;
kenjiArai 4:76b3113c79ff 145 } else { return 0;}
kenjiArai 4:76b3113c79ff 146 }
kenjiArai 4:76b3113c79ff 147
kenjiArai 4:76b3113c79ff 148 // Monitor program
kenjiArai 4:76b3113c79ff 149 void monitor(void const *args){
kenjiArai 5:dccdaaa1e57b 150 Thread::wait(1000);
kenjiArai 4:76b3113c79ff 151 while (true){
kenjiArai 4:76b3113c79ff 152 mon();
kenjiArai 0:a17b3cf2f466 153 }
kenjiArai 0:a17b3cf2f466 154 }
kenjiArai 4:76b3113c79ff 155
kenjiArai 4:76b3113c79ff 156 // Interrupt routine
kenjiArai 4:76b3113c79ff 157 void queue_isr0() {
kenjiArai 4:76b3113c79ff 158 queue0.put((uint32_t*)1);
kenjiArai 4:76b3113c79ff 159 }
kenjiArai 4:76b3113c79ff 160
kenjiArai 4:76b3113c79ff 161 // Update sensor data
kenjiArai 4:76b3113c79ff 162 void update_angle(void const *args){
kenjiArai 4:76b3113c79ff 163 while (true) {
kenjiArai 4:76b3113c79ff 164 osEvent evt = queue0.get();
kenjiArai 4:76b3113c79ff 165 // ---->lock
kenjiArai 4:76b3113c79ff 166 i2c_mutex.lock();
kenjiArai 5:dccdaaa1e57b 167 #ifdef USE_I2C_SENSOR
kenjiArai 4:76b3113c79ff 168 // read acceleration data from sensor
kenjiArai 4:76b3113c79ff 169 acc.read_data(fa);
kenjiArai 4:76b3113c79ff 170 // read gyroscope data from sensor
kenjiArai 4:76b3113c79ff 171 gyro.read_data(fg);
kenjiArai 5:dccdaaa1e57b 172 #else
kenjiArai 5:dccdaaa1e57b 173 fa[0] = fa[1] = fa[2] = 1.11f;
kenjiArai 5:dccdaaa1e57b 174 fg[0] = fg[1] = fg[2] = 1.11f;
kenjiArai 5:dccdaaa1e57b 175 #endif
kenjiArai 4:76b3113c79ff 176 // <----unlock
kenjiArai 4:76b3113c79ff 177 i2c_mutex.unlock();
kenjiArai 5:dccdaaa1e57b 178 // debug
kenjiArai 5:dccdaaa1e57b 179 task0 = !task0;
kenjiArai 4:76b3113c79ff 180 }
kenjiArai 4:76b3113c79ff 181 }
kenjiArai 4:76b3113c79ff 182
kenjiArai 4:76b3113c79ff 183 // Update sensor data
kenjiArai 4:76b3113c79ff 184 void display(void const *args){
kenjiArai 5:dccdaaa1e57b 185 uint32_t n = 0;
kenjiArai 5:dccdaaa1e57b 186
kenjiArai 4:76b3113c79ff 187 while (true) {
kenjiArai 5:dccdaaa1e57b 188 #ifdef USE_I2C_LCD
kenjiArai 5:dccdaaa1e57b 189 i2c_mutex.lock();
kenjiArai 5:dccdaaa1e57b 190 lcd0.locate(0, 0); // 1st line top
kenjiArai 6:f14cce59e7fe 191 lcd0.printf(" G=%4.1f ", sqrt(fa[0]*fa[0] + fa[1]*fa[1] + fa[2]*fa[2]));
kenjiArai 5:dccdaaa1e57b 192 lcd0.locate(0, 1); // 2nd line top
kenjiArai 6:f14cce59e7fe 193 lcd0.printf("%8d",n++);
kenjiArai 5:dccdaaa1e57b 194 i2c_mutex.unlock();
kenjiArai 5:dccdaaa1e57b 195 #endif
kenjiArai 4:76b3113c79ff 196 Thread::wait(500);
kenjiArai 5:dccdaaa1e57b 197 // debug
kenjiArai 5:dccdaaa1e57b 198 task1 = !task1;
kenjiArai 4:76b3113c79ff 199 }
kenjiArai 4:76b3113c79ff 200 }
kenjiArai 4:76b3113c79ff 201
kenjiArai 4:76b3113c79ff 202 // Thread definition
kenjiArai 5:dccdaaa1e57b 203 #if defined(TARGET_RZ_A1H)
kenjiArai 5:dccdaaa1e57b 204 osThreadDef(update_angle, osPriorityNormal, 2048);
kenjiArai 5:dccdaaa1e57b 205 osThreadDef(monitor, osPriorityNormal, 2048);
kenjiArai 5:dccdaaa1e57b 206 osThreadDef(display, osPriorityAboveNormal, 2048);
kenjiArai 6:f14cce59e7fe 207 #elif defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE)
kenjiArai 5:dccdaaa1e57b 208 osThreadDef(update_angle, osPriorityNormal, 1024);
kenjiArai 5:dccdaaa1e57b 209 osThreadDef(monitor, osPriorityNormal, 1024);
kenjiArai 5:dccdaaa1e57b 210 osThreadDef(display, osPriorityAboveNormal, 1024);
kenjiArai 5:dccdaaa1e57b 211 #endif
kenjiArai 4:76b3113c79ff 212
kenjiArai 4:76b3113c79ff 213 int main(void) {
kenjiArai 5:dccdaaa1e57b 214 PRINTF("\r\nstep1\r\n");
kenjiArai 4:76b3113c79ff 215
kenjiArai 4:76b3113c79ff 216 RtosTimer led_1_timer(blink, osTimerPeriodic, (void *)0);
kenjiArai 4:76b3113c79ff 217 RtosTimer led_2_timer(blink, osTimerPeriodic, (void *)1);
kenjiArai 4:76b3113c79ff 218 RtosTimer led_3_timer(blink, osTimerPeriodic, (void *)2);
kenjiArai 4:76b3113c79ff 219 RtosTimer led_4_timer(blink, osTimerPeriodic, (void *)3);
kenjiArai 4:76b3113c79ff 220
kenjiArai 4:76b3113c79ff 221 PRINTF("step2\r\n");
kenjiArai 4:76b3113c79ff 222 led_1_timer.start(2000);
kenjiArai 4:76b3113c79ff 223 led_2_timer.start(1000);
kenjiArai 4:76b3113c79ff 224 led_3_timer.start(500);
kenjiArai 4:76b3113c79ff 225 led_4_timer.start(250);
kenjiArai 4:76b3113c79ff 226
kenjiArai 4:76b3113c79ff 227 PRINTF("step3\r\n");
kenjiArai 4:76b3113c79ff 228 Thread thread(send_thread);
kenjiArai 4:76b3113c79ff 229
kenjiArai 4:76b3113c79ff 230 PRINTF("step4\r\n");
kenjiArai 4:76b3113c79ff 231
kenjiArai 4:76b3113c79ff 232 // IRQ
kenjiArai 4:76b3113c79ff 233 Ticker ticker0;
kenjiArai 4:76b3113c79ff 234 Ticker ticker1;
kenjiArai 4:76b3113c79ff 235 ticker0.attach(queue_isr0, TIME_BASE_S);
kenjiArai 4:76b3113c79ff 236
kenjiArai 4:76b3113c79ff 237 PRINTF("step5\r\n");
kenjiArai 5:dccdaaa1e57b 238 // Starts threads
kenjiArai 5:dccdaaa1e57b 239 if (osThreadCreate(osThread(display), NULL) == NULL){
kenjiArai 5:dccdaaa1e57b 240 PRINTF("ERROR4\r\n");
kenjiArai 5:dccdaaa1e57b 241 }
kenjiArai 5:dccdaaa1e57b 242 if (osThreadCreate(osThread(monitor), NULL) == NULL){
kenjiArai 5:dccdaaa1e57b 243 PRINTF("ERROR3\r\n");
kenjiArai 5:dccdaaa1e57b 244 }
kenjiArai 5:dccdaaa1e57b 245 if (osThreadCreate(osThread(update_angle), NULL) == NULL){
kenjiArai 5:dccdaaa1e57b 246 PRINTF("ERROR1\r\n");
kenjiArai 5:dccdaaa1e57b 247 }
kenjiArai 5:dccdaaa1e57b 248 // I2C LCD
kenjiArai 5:dccdaaa1e57b 249 #ifdef USE_I2C_LCD
kenjiArai 5:dccdaaa1e57b 250 // ---->lock
kenjiArai 5:dccdaaa1e57b 251 i2c_mutex.lock();
kenjiArai 5:dccdaaa1e57b 252 lcd0.locate(0, 0); // 1st line top
kenjiArai 5:dccdaaa1e57b 253 lcd0.printf("I2C test");
kenjiArai 5:dccdaaa1e57b 254 lcd0.locate(0, 1); // 2nd line top
kenjiArai 5:dccdaaa1e57b 255 lcd0.puts(" JH1PJL ");
kenjiArai 5:dccdaaa1e57b 256 lcd0.setContrast(0x14);
kenjiArai 5:dccdaaa1e57b 257 // <----unlock
kenjiArai 5:dccdaaa1e57b 258 i2c_mutex.unlock();
kenjiArai 5:dccdaaa1e57b 259 #endif
kenjiArai 5:dccdaaa1e57b 260 count = 0;
kenjiArai 4:76b3113c79ff 261 PRINTF("step6\r\n");
kenjiArai 4:76b3113c79ff 262 while (true) {
kenjiArai 4:76b3113c79ff 263 osEvent evt = mail_box.get();
kenjiArai 4:76b3113c79ff 264 if (evt.status == osEventMail) {
kenjiArai 4:76b3113c79ff 265 mail_t *mail = (mail_t*)evt.value.p;
kenjiArai 4:76b3113c79ff 266 if (show_flag){
kenjiArai 4:76b3113c79ff 267 PRINTF("This is dummy!, ");
kenjiArai 4:76b3113c79ff 268 PRINTF("Volt: %.2f V, " , mail->voltage);
kenjiArai 4:76b3113c79ff 269 PRINTF("Current: %.2f A, " , mail->current);
kenjiArai 4:76b3113c79ff 270 PRINTF("# of cycles: %u\r\n", mail->counter);
kenjiArai 4:76b3113c79ff 271 }
kenjiArai 4:76b3113c79ff 272 mail_box.free(mail);
kenjiArai 4:76b3113c79ff 273 }
kenjiArai 5:dccdaaa1e57b 274 #if defined(TARGET_RZ_A1H)
kenjiArai 5:dccdaaa1e57b 275 for (uint32_t i = 0; i < 100; i++){
kenjiArai 5:dccdaaa1e57b 276 big_data[big_data_index] = ++big_data_index;
kenjiArai 5:dccdaaa1e57b 277 if (big_data_index == (4096 * 1024)){
kenjiArai 5:dccdaaa1e57b 278 big_data_index = 0;
kenjiArai 5:dccdaaa1e57b 279 }
kenjiArai 5:dccdaaa1e57b 280 }
kenjiArai 5:dccdaaa1e57b 281 #endif
kenjiArai 4:76b3113c79ff 282 }
kenjiArai 4:76b3113c79ff 283 }
kenjiArai 5:dccdaaa1e57b 284
kenjiArai 5:dccdaaa1e57b 285 void mbed_die(void) {
kenjiArai 5:dccdaaa1e57b 286 PRINTF("Error, came from os_error()!\r\n");
kenjiArai 5:dccdaaa1e57b 287 gpio_t led_1; gpio_init_out(&led_1, LED1);
kenjiArai 5:dccdaaa1e57b 288 gpio_t led_2; gpio_init_out(&led_2, LED2);
kenjiArai 5:dccdaaa1e57b 289 gpio_t led_3; gpio_init_out(&led_3, LED3);
kenjiArai 5:dccdaaa1e57b 290 gpio_t led_4; gpio_init_out(&led_4, LED4);
kenjiArai 5:dccdaaa1e57b 291
kenjiArai 5:dccdaaa1e57b 292 while (1) {
kenjiArai 5:dccdaaa1e57b 293 gpio_write(&led_1, 1);
kenjiArai 5:dccdaaa1e57b 294 gpio_write(&led_2, 0);
kenjiArai 5:dccdaaa1e57b 295 gpio_write(&led_3, 0);
kenjiArai 5:dccdaaa1e57b 296 gpio_write(&led_4, 1);
kenjiArai 5:dccdaaa1e57b 297 wait_ms(100);
kenjiArai 5:dccdaaa1e57b 298 gpio_write(&led_1, 0);
kenjiArai 5:dccdaaa1e57b 299 gpio_write(&led_2, 1);
kenjiArai 5:dccdaaa1e57b 300 gpio_write(&led_3, 1);
kenjiArai 5:dccdaaa1e57b 301 gpio_write(&led_4, 0);
kenjiArai 5:dccdaaa1e57b 302 wait_ms(100);
kenjiArai 5:dccdaaa1e57b 303 }
kenjiArai 5:dccdaaa1e57b 304 }