ichinoseki_Bteam_2019 / Mycan

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

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