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
Mycan.cpp
00001 #include "Mycan.h" 00002 00003 00004 /*----------------------------------------------------*/ 00005 00006 //"id"は小さくしたほうがメモリ効率がいいですね 00007 //あと、整数で使うときは"num"は1~7、小数は0か1で御願いします 00008 00009 /*----------------------------------------------------*/ 00010 00011 Mycan::Mycan(PinName _rd, PinName _td, float freq) : can(_rd, _td) 00012 { 00013 can.frequency(freq); 00014 }; 00015 00016 void Mycan::setI(uint32_t _id, int _num, int16_t _data) 00017 { 00018 write_type = 0; 00019 td_id = _id; 00020 td_num = _num; 00021 td_data.value[td_num] = _data; 00022 00023 for (int i = 0; i < 7; i++) 00024 { 00025 if (td_data.value[i] >= 0) 00026 td_integer.value[7] &= ~(1 << i); 00027 else 00028 td_integer.value[7] |= (1 << i); 00029 td_integer.value[i] = abs(td_data.value[i]); 00030 } 00031 } 00032 00033 void Mycan::setF(uint32_t _id, int _num, float _data) 00034 { 00035 write_type = 1; 00036 td_id = _id; 00037 td_num = _num; 00038 td_decimal.value[td_num] = _data; 00039 } 00040 00041 bool Mycan::send() 00042 { 00043 bool return_val; 00044 if(!write_type) 00045 return_val = can.write(CANMessage(td_id, (char*)&td_integer, 8)); 00046 else if(write_type) 00047 return_val = can.write(CANMessage(td_id, (char*)&td_decimal, 8)); 00048 00049 return return_val; 00050 } 00051 00052 void Mycan::readI() 00053 { 00054 read_type = 0; 00055 CANMessage received; 00056 can.read(received); 00057 rd_integer = *(can_integer*)received.data; 00058 00059 for (int i = 0; i < 7; i++) { 00060 if (rd_integer.value[7] & (1 << i)) 00061 integer_storage.value[i] = rd_integer.value[i] * -1; 00062 else integer_storage.value[i] = rd_integer.value[i]; 00063 } 00064 integer_values_storage[received.id] = integer_storage; 00065 } 00066 00067 void Mycan::readF() 00068 { 00069 read_type = 1; 00070 CANMessage received; 00071 can.read(received); 00072 rd_decimal = *(can_decimal *)received.data; 00073 00074 decimal_values_storage[received.id].value[0] = rd_decimal.value[0]; 00075 decimal_values_storage[received.id].value[1] = rd_decimal.value[1]; 00076 } 00077 00078 float Mycan::get(uint32_t _id, int _num) 00079 { 00080 float return_val; 00081 rd_id = _id; 00082 rd_num = _num; 00083 if(!read_type) 00084 return_val = integer_values_storage[rd_id].value[rd_num]; 00085 else if(read_type) 00086 return_val = decimal_values_storage[rd_id].value[rd_num]; 00087 00088 return return_val; 00089 }
Generated on Wed Jul 13 2022 21:19:53 by
1.7.2