encslave

Dependencies:   mbed

Revision:
2:2ee241819861
Parent:
1:7945cd701d0d
--- a/main.cpp	Sat Dec 07 00:42:48 2019 +0000
+++ b/main.cpp	Wed Sep 01 07:01:56 2021 +0000
@@ -1,122 +1,45 @@
 #include "mbed.h"
-
-#define SDA PB_7
-#define SCL PB_6
+#include "can.h"
 
+/* PCへのプリント用 */
+Serial              pc(USBTX, USBRX);
 
-/*クラス宣言*/
-I2CSlave slave(SDA, SCL);
-Serial   pc(USBTX, USBRX);
-
+/* CAN宣言 */
+YKNCT_MD_CAN MD(PA_11,PA_12,500000);//(rd , td, 周波数, 送信割り込み速度)
 
-/*In,Out宣言*/
-DigitalOut CS  (PA_1);
-DigitalOut CLK (PA_2);
-DigitalIn  Do  (PB_5);
-DigitalOut led[4]={PA_4,PA_5,PA_6,PA_7};
-DigitalOut k   (PB_3);
-/*変数宣言*/
-unsigned long data = 0; 
-char  msg[5]={0};
-int enc_deg[2];   //角度を保存する変数
-int cnt = 0;   //割り込んだ回数を保存する
-long deg = 0;   //DOの値を保存
-int64_t sent_data=0;
+/* ----------------メイン----------------------- */
+int main(void)
+{
+    /* プリントのボーレート設定 */
+    pc.baud(115200);
 
+    /* MD初期化 */
+    MD.Init(0,MD_SMB);
+    MD.Init(1,MD_LAP);
+    MD.Init(2,MD_SMB);
+    MD.Init(3,MD_LAP);
+    MD.Init(4,MD_SMB);
+    MD.Init(5,MD_LAP);
+    MD.Init(6,MD_SMB);
+    MD.Init(7,MD_LAP);
 
 
-int main()
-{
-    msg[0]=0;
-    msg[1]=0;
-    slave.frequency(100000);
-    int receive;
-    slave.address(1);
     while(1) {
-          
-          receive = slave.receive();
-           //cntが偶数の場合の処理
-  if (cnt % 2 == 0) {
-    if (cnt == 0) {
-      CS=0;
-      data = 0;
-    }
-      CLK=1;
-  }
-
-  //cntが奇数の場合の処理
-  else {
-    if (cnt != 1) data |= Do;   //cntが1ではない時の処理
-    //cntが25ではない時の処理
-    if (cnt != 25) {
-      data <<= 1;
-      CLK=0;
-    }
-    //cntが25の時の処理
-    else {
-      /* 前回の値更新
-        今回の値更新(エンコーダの値(0?4096)を角度(0?360)に) */
-      enc_deg[1] = enc_deg[0];
-      enc_deg[0] = data * 360 / 4096;
-
-      /* 前回270度以上,今回90度より小さい… 359→0を跨いだ時
-        前回の値を0から逆回転で負の値で表記 */
-      if ((270 <= enc_deg[1] ) && (enc_deg[0] < 90)) enc_deg[1] -= 360;
-
-      /* 0→359を跨いだ時,
-        前回の値を360以上の値で表記 */
-      else if ((enc_deg[1] < 90) && (270 <= enc_deg[0])) enc_deg[1] += 360;
-
-     deg += enc_deg[0] - enc_deg[1];
-      
-      sent_data=deg;
-     CS=1;
-      
+        /* MD実行 */
+        MD.Set(0,100);
+        MD.Set(1,100);
+        MD.Set(2,100);
+        MD.Set(3,0);
+        MD.Set(4,0);
+        MD.Set(5,50);
+        MD.Set(6,0);
+        MD.Set(7,50);
 
-      if(receive){
-      
-        msg[0]=sent_data;
-        msg[1]=sent_data>>8;
-       msg[2]=sent_data>>16;
-       msg[3]=sent_data>>24;
-      slave.write(msg,4);
-         }
-   
-      /* LEDの管理 */
-    static int LED_cnt=0;
-    static int LED_flag=0;
-    static long log[2]={0};
-    
-    /* logデータの更新 */
-    log[1]=log[0];
-    log[0]=sent_data<<24|sent_data<<16|sent_data<<8|sent_data;
-    /* 変化の正負に応じてLED点灯 */
-    if((log[0]-log[1])>1)led[0]=1;
-    else led[0]=0;
-    if(((log[0]-log[1])<0?-1:1)*(log[0]-log[1])<=1) led[1]=1;
-   else led[1]=0;
-    if((log[1]-log[0])>1) led[2]=1;
-    else led[2]=0;
-    
-    LED_cnt++;
-    LED_cnt%=10;
-   if(LED_cnt==0) LED_flag++;
-    LED_flag%=2;
-    if(LED_flag) led[3]=1;
-  else led[3]=0;
-   
-  }
-       
-  }
-  cnt++;
-  cnt %= 26;
-  
+        /* エンコーダ取得 */
+        for(int i=0; i<8; i++)
+            pc.printf("%d  ",MD.Get_enc(i));
+        pc.printf("\n\r");
 
-  
-   
+    }
+}
 
-    
-    
-    }
-
-}
\ No newline at end of file