X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=service%2Fsoft-sensor-manager%2FSampleApp%2Farduino%2FTrackee_Thing%2Fsrc%2Fproximity.cpp;h=efefc74e1de66eddcc0fa1e4a264df82e0014d04;hb=935fdb9b67b6c10d007e652e9e2e028fd6ccfe09;hp=351f9302e9aeeb16b427ad891709ba7993aa1b44;hpb=00b3660e45c56cb3db35dc2596a054f801b5591a;p=platform%2Fupstream%2Fiotivity.git diff --git a/service/soft-sensor-manager/SampleApp/arduino/Trackee_Thing/src/proximity.cpp b/service/soft-sensor-manager/SampleApp/arduino/Trackee_Thing/src/proximity.cpp index 351f930..efefc74 100644 --- a/service/soft-sensor-manager/SampleApp/arduino/Trackee_Thing/src/proximity.cpp +++ b/service/soft-sensor-manager/SampleApp/arduino/Trackee_Thing/src/proximity.cpp @@ -1,87 +1,103 @@ -/* - * proximity.cpp - * - * Created on: 2014. 11. 13. - * Author: eunseok - */ +/****************************************************************** +* +* Copyright 2014 Samsung Electronics All Rights Reserved. +* +* +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************/ #include "Arduino.h" #include "proximity.h" #include // Proximity code start -float CalculateExponentialAverage(int numberOfSamples, int* array, int startindex, int flag){ - float numerator = 0; - float denominator = 0; - - float average = 0.0; - - if (flag < arraysize / RSSI_EA) // first loop buffer full - { - for (int i = 0; i < startindex; i++) - { - average += array[i]; - } - if(startindex == 0){} - else{ - average = average / startindex; - } +float CalculateExponentialAverage(int numberOfSamples, int *array, int startindex, int flag) +{ + float numerator = 0; + float denominator = 0; - Serial.print("average1 : "); - Serial.println(average); - } - else - { - for (int i = 0; i < arraysize; i++) - { - average += array[i]; - } + float average = 0.0; - for (int i = startindex; i < startindex + RSSI_EA; i++) - { - average -= array[i]; - } - average = average / (arraysize - numberOfSamples); + if (flag < arraysize / RSSI_EA) // first loop buffer full + { + for (int i = 0; i < startindex; i++) + { + average += array[i]; + } + if (startindex == 0) {} + else + { + average = average / startindex; + } + // Serial.print("exp: "); + Serial.print("average1 : "); + Serial.println(average); + } + else + { + for (int i = 0; i < arraysize; i++) + { + average += array[i]; + } - Serial.print("average2 : "); - Serial.println(average); - } - //exponential moving average - int i = 0; - //CHANGE THIS FOR DIFFERENT SMOOTHING EFFECT - float beta=0.8f; - for (i = startindex + numberOfSamples - 1; i >= startindex; i--) - { - numerator += array[i]* pow(beta, startindex + numberOfSamples - i - 1); - denominator += pow(beta, startindex + numberOfSamples - i - 1); - } + for (int i = startindex; i < startindex + RSSI_EA; i++) + { + average -= array[i]; + } + average = average / (arraysize - numberOfSamples); + // Serial.print("exp: "); + Serial.print("average2 : "); + Serial.println(average); + } + //exponential moving average + int i = 0; + //CHANGE THIS FOR DIFFERENT SMOOTHING EFFECT + float beta = 0.8f; + for (i = startindex + numberOfSamples - 1; i >= startindex; i--) + { + numerator += array[i] * pow(beta, startindex + numberOfSamples - i - 1); + denominator += pow(beta, startindex + numberOfSamples - i - 1); + } - int offset = 3; - if(average != 0.0){ - numerator += average * pow(beta, offset + numberOfSamples); - denominator += pow(beta, offset + numberOfSamples); - } - return numerator / denominator; + int offset = 3; + if (average != 0.0) + { + numerator += average * pow(beta, offset + numberOfSamples); + denominator += pow(beta, offset + numberOfSamples); + } + return numerator / denominator; } float calculateDistance(float avgRSSI, float txPower) { - if (avgRSSI == 0) - { - return -1.0; - } + if (avgRSSI == 0) + { + return -1.0; + } - float ratio = avgRSSI*1.0/txPower; - if (ratio < 1.0) - { - return pow(ratio,10); - } - else - { - float distance = (0.7)*pow(ratio,10) + 0.024; - return distance; - } + float ratio = avgRSSI * 1.0 / txPower; + if (ratio < 1.0) + { + return pow(ratio, 10); + } + else + { + float distance = (0.7) * pow(ratio, 10) + 0.024; + return distance; + } } // proximity code end