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:
- 4:7aa2809ad177
- Parent:
- 3:055c2d38132f
- Child:
- 5:4bdeff035517
--- a/Mycan.cpp Mon Aug 06 05:40:22 2018 +0000 +++ b/Mycan.cpp Fri Aug 30 03:08:08 2019 +0000 @@ -1,77 +1,82 @@ -#include "mbed.h" #include "Mycan.h" -Mycan::Mycan(PinName _pin_rd, PinName _pin_td) : can(_pin_rd, _pin_td) + +/*----------------------------------------------------*/ + +//"id"は小さくしたほうがメモリ効率がいいですね +//あと、整数で使うときは"num"は1~7、小数は0か1で御願いします + +/*----------------------------------------------------*/ + +Mycan::Mycan(PinName _rd, PinName _td, float freq) : can(_rd, _td) { - min_id = 1;//ここで最小IDを設定 + can.frequency(freq); }; -void Mycan::set(unsigned int _id, int _num, short int _data) +void Mycan::setI(uint32_t _id, int _num, int16_t _data) { + write_type = 0; td_id = _id; td_num = _num; - data = _data; - write_val[td_num] = data; - _expressAbsoluteValue();//絶対値にする関数 + td_integer.value[td_num] = _data; + + td_integer.value[0] = 0; + for (int i = 1; i < 8; i++) + { + if (td_integer.value[i] >= 0) + td_integer.value[0] &= ~(1 << i); + else + td_integer.value[0] |= (1 << i); + td_integer.value[i] = abs(td_integer.value[i]); + } +} + +void Mycan::setF(uint32_t _id, int _num, float _data) +{ + write_type = 1; + td_id = _id; + td_num = _num; + td_decimal.value[td_num] = _data; } bool Mycan::send() { - return can.write(CANMessage(td_id, (char*)&td_data, 8)); + if (!write_type) return can.write(CANMessage(td_id, (char*)&td_integer, 8)); + else if (write_type) return can.write(CANMessage(td_id, (char*)&td_decimal, 8)); } -void Mycan::read() +void Mycan::readI() { + read_type = 0; CANMessage received; can.read(received); - rd_data = *(read_can *)received.data; - _expressSignVal(received.id);//符号を付与する関数 + rd_integer = *(can_integer*)received.data; + + for (int i = 1; i < 8; i++) + rd_storage.value[i] = rd_integer.value[i]; + integer_values_storage[received.id] = rd_storage; + for (int i = 1; i < 8; i++) { + if (integer_values_storage[received.id].value[0] & (1 << i)) + integer_values_storage[received.id].value[i] *= -1; + } } -float Mycan::get(unsigned int _id, int _num) +void Mycan::readF() +{ + read_type = 1; + CANMessage received; + can.read(received); + rd_decimal = *(can_decimal *)received.data; + + decimal_values_storage[received.id].value[0] = rd_decimal.value[0]; + decimal_values_storage[received.id].value[1] = rd_decimal.value[1]; +} + +float Mycan::get(uint32_t _id, int _num) { rd_id = _id; rd_num = _num; - return read_val[rd_id - min_id][rd_num]; + if (!read_type) return integer_values_storage[rd_id].value[rd_num]; + else if (read_type) return decimal_values_storage[rd_id].value[rd_num]; } -void Mycan::_expressAbsoluteValue() -{ - write_val[0] = 0; - 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::_expressSignVal(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