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: F7_Ethernet mbed mbed-rtos
Revision 9:a4cc7dc2d92f, committed 2020-09-14
- Comitter:
- sayzyas
- Date:
- Mon Sep 14 06:38:16 2020 +0000
- Parent:
- 8:23b1fba109b0
- Commit message:
- 1
Changed in this revision
diff -r 23b1fba109b0 -r a4cc7dc2d92f EthernetInterface.lib --- a/EthernetInterface.lib Tue Feb 14 16:20:16 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/mbed_official/code/EthernetInterface/#183490eb1b4a
diff -r 23b1fba109b0 -r a4cc7dc2d92f F7_Ethernet.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/F7_Ethernet.lib Mon Sep 14 06:38:16 2020 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/DieterGraef/code/F7_Ethernet/#28ba13dd96f7
diff -r 23b1fba109b0 -r a4cc7dc2d92f common.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/common.h Mon Sep 14 06:38:16 2020 +0000
@@ -0,0 +1,338 @@
+/*
+ DEBUG PRINT MACRO
+ http://qiita.com/saltheads/items/e1b0ab54d3d6029c9593
+ http://tricky-code.net/nicecode/code10.php
+*/
+/* Information */
+#define LatestUpDate "2020.07.02"
+#define ProgramRevision "Rev 0.01"
+#define Author "y.saito"
+#define Company "Sanei Co.,Ltd."
+
+//#define __CREATE_SETTING_FILE__
+//#define __TARGET_BOARD_CHECK__
+
+
+//#define __WInchDebug__ // For debugging
+
+
+// Comment out if net setting is FIX.
+// #define __NET_SETTING_FROM_LFS__
+
+
+// Read motor current
+#define __READ_TFM_MOTOR_CURRENT__
+
+#define __IIC_COMAMND_SEND__
+
+#define __SET_WINCH_MOTOR_SPEED_BY_VOLUME__
+
+/**********************************************
+ For Debugging
+***********************************************/
+#define __DEBUG_L0__
+#define __DEBUG_L1__
+#define __DEBUG_L2__
+#define __DEBUG_L3__
+#define __DEBUG_L4__
+#define __DEBUG_L5__
+
+#ifdef __DEBUG_L0__
+ #define DEBUG_PRINT_L0(...) pc.printf(__VA_ARGS__)
+#else
+ #define DEBUG_PRINT_L0(...)
+#endif
+#ifdef __DEBUG_L1__
+ #define DEBUG_PRINT_L1(...) pc.printf(__VA_ARGS__)
+#else
+ #define DEBUG_PRINT_L1(...)
+#endif
+#ifdef __DEBUG_L2__
+ #define DEBUG_PRINT_L2(...) pc.printf(__VA_ARGS__)
+#else
+ #define DEBUG_PRINT_L2(...)
+#endif
+#ifdef __DEBUG_L3__
+ #define DEBUG_PRINT_L3(...) pc.printf(__VA_ARGS__)
+#else
+ #define DEBUG_PRINT_L3(...)
+#endif
+#ifdef __DEBUG_L4__
+ #define DEBUG_PRINT_L4(...) pc.printf(__VA_ARGS__)
+#else
+ #define DEBUG_PRINT_L4(...)
+#endif
+#ifdef __DEBUG_L5__
+ #define DEBUG_PRINT_L5(...) pc.printf(__VA_ARGS__)
+#else
+ #define DEBUG_PRINT_L5(...)
+#endif
+
+
+
+/* *****
+ Constant definition
+***** */
+#define BLINKING_RATE_MS 100 /* Blinking rate */
+
+
+#define DIR_CCW 1
+#define DIR_CW 0
+#define MOTOR_ON 1
+#define MOTOR_OFF 0
+
+#define L_001mm 1000 * 2
+#define L_002mm 2000 * 2
+#define L_003mm 3000 * 2
+#define L_004mm 4000 * 2
+#define L_005mm 5000 * 2
+#define L_006mm 6000 * 2
+#define L_007mm 7000 * 2
+#define L_008mm 8000 * 2
+#define L_009mm 9000 * 2
+#define L_010mm 10000 * 2
+#define L_050mm 50000 * 2
+#define L_100mm 100000 * 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/* Above is still under construction ..... */
+
+#define __DISP_GAMAPAD_STATUS_ALL__
+#define __DISP_WRITE_VALUE__
+
+#define I2C_ADDRESS_HANDY 0x20
+#define I2C_ADDRESS_WINCH 0x10
+#define I2C_ADDRESS_TRANSFORM 0x08
+#define I2C_ADDRESS_CRAWLER 0x04
+#define I2C_ADDRESS_RESOLVER 0x02
+
+
+#define _OK_ 1
+#define _NG_ 0
+#define _FAIL_ 0
+
+#define ON 1
+#define OFF 0
+
+#define LFS_READ_COUNT 3
+#define TARGET_CHECK_COUNT 10
+
+//#define __DSP_MOTOR_CURRENT_
+
+/* Usually this should be comment out */
+//#define _COMMUNCATE_PC_BY_SERIAL_
+
+// Should validate this definition when you use DHCP.
+//#define __ETERNET_DHCP__
+
+#define NumberOfPcCommand 11
+#define NumberOfI2CCommand 14
+
+/* I2C Command packet to motor controller */
+/* For motor controller */
+enum{
+ I2C_CP_PREAMBLE, // Preamble of command packet
+ I2C_CP_COMMAND, // instruction command
+ I2C_CP_M1_DIR, // motor1 rotation direction
+ I2C_CP_M1_SPEED, // motor1 rotation speed
+ I2C_CP_M1_FWD_CNTTH_U, // motor1 current limit detection threshold upper byte
+ I2C_CP_M1_FWD_CNTTH_L, // motor1 current limit detection threshold lower byte
+ I2C_CP_M1_RVS_CNTTH_U, // motor1 current limit detection threshold upper byte
+ I2C_CP_M1_RVS_CNTTH_L, // motor1 current limit detection threshold lower byte
+ I2C_CP_M2_DIR, // motor2 rotation direction
+ I2C_CP_M2_SPEED, // motor2 rotation speed
+ I2C_CP_M2_FWD_CNTTH_U, // motor2 current limit detection threshold upper byte
+ I2C_CP_M2_FWD_CNTTH_L, // motor2 current limit detection threshold lower byte
+ I2C_CP_M2_RVS_CNTTH_U, // motor2 current limit detection threshold upper byte
+ I2C_CP_M2_RVS_CNTTH_L, // motor2 current limit detection threshold lower byte
+};
+/* For resolver reader controller */
+enum{
+ I2C_CP_PREAMBLE_R, // Sub command
+ I2C_CP_COMMAND_R, // instruction command
+ I2C_CP_WDRAM_DIA_UPPER, // motor1 rotation direction
+ I2C_CP_WDRAM_DIA_LOWER, // motor1 rotation speed
+ I2C_CP_CCABLE_DIA_UPPER, // motor1 current limit detection threshold upper byte
+ I2C_CP_CCABLE_DIA_LOWER, // motor1 current limit detection threshold lower byte
+ I2C_CP_RESOLVER_RESO, // motor1 current limit detection threshold upper byte
+ I2C_CP_PRESET_CPOS_UPPER, // reserved
+ I2C_CP_PRESET_CPOS_LOWER, // reserved
+ I2C_CP_RES3, // reserved
+ I2C_CP_RES4, // reserved
+ I2C_CP_RES5, // reserved
+ I2C_CP_RES6, // reserved
+ I2C_CP_RES7, // reserved
+};
+
+
+
+/* Winch Operating mode */
+enum{
+ WINCH_POSITION_CLEAR,
+ WINCH_PRESET_BASEDATA,
+ WINCH_MMODE_RELATIVE,
+ WINCH_MMODE_ABSOLUTE,
+ WINCH_STEPDOWN_BTN_ON,
+ WINCH_STEPDOWN_BTN_OFF,
+ WINCH_STEPUP_BTN_ON,
+ WINCH_STEPUP_BTN_OFF,
+ WINCH_U_STEPDOWN_BTN_ON,
+ WINCH_U_STEPDOWN_BTN_OFF,
+ WINCH_U_STEPUP_BTN_ON,
+ WINCH_U_STEPUP_BTN_OFF,
+ WINCH_PRESET_POSITION,
+};
+
+/* Game Pad defnition */
+#define GAMEPAD_VID_LOGICOOL 0x046d
+#define GAMEPAD_PID_LOGICOOL_F710 0xc219
+#define GAMEPAD_PID_LOGICOOL_F310 0xc216
+
+#define GAMEPAD_VID_SANWA 0x12bd
+#define GAMEPAD_PID_SANWA_JYP70US 0xc003
+
+#define GAMEPAD_VID_ELECOM 0x056e
+#define GAMEPAD_PID_ELECOM_JCU3613M 0x2003
+
+#define GAMEPAD_VID_RSTHANDY 0x1234
+#define GAMEPAD_PID_RSTHANDY 0x0006
+
+
+/* Ether net */
+#define TCP_SERVER_PORT 10002
+#define UDP_SERVER_PORT 10000
+//#define ECHO_SERVER_PORT 7
+
+#define MOTOR_FWD 'F' /* Forward Rotation */
+#define MOTOR_RVS 'R' /* Reverse Rotation */
+#define MOTOR_STP 'S' /* Stop */
+
+// =========================================================
+// Setting Values
+// =========================================================
+typedef struct {
+ int8_t sv_JS_ShapeMode; // JS Shape: 0=I, 1=KO
+ int8_t sv_JS_OpeMode; // JS Operation: 0=single, 1=dual
+ int8_t sv_WinchValid; // Winch function valid or not: 0=Tfm, Crawler valid, 1=Winch valid
+ int8_t res;
+} basic_operation_t;
+
+typedef struct {
+ uint16_t sv_WDM_ith_F; // 2 Current Threshold Winch Dram Motor Fwd rotation.
+ uint16_t sv_WDM_ith_R; // 2 Current Threshold Winch Dram Motor Rvs rotation.
+ uint16_t sv_WRM_ith_F; // 2 Current Threshold Winch .... Motor Fwd rotation.
+ uint16_t sv_WRM_ith_R; // 2 Current Threshold Winch .... Motor Rvs rotation.
+ uint8_t sv_WDM_hsrto_F; // 1 Winch Dram Motor high speed ratio Fwd
+ uint8_t sv_WDM_hsrto_R; // 1 Winch Dram Motor high speed ratio Rvs
+ uint8_t sv_WDM_lsrto_F; // 1 Winch Dram Motor low speed ratio Fwd
+ uint8_t sv_WDM_lsrto_R; // 1 Winch Dram Motor low speed ratio Rvs
+ uint8_t sv_WRM_hsrto_F; // 1 Winch .... Motor high speed limit Fwd
+ uint8_t sv_WRM_hsrto_R; // 1 Winch .... Motor high speed limit Rvs
+ uint8_t sv_WRM_lsrto_F; // 1 Winch .... Motor low speed ratio Fwd
+ uint8_t sv_WRM_lsrto_R; // 1 Winch .... Motor low speed ratio Rvs
+ uint16_t sv_WRS_DramDmrx100; // 2 Winch Dram diameter x 100;
+ uint16_t sv_WRS_CCableDmrx100; // 2 Winch CCable diameter x 100
+ uint8_t sv_WRS_RResolution; // 1 Winch Resolver resolution (bit)
+ uint8_t reserved; // 1 reserved for future use
+} winch_SetValue_t; // 22 byte
+
+typedef struct {
+ uint16_t sv_RFTM_ith_F; // 2 RF transform motor Fwd roration current threshold
+ uint16_t sv_RFTM_ith_R; // 2 RF transform motor Rvs roration current threshold
+ uint16_t sv_LBTM_ith_F; // 2 LB transform motor Fwd roration current threshold
+ uint16_t sv_LBTM_ith_R; // 2 LB transform motor Rvs roration current threshold
+ uint8_t sv_RFTM_srto_F; // 1 RF transform motor Fwd rotation speed ratio
+ uint8_t sv_RFTM_srto_R; // 1 RF transform motor Rvs rotation speed ratio
+ uint8_t sv_LBTM_srto_F; // 1 LB transform motor Fwd rotation speed ratio
+ uint8_t sv_LBTM_srto_R; // 1 LB transform motor Rvs rotation speed ratio
+} tfm_SetValue_t; // 12 byte
+
+typedef struct {
+ uint16_t sv_RFCM_ith_F; // 2 RF Crawler motor Fwd rotation current threshold
+ uint16_t sv_RFCM_ith_R; // 2 RF Crawler motor Rvs rotation current threshold
+ uint16_t sv_LBCM_ith_F; // 2 LB Crawler motor Fwd rotation current threshold
+ uint16_t sv_LBCM_ith_R; // 2 LB Crawler motor Rvs rotation current threshold
+ uint8_t sv_RFCM_srto_F; // 1 RF Crawler motor Fwd rotation speed limnit
+ uint8_t sv_RFCM_srto_R; // 1 RF Crawler motor Rvs rotation speed limnit
+ uint8_t sv_LBCM_srto_F; // 1 LB Crawler motor Fwd rotation speed limnit
+ uint8_t sv_LBCM_srto_R; // 1 LB Crawler motor Rvs rotation speed limnit
+ uint8_t sv_RFCM_dzu; // 1 R-Joystick upper dead zone width
+ uint8_t sv_RFCM_dzc; // 1 R-Joystick center value
+ uint8_t sv_RFCM_dzl; // 1 R-Joystick lower dead zone width
+ uint8_t sv_LBCM_dzu; // 1 L-Joystick upper dead zone width
+ uint8_t sv_LBCM_dzc; // 1 L-Joystick center value
+ uint8_t sv_LBCM_dzl; // 1 L-Joystick lower dead zone width
+ uint8_t reserved1; // 1
+ uint8_t reserved2; // 1
+} crawler_SetValue_t; // 20 byte
+
+typedef struct {
+ uint8_t sv_centerValue;
+ uint8_t sv_nsenseBand_s;
+ uint8_t sv_nsenseBand_w;
+} js_SetValue_t;
+
+typedef struct SetValue {
+// operation_t operation;
+ winch_SetValue_t winchCtrl;
+ tfm_SetValue_t tfmCtrl;
+ crawler_SetValue_t crawlerCtrl;
+// js_SetValue_t jsCtrl;
+} setValue_t;
+
+
+
+
+#define SLOWDOWN_DISTANCE 23 // <--10 2016.06.01
+#define SLOWDOWN_NEAR_DISTANCE 3
+/*
+typedef struct {
+ int16_t dt_WinchCntPosition; // Current winch posittion
+ int16_t dt_WinchRtvValue; // Winch Moving distance
+ int16_t dt_WinchDstPosition; // Destination Position
+ char operation;
+ int8_t dt_WinchMotorCurrent; // Winch motor current
+} winchData_t;
+*/
+
+typedef struct {
+ int16_t dt_WinchCntPosition; // Current winch posittion
+ int16_t dt_WinchRtvValue; // Winch Moving distance
+ int16_t dt_WinchDstPosition; // Destination Position
+ uint8_t operation;
+ uint8_t dt_WinchMotor1Current; // Winch motor 1 current
+ uint8_t dt_WinchMotor2Current; // Winch motor 2 current
+ uint8_t res;
+} winchData_t;
+
+
+#define ROTATE_PER_RESOLUTION 24
+
+#define __READ_CURRENT_AT_CIF_TASK__
+
+//mv_WinchMvData
diff -r 23b1fba109b0 -r a4cc7dc2d92f main.cpp
--- 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