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.
Dependencies: mbed mbed-rtos EthernetInterface
main.cpp@3:791851ed2989, 2018-12-10 (annotated)
- Committer:
- yukisega
- Date:
- Mon Dec 10 20:26:49 2018 +0000
- Branch:
- add_TCP_Socket
- Revision:
- 3:791851ed2989
- Parent:
- 1:8485adfbbd18
fix start thread
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JadeEtoile | 0:e894a0665114 | 1 | /* mbed Microcontroller Library |
JadeEtoile | 0:e894a0665114 | 2 | * Copyright (c) 2018 ARM Limited |
JadeEtoile | 0:e894a0665114 | 3 | * SPDX-License-Identifier: Apache-2.0 |
JadeEtoile | 0:e894a0665114 | 4 | */ |
JadeEtoile | 0:e894a0665114 | 5 | |
JadeEtoile | 0:e894a0665114 | 6 | #include "mbed.h" |
yukisega | 1:8485adfbbd18 | 7 | #include "EthernetInterface.h" |
yukisega | 1:8485adfbbd18 | 8 | #include "rtos.h" |
yukisega | 1:8485adfbbd18 | 9 | |
JadeEtoile | 0:e894a0665114 | 10 | |
JadeEtoile | 0:e894a0665114 | 11 | #define ON (1) |
JadeEtoile | 0:e894a0665114 | 12 | #define OFF (0) |
JadeEtoile | 0:e894a0665114 | 13 | |
JadeEtoile | 0:e894a0665114 | 14 | #define COLOR_RED (0b100) |
JadeEtoile | 0:e894a0665114 | 15 | #define COLOR_YELLOW (0b110) |
JadeEtoile | 0:e894a0665114 | 16 | #define COLOR_GREEN (0b010) |
JadeEtoile | 0:e894a0665114 | 17 | #define COLOR_BLUE (0b001) |
JadeEtoile | 0:e894a0665114 | 18 | #define COLOR_CYAN (0b011) |
JadeEtoile | 0:e894a0665114 | 19 | #define COLOR_MAZENTA (0b101) |
JadeEtoile | 0:e894a0665114 | 20 | #define COLOR_WHITE (0b111) |
JadeEtoile | 0:e894a0665114 | 21 | #define COLOR_BLACK (0b000) |
JadeEtoile | 0:e894a0665114 | 22 | |
yukisega | 1:8485adfbbd18 | 23 | |
yukisega | 1:8485adfbbd18 | 24 | |
yukisega | 1:8485adfbbd18 | 25 | /*** Network Information ***/ |
yukisega | 1:8485adfbbd18 | 26 | ///myIpAddrこのモータドライバのIPアドレスを入力 |
yukisega | 1:8485adfbbd18 | 27 | #define myIpAddr "10.42.0.98" |
yukisega | 1:8485adfbbd18 | 28 | /// myPortこのプログラムで使用するポートを入力 |
yukisega | 1:8485adfbbd18 | 29 | #define myPort 50000 |
yukisega | 1:8485adfbbd18 | 30 | /// NetMask このモータドライバ用のネットマスクを入力 |
yukisega | 1:8485adfbbd18 | 31 | #define NetMask "255.255.255.0" |
yukisega | 1:8485adfbbd18 | 32 | /// Gateway このモータドライバ用のゲートウェイを入力 |
yukisega | 1:8485adfbbd18 | 33 | #define Gateway "10.42.0.1" |
yukisega | 1:8485adfbbd18 | 34 | |
yukisega | 1:8485adfbbd18 | 35 | //Network |
yukisega | 1:8485adfbbd18 | 36 | DigitalOut EthRecv_LED(LED1); |
yukisega | 1:8485adfbbd18 | 37 | DigitalOut EthSend_LED(LED2); |
yukisega | 1:8485adfbbd18 | 38 | DigitalOut Ethconnect_LED(LED4); |
yukisega | 1:8485adfbbd18 | 39 | |
JadeEtoile | 0:e894a0665114 | 40 | DigitalOut led_ctrl_5v(p8); |
JadeEtoile | 0:e894a0665114 | 41 | DigitalOut led_ctrl_12v(p9); |
JadeEtoile | 0:e894a0665114 | 42 | DigitalOut led_ctrl_24v(p10); |
JadeEtoile | 0:e894a0665114 | 43 | DigitalOut led_ctrl_main(p6); |
JadeEtoile | 0:e894a0665114 | 44 | DigitalOut led_motor_main_fuse(p5); |
JadeEtoile | 0:e894a0665114 | 45 | DigitalOut led_motor_12v_fuse(p7); |
JadeEtoile | 0:e894a0665114 | 46 | DigitalOut led_motor_main(p11); |
JadeEtoile | 0:e894a0665114 | 47 | DigitalOut led_motor_12v(p17); |
JadeEtoile | 0:e894a0665114 | 48 | |
JadeEtoile | 0:e894a0665114 | 49 | DigitalIn relay_ctrl_main(p14, PullNone); |
JadeEtoile | 0:e894a0665114 | 50 | DigitalIn relay_motor_main(p12, PullNone); |
JadeEtoile | 0:e894a0665114 | 51 | DigitalIn relay_motor_12v(p13, PullNone); |
JadeEtoile | 0:e894a0665114 | 52 | |
JadeEtoile | 0:e894a0665114 | 53 | AnalogIn ad_ctrl_main(p20); |
JadeEtoile | 0:e894a0665114 | 54 | |
JadeEtoile | 0:e894a0665114 | 55 | Serial pc(USBTX, USBRX, 9600); |
JadeEtoile | 0:e894a0665114 | 56 | |
yukisega | 1:8485adfbbd18 | 57 | Mutex g_mtx; |
yukisega | 1:8485adfbbd18 | 58 | typedef struct{ |
yukisega | 1:8485adfbbd18 | 59 | char color,data; |
yukisega | 1:8485adfbbd18 | 60 | }MONITOR; |
yukisega | 1:8485adfbbd18 | 61 | |
yukisega | 1:8485adfbbd18 | 62 | MONITOR mon; |
yukisega | 1:8485adfbbd18 | 63 | |
yukisega | 1:8485adfbbd18 | 64 | |
yukisega | 1:8485adfbbd18 | 65 | |
JadeEtoile | 0:e894a0665114 | 66 | I2C i2c_master(p28, p27); |
JadeEtoile | 0:e894a0665114 | 67 | const char master_addr = 0x70; |
JadeEtoile | 0:e894a0665114 | 68 | |
JadeEtoile | 0:e894a0665114 | 69 | /*CAN*/ |
JadeEtoile | 0:e894a0665114 | 70 | CAN can_master(p30, p29); |
JadeEtoile | 0:e894a0665114 | 71 | |
JadeEtoile | 0:e894a0665114 | 72 | void LedCheck(void); |
JadeEtoile | 0:e894a0665114 | 73 | |
yukisega | 1:8485adfbbd18 | 74 | //Ehternet Thread |
yukisega | 1:8485adfbbd18 | 75 | void ethernet_thread(void){ |
yukisega | 1:8485adfbbd18 | 76 | char in_buf[64]; |
yukisega | 1:8485adfbbd18 | 77 | |
yukisega | 1:8485adfbbd18 | 78 | EthernetInterface eth; |
yukisega | 1:8485adfbbd18 | 79 | //eth.init(); |
yukisega | 1:8485adfbbd18 | 80 | eth.init(myIpAddr,NetMask,Gateway); |
yukisega | 1:8485adfbbd18 | 81 | eth.connect(); |
yukisega | 1:8485adfbbd18 | 82 | printf("\nServer IP Address is %s\n", eth.getIPAddress()); |
yukisega | 1:8485adfbbd18 | 83 | |
yukisega | 1:8485adfbbd18 | 84 | TCPSocketServer server; |
yukisega | 1:8485adfbbd18 | 85 | server.bind(myPort); |
yukisega | 1:8485adfbbd18 | 86 | server.listen(); |
yukisega | 1:8485adfbbd18 | 87 | |
yukisega | 1:8485adfbbd18 | 88 | while (true) { |
yukisega | 1:8485adfbbd18 | 89 | printf("\nWait for new connection...\n"); |
yukisega | 1:8485adfbbd18 | 90 | TCPSocketConnection *client = new TCPSocketConnection; |
yukisega | 1:8485adfbbd18 | 91 | server.accept(*client); |
yukisega | 1:8485adfbbd18 | 92 | |
yukisega | 1:8485adfbbd18 | 93 | printf("Connection from: %s\n", client->get_address()); |
yukisega | 1:8485adfbbd18 | 94 | |
yukisega | 1:8485adfbbd18 | 95 | while (client->is_connected()) { |
yukisega | 1:8485adfbbd18 | 96 | |
yukisega | 1:8485adfbbd18 | 97 | Ethconnect_LED = 1; |
yukisega | 1:8485adfbbd18 | 98 | int len = client->receive(in_buf, sizeof(in_buf)); |
yukisega | 1:8485adfbbd18 | 99 | EthRecv_LED = !EthRecv_LED; |
yukisega | 1:8485adfbbd18 | 100 | // print received message to terminal |
yukisega | 1:8485adfbbd18 | 101 | // in_buf[len] = '\0'; |
yukisega | 1:8485adfbbd18 | 102 | if(len > 0){ |
yukisega | 1:8485adfbbd18 | 103 | // Timeout_timer.reset(); |
yukisega | 1:8485adfbbd18 | 104 | in_buf[len] = '\0'; |
yukisega | 1:8485adfbbd18 | 105 | //Get data |
yukisega | 1:8485adfbbd18 | 106 | EthRecv_LED = !EthRecv_LED; |
yukisega | 1:8485adfbbd18 | 107 | g_mtx.lock(); |
yukisega | 1:8485adfbbd18 | 108 | memcpy(&mon.color, &in_buf[0], 1); |
yukisega | 1:8485adfbbd18 | 109 | memcpy(&mon.data, &in_buf[1], 1); |
yukisega | 1:8485adfbbd18 | 110 | //printf("Received message from Client :'%f'\n",pipe_pwmduty); |
yukisega | 1:8485adfbbd18 | 111 | g_mtx.unlock(); |
yukisega | 1:8485adfbbd18 | 112 | } |
yukisega | 1:8485adfbbd18 | 113 | } |
yukisega | 1:8485adfbbd18 | 114 | printf("\nclient closed\n"); |
yukisega | 1:8485adfbbd18 | 115 | Ethconnect_LED = 0; |
yukisega | 1:8485adfbbd18 | 116 | client->close(); |
yukisega | 1:8485adfbbd18 | 117 | delete client; |
yukisega | 1:8485adfbbd18 | 118 | } |
yukisega | 1:8485adfbbd18 | 119 | } |
yukisega | 1:8485adfbbd18 | 120 | |
yukisega | 1:8485adfbbd18 | 121 | |
JadeEtoile | 0:e894a0665114 | 122 | // main() runs in its own thread in the OS |
JadeEtoile | 0:e894a0665114 | 123 | int main() |
JadeEtoile | 0:e894a0665114 | 124 | { |
yukisega | 3:791851ed2989 | 125 | /* Start Thread */ |
yukisega | 3:791851ed2989 | 126 | Thread thread_get(ethernet_thread); |
yukisega | 3:791851ed2989 | 127 | |
JadeEtoile | 0:e894a0665114 | 128 | float voltage_ctrl_main = 0.0; |
JadeEtoile | 0:e894a0665114 | 129 | char command; |
JadeEtoile | 0:e894a0665114 | 130 | char address; |
JadeEtoile | 0:e894a0665114 | 131 | char data[8]; |
JadeEtoile | 0:e894a0665114 | 132 | char can_data[2]; |
JadeEtoile | 0:e894a0665114 | 133 | led_ctrl_5v = OFF; |
JadeEtoile | 0:e894a0665114 | 134 | led_ctrl_12v = OFF; |
JadeEtoile | 0:e894a0665114 | 135 | led_ctrl_24v = OFF; |
JadeEtoile | 0:e894a0665114 | 136 | led_ctrl_main = OFF; |
JadeEtoile | 0:e894a0665114 | 137 | led_motor_main_fuse = OFF; |
JadeEtoile | 0:e894a0665114 | 138 | led_motor_12v_fuse = OFF; |
JadeEtoile | 0:e894a0665114 | 139 | led_motor_main = OFF; |
JadeEtoile | 0:e894a0665114 | 140 | led_motor_12v = OFF; |
JadeEtoile | 0:e894a0665114 | 141 | |
JadeEtoile | 0:e894a0665114 | 142 | LedCheck(); |
JadeEtoile | 0:e894a0665114 | 143 | |
JadeEtoile | 0:e894a0665114 | 144 | while (true) { |
JadeEtoile | 0:e894a0665114 | 145 | /*address = 0b1001000; |
JadeEtoile | 0:e894a0665114 | 146 | command = 0b10000011; |
JadeEtoile | 0:e894a0665114 | 147 | i2c_master.write(address, &command, 1, true); |
JadeEtoile | 0:e894a0665114 | 148 | wait_us(300); |
JadeEtoile | 0:e894a0665114 | 149 | i2c_master.read(address, &data[0], 1, true); |
JadeEtoile | 0:e894a0665114 | 150 | |
JadeEtoile | 0:e894a0665114 | 151 | command = 0b10010011; |
JadeEtoile | 0:e894a0665114 | 152 | i2c_master.write(address, &command, 1); |
JadeEtoile | 0:e894a0665114 | 153 | wait_us(300); |
JadeEtoile | 0:e894a0665114 | 154 | i2c_master.read(address, &data[1], 1, true); |
JadeEtoile | 0:e894a0665114 | 155 | |
JadeEtoile | 0:e894a0665114 | 156 | command = 0b10100011; |
JadeEtoile | 0:e894a0665114 | 157 | i2c_master.write(address, &command, 1); |
JadeEtoile | 0:e894a0665114 | 158 | wait_us(300); |
JadeEtoile | 0:e894a0665114 | 159 | i2c_master.read(address, &data[2], 1, true); |
JadeEtoile | 0:e894a0665114 | 160 | |
JadeEtoile | 0:e894a0665114 | 161 | command = 0b10110011; |
JadeEtoile | 0:e894a0665114 | 162 | i2c_master.write(address, &command, 1); |
JadeEtoile | 0:e894a0665114 | 163 | wait_us(300); |
JadeEtoile | 0:e894a0665114 | 164 | i2c_master.read(address, &data[3], 1, true); |
JadeEtoile | 0:e894a0665114 | 165 | |
JadeEtoile | 0:e894a0665114 | 166 | voltage_ctrl_main = (ad_ctrl_main.read() * 104.0 * 3.3 / 13.0);*/ |
JadeEtoile | 0:e894a0665114 | 167 | led_ctrl_main = relay_ctrl_main; |
JadeEtoile | 0:e894a0665114 | 168 | led_motor_main_fuse = relay_motor_main; |
JadeEtoile | 0:e894a0665114 | 169 | led_motor_main = relay_motor_main; |
JadeEtoile | 0:e894a0665114 | 170 | led_motor_12v_fuse = relay_motor_12v; |
JadeEtoile | 0:e894a0665114 | 171 | //printf("%04x\t%04x\t%04x\t%04x\t", data[0], data[1], data[2], data[3]); |
JadeEtoile | 0:e894a0665114 | 172 | //printf("%f(v)\n", voltage_ctrl_main); |
JadeEtoile | 0:e894a0665114 | 173 | |
JadeEtoile | 0:e894a0665114 | 174 | if(ON == relay_motor_main) |
JadeEtoile | 0:e894a0665114 | 175 | { |
JadeEtoile | 0:e894a0665114 | 176 | can_data[0] = COLOR_YELLOW; |
JadeEtoile | 0:e894a0665114 | 177 | can_data[1] = 0x10; |
JadeEtoile | 0:e894a0665114 | 178 | } |
JadeEtoile | 0:e894a0665114 | 179 | else |
JadeEtoile | 0:e894a0665114 | 180 | { |
JadeEtoile | 0:e894a0665114 | 181 | can_data[0] = COLOR_RED; |
JadeEtoile | 0:e894a0665114 | 182 | can_data[1] = 0x10; |
JadeEtoile | 0:e894a0665114 | 183 | } |
JadeEtoile | 0:e894a0665114 | 184 | CANMessage msg(0x1852, can_data, sizeof(can_data), CANData, CANStandard); |
JadeEtoile | 0:e894a0665114 | 185 | can_master.write(msg); |
JadeEtoile | 0:e894a0665114 | 186 | } |
JadeEtoile | 0:e894a0665114 | 187 | } |
JadeEtoile | 0:e894a0665114 | 188 | |
JadeEtoile | 0:e894a0665114 | 189 | void LedCheck(void) |
JadeEtoile | 0:e894a0665114 | 190 | { |
JadeEtoile | 0:e894a0665114 | 191 | led_ctrl_5v = ON; |
JadeEtoile | 0:e894a0665114 | 192 | wait(0.05f); |
JadeEtoile | 0:e894a0665114 | 193 | led_ctrl_5v = OFF; |
JadeEtoile | 0:e894a0665114 | 194 | |
JadeEtoile | 0:e894a0665114 | 195 | led_ctrl_12v = ON; |
JadeEtoile | 0:e894a0665114 | 196 | wait(0.05f); |
JadeEtoile | 0:e894a0665114 | 197 | led_ctrl_12v = OFF; |
JadeEtoile | 0:e894a0665114 | 198 | |
JadeEtoile | 0:e894a0665114 | 199 | led_ctrl_24v = ON; |
JadeEtoile | 0:e894a0665114 | 200 | wait(0.05f); |
JadeEtoile | 0:e894a0665114 | 201 | led_ctrl_24v = OFF; |
JadeEtoile | 0:e894a0665114 | 202 | |
JadeEtoile | 0:e894a0665114 | 203 | led_ctrl_main = ON; |
JadeEtoile | 0:e894a0665114 | 204 | wait(0.05f); |
JadeEtoile | 0:e894a0665114 | 205 | led_ctrl_main = OFF; |
JadeEtoile | 0:e894a0665114 | 206 | |
JadeEtoile | 0:e894a0665114 | 207 | led_motor_main_fuse = ON; |
JadeEtoile | 0:e894a0665114 | 208 | wait(0.05f); |
JadeEtoile | 0:e894a0665114 | 209 | led_motor_main_fuse = OFF; |
JadeEtoile | 0:e894a0665114 | 210 | |
JadeEtoile | 0:e894a0665114 | 211 | led_motor_12v_fuse = ON; |
JadeEtoile | 0:e894a0665114 | 212 | wait(0.05f); |
JadeEtoile | 0:e894a0665114 | 213 | led_motor_12v_fuse = OFF; |
JadeEtoile | 0:e894a0665114 | 214 | |
JadeEtoile | 0:e894a0665114 | 215 | led_motor_main = ON; |
JadeEtoile | 0:e894a0665114 | 216 | wait(0.05f); |
JadeEtoile | 0:e894a0665114 | 217 | led_motor_main = OFF; |
JadeEtoile | 0:e894a0665114 | 218 | |
JadeEtoile | 0:e894a0665114 | 219 | led_motor_12v = ON; |
JadeEtoile | 0:e894a0665114 | 220 | wait(0.05f); |
JadeEtoile | 0:e894a0665114 | 221 | led_motor_12v = OFF; |
JadeEtoile | 0:e894a0665114 | 222 | |
JadeEtoile | 0:e894a0665114 | 223 | led_ctrl_5v = ON; |
JadeEtoile | 0:e894a0665114 | 224 | led_ctrl_12v = ON; |
JadeEtoile | 0:e894a0665114 | 225 | led_ctrl_24v = ON; |
JadeEtoile | 0:e894a0665114 | 226 | led_ctrl_main = ON; |
JadeEtoile | 0:e894a0665114 | 227 | led_motor_main_fuse = ON; |
JadeEtoile | 0:e894a0665114 | 228 | led_motor_12v_fuse = ON; |
JadeEtoile | 0:e894a0665114 | 229 | led_motor_main = ON; |
JadeEtoile | 0:e894a0665114 | 230 | led_motor_12v = ON; |
JadeEtoile | 0:e894a0665114 | 231 | wait(0.2f); |
JadeEtoile | 0:e894a0665114 | 232 | |
JadeEtoile | 0:e894a0665114 | 233 | led_ctrl_12v = OFF; |
JadeEtoile | 0:e894a0665114 | 234 | led_ctrl_5v = OFF; |
JadeEtoile | 0:e894a0665114 | 235 | led_ctrl_24v = OFF; |
JadeEtoile | 0:e894a0665114 | 236 | led_ctrl_main = OFF; |
JadeEtoile | 0:e894a0665114 | 237 | led_motor_main_fuse = OFF; |
JadeEtoile | 0:e894a0665114 | 238 | led_motor_12v_fuse = OFF; |
JadeEtoile | 0:e894a0665114 | 239 | led_motor_main = OFF; |
JadeEtoile | 0:e894a0665114 | 240 | led_motor_12v = OFF; |
JadeEtoile | 0:e894a0665114 | 241 | |
JadeEtoile | 0:e894a0665114 | 242 | } |