ichinoseki_Bteam_2019 / Mycan

Dependents:   2019_SwitchNode_AR ArmNode 2919_LineSensor 2019_MD ... more

Committer:
TanakaTarou
Date:
Sat Sep 21 11:59:57 2019 +0000
Revision:
12:5669dfdbe539
Parent:
7:cac42b73a4f6
CAN Library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kirua 0:ce8efac4c651 1 #include "Mycan.h"
Kirua 0:ce8efac4c651 2
Kirua 4:7aa2809ad177 3
Kirua 4:7aa2809ad177 4 /*----------------------------------------------------*/
Kirua 4:7aa2809ad177 5
Kirua 4:7aa2809ad177 6 //"id"は小さくしたほうがメモリ効率がいいですね
Kirua 4:7aa2809ad177 7 //あと、整数で使うときは"num"は1~7、小数は0か1で御願いします
Kirua 4:7aa2809ad177 8
Kirua 4:7aa2809ad177 9 /*----------------------------------------------------*/
Kirua 4:7aa2809ad177 10
Kirua 4:7aa2809ad177 11 Mycan::Mycan(PinName _rd, PinName _td, float freq) : can(_rd, _td)
Kirua 0:ce8efac4c651 12 {
Kirua 4:7aa2809ad177 13 can.frequency(freq);
Kirua 0:ce8efac4c651 14 };
Kirua 0:ce8efac4c651 15
Kirua 4:7aa2809ad177 16 void Mycan::setI(uint32_t _id, int _num, int16_t _data)
Kirua 0:ce8efac4c651 17 {
Kirua 4:7aa2809ad177 18 write_type = 0;
Kirua 0:ce8efac4c651 19 td_id = _id;
Kirua 0:ce8efac4c651 20 td_num = _num;
Kirua 6:9bf1c678d5a4 21 td_data.value[td_num] = _data;
Kirua 4:7aa2809ad177 22
Kirua 6:9bf1c678d5a4 23 for (int i = 0; i < 7; i++)
Kirua 4:7aa2809ad177 24 {
Kirua 6:9bf1c678d5a4 25 if (td_data.value[i] >= 0)
Kirua 6:9bf1c678d5a4 26 td_integer.value[7] &= ~(1 << i);
Kirua 4:7aa2809ad177 27 else
Kirua 6:9bf1c678d5a4 28 td_integer.value[7] |= (1 << i);
Kirua 6:9bf1c678d5a4 29 td_integer.value[i] = abs(td_data.value[i]);
Kirua 4:7aa2809ad177 30 }
Kirua 4:7aa2809ad177 31 }
Kirua 4:7aa2809ad177 32
Kirua 4:7aa2809ad177 33 void Mycan::setF(uint32_t _id, int _num, float _data)
Kirua 4:7aa2809ad177 34 {
Kirua 4:7aa2809ad177 35 write_type = 1;
Kirua 4:7aa2809ad177 36 td_id = _id;
Kirua 4:7aa2809ad177 37 td_num = _num;
Kirua 4:7aa2809ad177 38 td_decimal.value[td_num] = _data;
Kirua 0:ce8efac4c651 39 }
Kirua 0:ce8efac4c651 40
TanakaTarou 3:055c2d38132f 41 bool Mycan::send()
Kirua 0:ce8efac4c651 42 {
TanakaTarou 12:5669dfdbe539 43 bool return_val;
TanakaTarou 12:5669dfdbe539 44 if(!write_type)
TanakaTarou 12:5669dfdbe539 45 return_val = can.write(CANMessage(td_id, (char*)&td_integer, 8));
TanakaTarou 12:5669dfdbe539 46 else if(write_type)
TanakaTarou 12:5669dfdbe539 47 return_val = can.write(CANMessage(td_id, (char*)&td_decimal, 8));
TanakaTarou 12:5669dfdbe539 48
TanakaTarou 12:5669dfdbe539 49 return return_val;
Kirua 0:ce8efac4c651 50 }
Kirua 0:ce8efac4c651 51
Kirua 4:7aa2809ad177 52 void Mycan::readI()
Kirua 0:ce8efac4c651 53 {
Kirua 4:7aa2809ad177 54 read_type = 0;
Kirua 0:ce8efac4c651 55 CANMessage received;
Kirua 0:ce8efac4c651 56 can.read(received);
Kirua 4:7aa2809ad177 57 rd_integer = *(can_integer*)received.data;
Kirua 4:7aa2809ad177 58
Kirua 7:cac42b73a4f6 59 for (int i = 0; i < 7; i++) {
Kirua 7:cac42b73a4f6 60 if (rd_integer.value[7] & (1 << i))
Kirua 7:cac42b73a4f6 61 integer_storage.value[i] = rd_integer.value[i] * -1;
Kirua 7:cac42b73a4f6 62 else integer_storage.value[i] = rd_integer.value[i];
Kirua 7:cac42b73a4f6 63 }
Kirua 6:9bf1c678d5a4 64 integer_values_storage[received.id] = integer_storage;
Kirua 0:ce8efac4c651 65 }
Kirua 0:ce8efac4c651 66
Kirua 4:7aa2809ad177 67 void Mycan::readF()
Kirua 4:7aa2809ad177 68 {
Kirua 4:7aa2809ad177 69 read_type = 1;
Kirua 4:7aa2809ad177 70 CANMessage received;
Kirua 4:7aa2809ad177 71 can.read(received);
Kirua 4:7aa2809ad177 72 rd_decimal = *(can_decimal *)received.data;
Kirua 4:7aa2809ad177 73
Kirua 4:7aa2809ad177 74 decimal_values_storage[received.id].value[0] = rd_decimal.value[0];
Kirua 4:7aa2809ad177 75 decimal_values_storage[received.id].value[1] = rd_decimal.value[1];
Kirua 4:7aa2809ad177 76 }
Kirua 4:7aa2809ad177 77
Kirua 4:7aa2809ad177 78 float Mycan::get(uint32_t _id, int _num)
Kirua 0:ce8efac4c651 79 {
TanakaTarou 12:5669dfdbe539 80 float return_val;
Kirua 0:ce8efac4c651 81 rd_id = _id;
Kirua 0:ce8efac4c651 82 rd_num = _num;
TanakaTarou 12:5669dfdbe539 83 if(!read_type)
TanakaTarou 12:5669dfdbe539 84 return_val = integer_values_storage[rd_id].value[rd_num];
TanakaTarou 12:5669dfdbe539 85 else if(read_type)
TanakaTarou 12:5669dfdbe539 86 return_val = decimal_values_storage[rd_id].value[rd_num];
TanakaTarou 12:5669dfdbe539 87
TanakaTarou 12:5669dfdbe539 88 return return_val;
TanakaTarou 12:5669dfdbe539 89 }