Sera / Mbed 2 deprecated oka_slave_speed

Dependencies:   mbed

Committer:
serararai
Date:
Fri Mar 05 08:41:04 2021 +0000
Revision:
0:b5130bf155f1
test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
serararai 0:b5130bf155f1 1 // Nucleo_CAN_slave (AIRo-4.1)
serararai 0:b5130bf155f1 2 // Speed control
serararai 0:b5130bf155f1 3 // Created by Atsushi Kakogawa, 2019.09.19
serararai 0:b5130bf155f1 4 // Edited by Yoshimichi Oka, 2020.2.5
serararai 0:b5130bf155f1 5 // Modified by Atsushi Kakogawa, 2020.03.28
serararai 0:b5130bf155f1 6 // Modified by Atsushi Kakogawa, 2020.08.28
serararai 0:b5130bf155f1 7 // Department of Robotics, Ritsumeikan University, Japan
serararai 0:b5130bf155f1 8 #include "mbed.h"
serararai 0:b5130bf155f1 9 #include "CAN.h"
serararai 0:b5130bf155f1 10
serararai 0:b5130bf155f1 11 DigitalOut myled(PF_1); // LED for communication check
serararai 0:b5130bf155f1 12 DigitalOut mdir1(PA_9); // D1 Motor ON/OFF (HIGH = ON, Changeable on ESCON Studio)
serararai 0:b5130bf155f1 13 DigitalOut mdir2(PA_10); // D0 Rotational direction (Direction is changeable on ESCON Studio)
serararai 0:b5130bf155f1 14 AnalogOut DA_vlc(PA_6); // A5 for velocity analog input to ESCON ANI1+ (0 to 1.0)
serararai 0:b5130bf155f1 15 AnalogOut DA_crt(PA_5); // A3 for current anaglog input to ESCON ANI2+ (0 to 1.0)
serararai 0:b5130bf155f1 16 AnalogIn potensio1(PA_0); // A0 Potentiometer 1 (3.3V potentiometer)
serararai 0:b5130bf155f1 17 //AnalogIn potensio2(PA_0); // A0 Potentiometer 2 (5V potentiometer)
serararai 0:b5130bf155f1 18 AnalogIn AD_crt(PA_1); // Analog Signal from ESCON ANO1 (motor current, can be changed by ESCON) (0 to 1.0)
serararai 0:b5130bf155f1 19 AnalogIn AD_vlc(PA_3); // Analog Signal from ESCON ANO2 (motor velocity, can be changed by ESCON) (0 to 1.0)
serararai 0:b5130bf155f1 20
serararai 0:b5130bf155f1 21 float duty = 0;
serararai 0:b5130bf155f1 22 int id = 2;
serararai 0:b5130bf155f1 23 int flag =
serararai 0:b5130bf155f1 24 0;
serararai 0:b5130bf155f1 25
serararai 0:b5130bf155f1 26 char tx_data[8];
serararai 0:b5130bf155f1 27 char tx_data1_U, tx_data1_L, tx_data2_U, tx_data2_L, tx_data3_U, tx_data3_L;
serararai 0:b5130bf155f1 28
serararai 0:b5130bf155f1 29 int main(){
serararai 0:b5130bf155f1 30
serararai 0:b5130bf155f1 31 CAN can(PA_11, PA_12);
serararai 0:b5130bf155f1 32 can.frequency(50000);
serararai 0:b5130bf155f1 33 CANMessage msg;
serararai 0:b5130bf155f1 34
serararai 0:b5130bf155f1 35 while(1) {
serararai 0:b5130bf155f1 36 if(can.read(msg)) {
serararai 0:b5130bf155f1 37 if (msg.data[0] == id) { // ID indentify
serararai 0:b5130bf155f1 38 if (msg.data[1] == 0) { // mode indentify (0: control)
serararai 0:b5130bf155f1 39 duty = float((msg.data[3] << 8) + msg.data[4])/999;
serararai 0:b5130bf155f1 40 if (msg.data[2] == 0) { // dir identify (0: positive)
serararai 0:b5130bf155f1 41 DA_vlc = duty;
serararai 0:b5130bf155f1 42 DA_crt = 0; // Current limit 0%
serararai 0:b5130bf155f1 43 mdir1 = 1;
serararai 0:b5130bf155f1 44 mdir2 = 0;
serararai 0:b5130bf155f1 45 } else if (msg.data[2] == 1) { // dir identify (1: negative)
serararai 0:b5130bf155f1 46 DA_vlc = duty;
serararai 0:b5130bf155f1 47 DA_crt = 0; // Current limit 0%
serararai 0:b5130bf155f1 48 mdir1 = 1;
serararai 0:b5130bf155f1 49 mdir2 = 1;
serararai 0:b5130bf155f1 50 }
serararai 0:b5130bf155f1 51 } else if (msg.data[1] == 1) { // mode indentify (1: response)
serararai 0:b5130bf155f1 52 int i_data1 = AD_crt.read()*1000;
serararai 0:b5130bf155f1 53 tx_data1_U = (i_data1 >> 8);
serararai 0:b5130bf155f1 54 tx_data1_L = i_data1;
serararai 0:b5130bf155f1 55 int i_data2 = AD_vlc.read()*1000;
serararai 0:b5130bf155f1 56 tx_data2_U = (i_data2 >> 8);
serararai 0:b5130bf155f1 57 tx_data2_L = i_data2;
serararai 0:b5130bf155f1 58 int i_data3 = 0;
serararai 0:b5130bf155f1 59 tx_data3_U = (i_data3 >> 8);
serararai 0:b5130bf155f1 60 tx_data3_L = i_data3;
serararai 0:b5130bf155f1 61 tx_data[0] = id; // ID
serararai 0:b5130bf155f1 62 tx_data[1] = 1; // mode (1: response)
serararai 0:b5130bf155f1 63 tx_data[2] = tx_data1_U; // response value1 upper 8bit
serararai 0:b5130bf155f1 64 tx_data[3] = tx_data1_L; // response value1 lower 8bit
serararai 0:b5130bf155f1 65 tx_data[4] = tx_data2_U; // response value2 upper 8bit
serararai 0:b5130bf155f1 66 tx_data[5] = tx_data2_L; // response value2 lower 8bit
serararai 0:b5130bf155f1 67 tx_data[6] = tx_data3_U; // response value3 upper 8bit
serararai 0:b5130bf155f1 68 tx_data[7] = tx_data3_L; // response value3 lower 8bit
serararai 0:b5130bf155f1 69 can.write(CANMessage(1300 + id, tx_data, 8));
serararai 0:b5130bf155f1 70 }
serararai 0:b5130bf155f1 71 }
serararai 0:b5130bf155f1 72 myled = 1; // LED is ON
serararai 0:b5130bf155f1 73 wait (0.01);
serararai 0:b5130bf155f1 74 } else {
serararai 0:b5130bf155f1 75 myled = 0; // LED is OFF
serararai 0:b5130bf155f1 76 }
serararai 0:b5130bf155f1 77 }
serararai 0:b5130bf155f1 78 }