FOURNET Olivier
/
WIZwiki-W7500_Finite_State_Machines
WIZwiki-W7500 & Finite State Machines & MicroController
main.cpp@0:1deb2ad76751, 2016-05-14 (annotated)
- Committer:
- Fo170
- Date:
- Sat May 14 14:51:24 2016 +0000
- Revision:
- 0:1deb2ad76751
WIZwiki-W7500 & Finite?State?Machines?&?Micro?Controller
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Fo170 | 0:1deb2ad76751 | 1 | /* mbed Example Program |
Fo170 | 0:1deb2ad76751 | 2 | * Copyright (c) 2006-2014 ARM Limited |
Fo170 | 0:1deb2ad76751 | 3 | * |
Fo170 | 0:1deb2ad76751 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
Fo170 | 0:1deb2ad76751 | 5 | * you may not use this file except in compliance with the License. |
Fo170 | 0:1deb2ad76751 | 6 | * You may obtain a copy of the License at |
Fo170 | 0:1deb2ad76751 | 7 | * |
Fo170 | 0:1deb2ad76751 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
Fo170 | 0:1deb2ad76751 | 9 | * |
Fo170 | 0:1deb2ad76751 | 10 | * Unless required by applicable law or agreed to in writing, software |
Fo170 | 0:1deb2ad76751 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
Fo170 | 0:1deb2ad76751 | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
Fo170 | 0:1deb2ad76751 | 13 | * See the License for the specific language governing permissions and |
Fo170 | 0:1deb2ad76751 | 14 | * limitations under the License. |
Fo170 | 0:1deb2ad76751 | 15 | */ |
Fo170 | 0:1deb2ad76751 | 16 | #include "mbed.h" |
Fo170 | 0:1deb2ad76751 | 17 | #if defined(TARGET_WIZwiki_W7500) |
Fo170 | 0:1deb2ad76751 | 18 | Serial pc(USBTX, USBRX); // tx, rx |
Fo170 | 0:1deb2ad76751 | 19 | |
Fo170 | 0:1deb2ad76751 | 20 | /* W7500 |
Fo170 | 0:1deb2ad76751 | 21 | LED1 = LED_RED = LEDR = PC_8 |
Fo170 | 0:1deb2ad76751 | 22 | LED2 = LED_GREEN = LEDG = PC_9 |
Fo170 | 0:1deb2ad76751 | 23 | LED3 = LED_BLUE = LEDB = PC_5 |
Fo170 | 0:1deb2ad76751 | 24 | LED4 = LED_BLUE |
Fo170 | 0:1deb2ad76751 | 25 | */ |
Fo170 | 0:1deb2ad76751 | 26 | DigitalOut red(LED_RED); |
Fo170 | 0:1deb2ad76751 | 27 | DigitalOut green(LED_GREEN); |
Fo170 | 0:1deb2ad76751 | 28 | DigitalOut blue(LED_BLUE); |
Fo170 | 0:1deb2ad76751 | 29 | #endif |
Fo170 | 0:1deb2ad76751 | 30 | |
Fo170 | 0:1deb2ad76751 | 31 | Ticker toggle_led_ticker; |
Fo170 | 0:1deb2ad76751 | 32 | |
Fo170 | 0:1deb2ad76751 | 33 | int j = 1; |
Fo170 | 0:1deb2ad76751 | 34 | |
Fo170 | 0:1deb2ad76751 | 35 | void toggle_led() |
Fo170 | 0:1deb2ad76751 | 36 | { |
Fo170 | 0:1deb2ad76751 | 37 | ++j; |
Fo170 | 0:1deb2ad76751 | 38 | if(j == 7) j = 1; |
Fo170 | 0:1deb2ad76751 | 39 | } |
Fo170 | 0:1deb2ad76751 | 40 | |
Fo170 | 0:1deb2ad76751 | 41 | // Finite State Machines & MicroControllers |
Fo170 | 0:1deb2ad76751 | 42 | // http://www.allaboutcircuits.com/technical-articles/finite-state-machines-microcontrollers/ |
Fo170 | 0:1deb2ad76751 | 43 | #define _ERROR_ -1 |
Fo170 | 0:1deb2ad76751 | 44 | #define _START_ 0 |
Fo170 | 0:1deb2ad76751 | 45 | #define _INIT_ 1 |
Fo170 | 0:1deb2ad76751 | 46 | #define _RUNNING_ 2 |
Fo170 | 0:1deb2ad76751 | 47 | #define _STOP_ 3 |
Fo170 | 0:1deb2ad76751 | 48 | |
Fo170 | 0:1deb2ad76751 | 49 | #define LED_ON 0 |
Fo170 | 0:1deb2ad76751 | 50 | #define LED_OFF 1 |
Fo170 | 0:1deb2ad76751 | 51 | |
Fo170 | 0:1deb2ad76751 | 52 | int state; |
Fo170 | 0:1deb2ad76751 | 53 | int i; |
Fo170 | 0:1deb2ad76751 | 54 | |
Fo170 | 0:1deb2ad76751 | 55 | void start_code(void) |
Fo170 | 0:1deb2ad76751 | 56 | { |
Fo170 | 0:1deb2ad76751 | 57 | pc.printf("\n\rStart Code %d\n\r", state); |
Fo170 | 0:1deb2ad76751 | 58 | |
Fo170 | 0:1deb2ad76751 | 59 | for(i=0; i<300; i++) |
Fo170 | 0:1deb2ad76751 | 60 | { |
Fo170 | 0:1deb2ad76751 | 61 | red = LED_OFF; |
Fo170 | 0:1deb2ad76751 | 62 | green = LED_OFF; |
Fo170 | 0:1deb2ad76751 | 63 | blue = LED_OFF; |
Fo170 | 0:1deb2ad76751 | 64 | wait(0.1); |
Fo170 | 0:1deb2ad76751 | 65 | red = LED_OFF; |
Fo170 | 0:1deb2ad76751 | 66 | green = LED_OFF; |
Fo170 | 0:1deb2ad76751 | 67 | blue = LED_ON; |
Fo170 | 0:1deb2ad76751 | 68 | } |
Fo170 | 0:1deb2ad76751 | 69 | wait(2.0); |
Fo170 | 0:1deb2ad76751 | 70 | state = _INIT_; |
Fo170 | 0:1deb2ad76751 | 71 | } |
Fo170 | 0:1deb2ad76751 | 72 | |
Fo170 | 0:1deb2ad76751 | 73 | void init_code(void) |
Fo170 | 0:1deb2ad76751 | 74 | { |
Fo170 | 0:1deb2ad76751 | 75 | pc.printf("init Code %d\n\r", state); |
Fo170 | 0:1deb2ad76751 | 76 | red = LED_OFF; |
Fo170 | 0:1deb2ad76751 | 77 | green = LED_ON; |
Fo170 | 0:1deb2ad76751 | 78 | blue = LED_OFF; |
Fo170 | 0:1deb2ad76751 | 79 | wait(3.0); |
Fo170 | 0:1deb2ad76751 | 80 | state = _RUNNING_; |
Fo170 | 0:1deb2ad76751 | 81 | } |
Fo170 | 0:1deb2ad76751 | 82 | |
Fo170 | 0:1deb2ad76751 | 83 | void running_code(void) |
Fo170 | 0:1deb2ad76751 | 84 | { |
Fo170 | 0:1deb2ad76751 | 85 | pc.printf("Running Code %d\n\r", state); |
Fo170 | 0:1deb2ad76751 | 86 | red = LED_ON; |
Fo170 | 0:1deb2ad76751 | 87 | green = LED_ON; |
Fo170 | 0:1deb2ad76751 | 88 | blue = LED_ON; |
Fo170 | 0:1deb2ad76751 | 89 | wait(10.0); |
Fo170 | 0:1deb2ad76751 | 90 | |
Fo170 | 0:1deb2ad76751 | 91 | for(i=1; i<100; i++) |
Fo170 | 0:1deb2ad76751 | 92 | { |
Fo170 | 0:1deb2ad76751 | 93 | red = j & 1; |
Fo170 | 0:1deb2ad76751 | 94 | blue = j & 2; |
Fo170 | 0:1deb2ad76751 | 95 | green = j & 4; |
Fo170 | 0:1deb2ad76751 | 96 | wait(0.1); |
Fo170 | 0:1deb2ad76751 | 97 | } |
Fo170 | 0:1deb2ad76751 | 98 | |
Fo170 | 0:1deb2ad76751 | 99 | red = LED_ON; |
Fo170 | 0:1deb2ad76751 | 100 | green = LED_ON; |
Fo170 | 0:1deb2ad76751 | 101 | blue = LED_ON; |
Fo170 | 0:1deb2ad76751 | 102 | wait(10.0); |
Fo170 | 0:1deb2ad76751 | 103 | |
Fo170 | 0:1deb2ad76751 | 104 | state = _STOP_; |
Fo170 | 0:1deb2ad76751 | 105 | } |
Fo170 | 0:1deb2ad76751 | 106 | |
Fo170 | 0:1deb2ad76751 | 107 | void stop_code(void) |
Fo170 | 0:1deb2ad76751 | 108 | { |
Fo170 | 0:1deb2ad76751 | 109 | pc.printf("Stop Code %d\n\r", state); |
Fo170 | 0:1deb2ad76751 | 110 | red = LED_OFF; |
Fo170 | 0:1deb2ad76751 | 111 | green = LED_OFF; |
Fo170 | 0:1deb2ad76751 | 112 | blue = LED_OFF; |
Fo170 | 0:1deb2ad76751 | 113 | wait(2.0); |
Fo170 | 0:1deb2ad76751 | 114 | state = _ERROR_; // mise en erreur pour test |
Fo170 | 0:1deb2ad76751 | 115 | } |
Fo170 | 0:1deb2ad76751 | 116 | |
Fo170 | 0:1deb2ad76751 | 117 | void error_code(void) |
Fo170 | 0:1deb2ad76751 | 118 | { |
Fo170 | 0:1deb2ad76751 | 119 | pc.printf("Error Code %d\n\r", state); |
Fo170 | 0:1deb2ad76751 | 120 | red = LED_ON; |
Fo170 | 0:1deb2ad76751 | 121 | green = LED_OFF; |
Fo170 | 0:1deb2ad76751 | 122 | blue = LED_OFF; |
Fo170 | 0:1deb2ad76751 | 123 | wait(15.0); |
Fo170 | 0:1deb2ad76751 | 124 | red = LED_OFF; |
Fo170 | 0:1deb2ad76751 | 125 | green = LED_OFF; |
Fo170 | 0:1deb2ad76751 | 126 | blue = LED_OFF; |
Fo170 | 0:1deb2ad76751 | 127 | state = _START_; |
Fo170 | 0:1deb2ad76751 | 128 | } |
Fo170 | 0:1deb2ad76751 | 129 | |
Fo170 | 0:1deb2ad76751 | 130 | int main() |
Fo170 | 0:1deb2ad76751 | 131 | { |
Fo170 | 0:1deb2ad76751 | 132 | // Serial port configuration (valeurs par defaut) : 9600 baud, 8-bit data, no parity, stop bit |
Fo170 | 0:1deb2ad76751 | 133 | pc.baud(9600); |
Fo170 | 0:1deb2ad76751 | 134 | pc.format(8, SerialBase::None, 1); |
Fo170 | 0:1deb2ad76751 | 135 | |
Fo170 | 0:1deb2ad76751 | 136 | pc.printf("\n\rHello World!\n\r"); |
Fo170 | 0:1deb2ad76751 | 137 | |
Fo170 | 0:1deb2ad76751 | 138 | state = _ERROR_; |
Fo170 | 0:1deb2ad76751 | 139 | |
Fo170 | 0:1deb2ad76751 | 140 | // Init the ticker with the address of the function (toggle_led) to be attached and the interval (100 ms) |
Fo170 | 0:1deb2ad76751 | 141 | toggle_led_ticker.attach(&toggle_led, 0.25); |
Fo170 | 0:1deb2ad76751 | 142 | //------------- |
Fo170 | 0:1deb2ad76751 | 143 | while(true) |
Fo170 | 0:1deb2ad76751 | 144 | { |
Fo170 | 0:1deb2ad76751 | 145 | switch(state) |
Fo170 | 0:1deb2ad76751 | 146 | { |
Fo170 | 0:1deb2ad76751 | 147 | case _START_: |
Fo170 | 0:1deb2ad76751 | 148 | start_code(); |
Fo170 | 0:1deb2ad76751 | 149 | break; |
Fo170 | 0:1deb2ad76751 | 150 | |
Fo170 | 0:1deb2ad76751 | 151 | case _INIT_: |
Fo170 | 0:1deb2ad76751 | 152 | init_code(); |
Fo170 | 0:1deb2ad76751 | 153 | break; |
Fo170 | 0:1deb2ad76751 | 154 | |
Fo170 | 0:1deb2ad76751 | 155 | case _RUNNING_: |
Fo170 | 0:1deb2ad76751 | 156 | running_code(); |
Fo170 | 0:1deb2ad76751 | 157 | break; |
Fo170 | 0:1deb2ad76751 | 158 | |
Fo170 | 0:1deb2ad76751 | 159 | case _STOP_: |
Fo170 | 0:1deb2ad76751 | 160 | stop_code(); |
Fo170 | 0:1deb2ad76751 | 161 | break; |
Fo170 | 0:1deb2ad76751 | 162 | |
Fo170 | 0:1deb2ad76751 | 163 | case _ERROR_: |
Fo170 | 0:1deb2ad76751 | 164 | error_code(); |
Fo170 | 0:1deb2ad76751 | 165 | break; |
Fo170 | 0:1deb2ad76751 | 166 | |
Fo170 | 0:1deb2ad76751 | 167 | default: |
Fo170 | 0:1deb2ad76751 | 168 | start_code(); |
Fo170 | 0:1deb2ad76751 | 169 | } |
Fo170 | 0:1deb2ad76751 | 170 | // Do other things... |
Fo170 | 0:1deb2ad76751 | 171 | } |
Fo170 | 0:1deb2ad76751 | 172 | //-------------- |
Fo170 | 0:1deb2ad76751 | 173 | } |