センサ側

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
maxonK
Date:
Sat May 09 14:51:15 2015 +0000
Commit message:
????

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r d8edf98c4892 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sat May 09 14:51:15 2015 +0000
@@ -0,0 +1,145 @@
+#include "mbed.h"
+
+DigitalOut myled(LED1);
+Serial uP(dp16, dp15);
+AnalogIn ainCH1(dp4);
+AnalogIn ainCH2(dp9);
+
+//cramp関数arduinoのconstrain相当プロトタイプ宣言
+int cramp(int , int , int);
+//ADCサンプリング関数のプロトタイプ宣言
+int adcSampling(int,int);
+//バブルソート関数宣言
+void bubbleSort(int *, int);
+//ADCサンプリング数
+const int numData = 5;
+//抜重センサ出力値(オフセット補正用)
+const int offsetValCH1 = 511;//(誤差なければ511)
+const int offsetValCH2 = 510;//(誤差なければ511)
+
+int main() {
+    //setup
+    //uP.baud(460800);//マイコン間通信時はコメント復帰
+    uP.baud(9600);//USBテスト時はコメント復帰(linuxは高速通信できない)
+    myled = 1;
+    int val = 0;
+    //mainloop
+    while(1) {
+        //ADC値取得(抜重センサ出力値)
+        val = adcSampling(offsetValCH1,offsetValCH2);
+
+        //シリアルバッファが読み込み可能になるまでwhileまわす可能ならifはいる
+        if(uP.readable()>0){
+            //もし自分宛てだったら返信する
+            if(uP.getc() == 'C'){
+                val = cramp(val , 0 , 1023);//0~1023に制限
+                uP.printf("*%04d#",val);//返信 (*0#~*1023#)
+                }
+                
+            }
+    }
+}
+
+//ADCサンプリング平均値関数
+//グローバルでnumDataが宣言してある必要あり(静的配列の宣言にnumData使うから)
+int adcSampling(int offsetValCH1,int offsetValCH2){
+    static int sampleArrayCH1 [numData] = {0};//時系列の生データ
+    static int sampleArrayCH2 [numData] = {0};//時系列の生データ
+    int sortArrayCH1 [numData] = {0};//ソート済みデータ
+    int sortArrayCH2 [numData] = {0};//ソート済みデータ
+    int centerVal = 511; //理想抜重時出力値
+    
+     //時系列配列を前から、一つ後ろのに書き換えて送る
+        //CH1
+        for(int i = 0;i <= numData - 1;i++){
+            //もし最後最後尾を変更する回ならADC値入れる
+            if(i == numData -1){
+                sampleArrayCH1[i] = cramp (((ainCH1.read_u16()>>6)+(centerVal - offsetValCH1)),0,1023);//右へ6ビットシフト(16bitから10bitへ)
+                break ;
+                }
+            //配列要素を前に一つ送る
+            sampleArrayCH1[i] = sampleArrayCH1[i + 1];
+            }
+        //CH2
+        for(int i = 0;i <= numData - 1;i++){
+            //もし最後最後尾を変更する回ならADC値入れる
+            if(i == numData -1){
+                sampleArrayCH2[i] = cramp (((ainCH2.read_u16()>>6)+(centerVal - offsetValCH2)),0,1023);//右へ6ビットシフト(16bitから10bitへ)
+                break ;
+                }
+            //配列要素を前に一つ送る
+            sampleArrayCH2[i] = sampleArrayCH2[i + 1];
+            }
+            
+    //バブルソート
+        //時系列配列をソート用配列にコピー
+            //CH1
+        for(int i = 0; i < numData - 1; i++){
+            sortArrayCH1[i] = sampleArrayCH1[i];
+            }
+           //CH2
+        for(int i = 0; i < numData - 1; i++){
+            sortArrayCH2[i] = sampleArrayCH2[i];
+            }
+        
+        //バブルソート関数呼び出し
+        bubbleSort(sortArrayCH1,numData);
+        bubbleSort(sortArrayCH2,numData);
+        
+        //上と下一つづつを省いたサンプルを平均して,CH1とCH2の差分を返す
+        int sumVal = 0;
+        int aveValCH1 = 0;
+        int aveValCH2 = 0;
+        //CH1
+        //合計
+        for(int i = 1;i <= numData - 2;i++){
+            sumVal = sumVal+sortArrayCH1[i];
+            }
+        //平均
+        aveValCH1 = sumVal / (numData - 2);
+        
+        //CH2
+        //合計
+        sumVal = 0;
+        for(int i = 1;i <= numData - 2;i++){
+            sumVal = sumVal+sortArrayCH2[i];
+            }
+        //平均
+        aveValCH2 = sumVal / (numData - 2);
+        
+        //値返す
+        return (cramp((((aveValCH1-aveValCH2)/2)+511),0,1023)) ;
+        
+    }
+   
+   
+
+//バブルソート(配列の名前(ポインタ),配列要素数)
+void bubbleSort(int *sortArray,int numData){
+           int temp = 0;
+           //バブルソート本体
+        for (int i = 0; i < numData - 1; i++) {
+          for (int j = numData - 1; j > i; j--) {
+                if (sortArray[j - 1] > sortArray[j]) {  //前の要素の方が大きかったら
+                temp = sortArray[j];        // 交換する
+                sortArray[j] = sortArray[j - 1];
+                sortArray[j - 1]= temp;
+                }
+              }
+          }
+          
+    }
+
+ 
+//cramp関数
+int cramp(int val , int min , int max){
+    if(val < min){
+        return min;
+        }
+    if(val > max){
+        return max;
+        }
+        
+        return val;   
+    }
+    
diff -r 000000000000 -r d8edf98c4892 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Sat May 09 14:51:15 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/433970e64889
\ No newline at end of file