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.
Dependents: 2019_SwitchNode_AR ArmNode 2919_LineSensor 2019_MD ... more
Diff: Mycan.cpp
- Revision:
- 0:ce8efac4c651
- Child:
- 1:e632e292a8c2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Mycan.cpp Tue Jul 03 08:54:47 2018 +0000 @@ -0,0 +1,76 @@ +#include "mbed.h" +#include "Mycan.h" + +Mycan::Mycan(PinName _pin_rd, PinName _pin_td) : can(_pin_rd, _pin_td) +{ + min_id = 1;//ここで最小IDを設定 +}; + +void Mycan::set(unsigned int _id, int _num, short int _data) +{ + td_id = _id; + td_num = _num; + data = _data; + write_val[td_num] = data; + express_absoluteValue();//絶対値にする関数 +} + +void Mycan::send() +{ + can.write(CANMessage(td_id, (char*)&td_data, 8)); +} + +void Mycan::read() +{ + CANMessage received; + can.read(received); + rd_data = *(read_can *)received.data; + express_signVal(received.id);//符号を付与する関数 +} + +float Mycan::get(unsigned int _id, int _num) +{ + rd_id = _id; + rd_num = _num; + return read_val[rd_id - min_id][rd_num]; +} + +void Mycan::express_absoluteValue() +{ + for (int i = 1; i < 8; i++) + { + if (write_val[i] > 0) + write_val[0] &= ~(1 << i); + else + write_val[0] |= (1 << i); + } + td_data.writeVal_0 = write_val[0]; + td_data.writeVal_1 = abs(write_val[1]); + td_data.writeVal_2 = abs(write_val[2]); + td_data.writeVal_3 = abs(write_val[3]); + td_data.writeVal_4 = abs(write_val[4]); + td_data.writeVal_5 = abs(write_val[5]); + td_data.writeVal_6 = abs(write_val[6]); + td_data.writeVal_7 = abs(write_val[7]); +} + +void Mycan::express_signVal(unsigned int id) +{ + read_val[id - min_id][0] = rd_data.readVal_0; + read_val[id - min_id][1] = rd_data.readVal_1; + read_val[id - min_id][2] = rd_data.readVal_2; + read_val[id - min_id][3] = rd_data.readVal_3; + read_val[id - min_id][4] = rd_data.readVal_4; + read_val[id - min_id][5] = rd_data.readVal_5; + read_val[id - min_id][6] = rd_data.readVal_6; + read_val[id - min_id][7] = rd_data.readVal_7; + + for (int j = 1; j < 8; j++) + { + if (read_val[id - min_id][0] & (1 << j)) + read_val[id - min_id][j] *= -1; + } +} + +short Mycan::read_val[10][8]; +short Mycan::write_val[8]; \ No newline at end of file