ああ
Dependencies: F7_Ethernet mbed mbed-rtos
Diff: main.cpp
- Revision:
- 9:a4cc7dc2d92f
- Parent:
- 8:23b1fba109b0
--- a/main.cpp Tue Feb 14 16:20:16 2017 +0000 +++ b/main.cpp Mon Sep 14 06:38:16 2020 +0000 @@ -1,51 +1,231 @@ #include "mbed.h" +#include "rtos.h" #include "EthernetInterface.h" +#include "common.h" +#include "stdio.h" -#define ECHO_SERVER_PORT 7 +#define ECHO_SERVER_PORT 10004 + +/* Debug port */ +Serial pc(USBTX, USBRX); // USBSerial serial setting + +/* GPIO setting */ +DigitalOut led1(LED1); // on board green +DigitalOut led2(LED2); // on board blue +DigitalOut led3(LED3); // on board red + +DigitalInOut OneAxisSliderPulse(PE_11, PIN_OUTPUT, OpenDrain, 0); +DigitalInOut OneAxisSliderDir(PE_9, PIN_OUTPUT, OpenDrain, 0); +// DigitalOut OneAxisSliderPulse(PE_9); +//DigitalOut OneAxisSliderDir(PE_11); + +DigitalOut OneAxisSliderORG(PF_3); +DigitalOut OneAxisSliderReset(PF_15); +DigitalOut OneAxisSliderServoOn(PF_11); + +DigitalOut Relay(PC_8); + +//DigitalInOut lamp_out(p23, PIN_OUTPUT, OpenDrain, 0); +//DigitalInOut lamp_out(p23, PIN_OUTPUT, OpenDrain, 0); + + +DigitalOut out1( PG_9 ); +AnalogOut linear_out( PA_5 ); +AnalogOut linear_out2( PA_4 ); + +DigitalIn limit1_din(PG_5); // limit1 in +DigitalIn limit2_din(PG_6); // limit2 in +AnalogIn weight_ain(PC_2); // analog input of load cell + + +/* Network setting */ +UDPSocket userver; // UDP Server +const char* ip_address = "192.168.31.31"; +const char* subnet_mask = "255.255.255.0"; +const char* gateway = "192.168.31.0"; + +Thread thread1; +Thread thread2; +Thread thread3; +Thread thread4; + +void move_distance( int dir , int dis_mm ); + -int main (void) { +/* Thread routine */ +void OneAxisSliderCtrl_thread() +{ + OneAxisSliderReset = 1; + led2 = 1; + + wait(1); + led2 = 0; + + OneAxisSliderReset = 0; + + wait_ms(3000); + + led3 = 1; + printf("Servo on\r\n"); + + // ORG-S: OFF + + OneAxisSliderServoOn = 1; + printf("Servo on\r\n"); + + + + wait(1); + OneAxisSliderORG = 1; + printf("Move to Origin\r\n"); + + // ************************************** + // while( ORG-S singnal is ON(=0V)) + // if slider is located to ORIGIN then OGG-S signal will be ON(0V) until next RESET or SERVO off + // ORG-S: OFF + // ************************************** + + + wait_ms(15000); + + wait(1); + + printf("1st move\r\n"); + move_distance( DIR_CCW, L_010mm * 30 ); + + wait_ms(8000); + + while (true) + { + while (true) + { + printf("CW move\r\n"); + move_distance( DIR_CW, L_010mm * 20 ); + + wait_ms(8000); + + + + printf("CCW move\r\n"); + move_distance( DIR_CCW, L_010mm * 20 ); + + break; + } + wait(1); + printf(" weight: %d\r\n", weight_ain.read_u16()); + } +} + + + + +void move_distance( int dir , int dis_mm ) +{ + OneAxisSliderDir = dir; + wait(0.1); + for( int i = 0; i < dis_mm; i++ ) + { + OneAxisSliderPulse = MOTOR_ON; + wait_us(5); + OneAxisSliderPulse = MOTOR_OFF; + wait_us(5); + } +} + + + +void led3_thread() +{ + while (true) + { + Relay = 0; + // Thread::wait(BLINKING_RATE_MS-20); + Thread::wait( 100 ); + Relay = 1; + Thread::wait( 100 ); + } +} + +void linear_thread() +{ + while( true ) + { + for( double i=0.0; i<1.0; i+=0.001) { + linear_out = i; + Thread::wait(50); + } + } +} + +void network_thread() +{ EthernetInterface eth; - eth.init(); //Use DHCP + eth.init( ip_address, subnet_mask, gateway ); //Use DHCP eth.connect(); - printf("\nServer IP Address is %s\n", eth.getIPAddress()); + printf("\nServer IP Address is %s\r\n", eth.getIPAddress()); TCPSocketServer server; server.bind(ECHO_SERVER_PORT); server.listen(); - - while (true) { - printf("\nWait for new connection...\n"); + + while (true) + { + printf("\nWait for new connection...\r\n"); TCPSocketConnection client; server.accept(client); client.set_blocking(false, 1500); // Timeout after (1.5)s - printf("Connection from: %s\n", client.get_address()); + printf("Connection from: %s\r\n", client.get_address()); char buffer[256]; - while (true) { + while (true) + { int n = client.receive(buffer, sizeof(buffer)); if (n <= 0) break; + led1 = 1; // print received message to terminal buffer[n] = '\0'; - printf("Received message from Client :'%s'\n",buffer); + printf("Received message from Client :'%s'\r\n",buffer); - // reverse the message - char temp; - for(int f = 0, l = n-1; f<l; f++,l--){ - temp = buffer[f]; - buffer[f] = buffer[l]; - buffer[l] = temp; - } - - // print reversed message to terminal - printf("Sending message to Client: '%s'\n",buffer); - + if( !strcmp( buffer, "SLD_P0_0000" ) ) + { + printf("Command: SLD move to position 0\r\n"); + } // Echo received message back to client client.send_all(buffer, n); if (n <= 0) break; } - client.close(); } } - \ No newline at end of file + + + + + +int main (void) { + + pc.baud(115200); // Set UART(USB) baudrate + DEBUG_PRINT_L0("\r\n"); + DEBUG_PRINT_L0(" +--------------------------------------------------------------\r\n"); + DEBUG_PRINT_L0(" | This is: Main Control Program of .....\r\n"); + DEBUG_PRINT_L0(" +--------------------------------------------------------------\r\n"); + + limit1_din.mode(PullUp); + limit2_din.mode(PullUp); +// Thread thread1(linear_thread, NULL, osPriorityNormal, 128 * 4); +// Thread thread2(led2_thread, NULL, osPriorityNormal, 128 * 4); +// Thread thread3(led3_thread, NULL, osPriorityNormal, 128 * 4); + thread1.start(linear_thread); + thread2.start(OneAxisSliderCtrl_thread); + thread3.start(led3_thread); + thread4.start(network_thread); + + //while (true) + //{ + //led1 = !led1; + //Thread::wait(1); + //SliderPulse = !SliderPulse; + + //} +} \ No newline at end of file