右側のほうのセンサLPC1114FN28 fumiya版

Dependencies:   IRM2121_2 Ping mbed HMC6352 Watchdog

Fork of CatPot_SensorRight by CatPot 2015-2016

Revision:
5:a41471351ae3
Parent:
4:bac44e117fce
Child:
6:f64989ad4746
--- a/main.cpp	Mon Feb 23 09:39:33 2015 +0000
+++ b/main.cpp	Tue Feb 24 05:36:15 2015 +0000
@@ -7,6 +7,7 @@
 
 #include "mbed.h"
 
+
 #define SYSAHBCLKDIV_Val      0x00000001        // Reset: 0x001
 #define CLOCK_SETUP           1                  // デフォルト=1
 #define SYSPLLCTRL_Val        0x00000023        // デフォルト=23 Reset: 0x000
@@ -15,6 +16,7 @@
 
 #include "IRM2121.h"
 #include "Ping.h"
+#include "WatchDogTimer.h"
 
 #define PING_COUNT 5 //5回に1回にPing処理
 #define IR_LEVEL 400 //irのしきい値
@@ -29,7 +31,7 @@
 
 I2CSlave Mbed(dp5,dp27);//sda,scl
 Serial pc(USBTX,USBRX);
-
+ 
 /*irm2121平均化*/
 uint8_t IrMoving_ave(uint8_t num, int data){
     static unsigned int sum[10];
@@ -89,10 +91,10 @@
     
 }
 /*周回の初期動作*/
-void ResetSet(uint8_t *PingCk){
+void ResetSet(uint8_t *PingCk, uint8_t *IrCk){
 
     Led = 1;//周回の初め    
-    PingCk ++;
+    //PingCk ++;
 
 }
 
@@ -103,16 +105,18 @@
     /*begin SetUp*/
     //default Mbed.frequency();
     Mbed.address(I2C_ADDRESS);
-    
+    Watchdog g;
+    g.kick(1.0f);//1秒でWDT発生
     /*end   Setup*/
     
     
     /*Count*/
     uint8_t PingCk = 0;
+    uint8_t IrCk = 0;
     
     /*Data*/
     uint8_t PingData[2] = {0};
-    int     IrTemp[6]   = {0};  //仮置き場
+    unsigned long      IrTemp[6]   = {0};  //仮置き場
     uint8_t IrData[3];          // irのデータ
     
     /*State(operate_value etc...)*/
@@ -120,32 +124,47 @@
     
     /* I2Cdata*/
     char SendData[9]={0};
-    char AddressData = 0;
+    char AddressData[1] = {0};
     
     /*Debug valiable*/
     bool valid = 0,busy = 0;
 
     while(1) {
         
-        ResetSet(&PingCk);
+        ResetSet(&PingCk,&IrCk);
         
+        Ir[IrCk].Set();
+        wait_ms(20);
+        IrTemp[IrCk] = Ir[IrCk].Read();
+        
+        /*
         Ir[0].Set();
         Ir[1].Set();
         Ir[2].Set();
+        
         Ir[3].Set();
         Ir[4].Set();
         Ir[5].Set();
-        
-        wait_ms(80);//wait値は最適値を探す必要がある.
+        */
+        //wait_ms(60);//wait値は最適値を探す必要がある.
         /*8bit*/
-        
-        IrTemp[0] = (IR_LEVEL - Ir[0].Read())*255/400;
-        IrTemp[1] = (IR_LEVEL - Ir[1].Read())*255/400;
-        IrTemp[2] = (IR_LEVEL - Ir[2].Read())*255/400;
+        /*
+        IrData[0] = (IR_LEVEL - Ir[0].Read())*255/400;
+        IrData[1] = (IR_LEVEL - Ir[1].Read())*255/400;
+        IrData[2] = (IR_LEVEL - Ir[2].Read())*255/400;
         IrTemp[3] = (IR_LEVEL - Ir[3].Read())*255/400;
         IrTemp[4] = (IR_LEVEL - Ir[4].Read())*255/400;
         IrTemp[5] = (IR_LEVEL - Ir[5].Read())*255/400;
+        */
+        /*
+        IrTemp[0] = Ir[0].Read();
+        IrTemp[1] = Ir[1].Read();
+        IrTemp[2] = Ir[2].Read();
         
+        IrTemp[3] = Ir[3].Read();
+        IrTemp[4] = Ir[4].Read();
+        IrTemp[5] = Ir[5].Read();
+        */
         /*
         Ir[0].ReturnVB(&valid,&busy);
         pc.printf("valid %d, busy %d \n\r",valid, busy);
@@ -161,7 +180,7 @@
         */
         
 
-        IrDataSelect(IrTemp,IrData);
+        //IrDataSelect(IrTemp,IrData);
         
         /*
         if(PingCk >= PING_COUNT){
@@ -173,24 +192,47 @@
             PingCk = 0;
         }
         */
-
         I2CState = Mbed.receive();
+        
         switch(I2CState){    
             case I2CSlave::ReadAddressed:
+            
+                 if(AddressData[0]){
+                    switch(AddressData[0]){
+                        case 0x01://ping
+                                SendData[0] = (char)PingData[0];
+                                SendData[1] = (char)PingData[1];
+                                Mbed.write(SendData, 2);
+                                break;
+                        case 0x02://IR
+                                SendData[0] = (char)IrData[0];
+                                SendData[1] = (char)IrData[1];
+                                SendData[2] = (char)IrData[2];
+                                Mbed.write(SendData, 3);
+                                break;                   
+                            
+
+                        default:
+                                break;
+                    }
+                 }
                  
-                
-                 Mbed.write(SendData, 9);
+                 AddressData[0] = 0;
                  break;
             case I2CSlave::WriteGeneral:
-                 Mbed.read(SendData, 9);
+                 Mbed.read(AddressData,1);
                  break;
             case I2CSlave::WriteAddressed:
                  break;
         
         }
-
         Led = 0;
-    
-        //wait(0.5);
+        pc.printf("%d \t %d \n",IrTemp[0],IrTemp[1]);
+        IrCk ++;
+        if(IrCk > 5){
+            IrCk = 0;
+            
+        }    
+        //wait(0.1);
     }
 }