tested code for using the GP2D12 sensors

Dependencies:   mbed

Committer:
mariob
Date:
Tue Mar 12 13:19:29 2013 +0000
Revision:
0:e3c27b347c15
MB

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mariob 0:e3c27b347c15 1 /*
mariob 0:e3c27b347c15 2 * here is an example for using the GP2d12 sensor.
mariob 0:e3c27b347c15 3 * Basically I interpolated the output curve (output voltage wrt distance) whose
mariob 0:e3c27b347c15 4 * Matlab code is reported below.
mariob 0:e3c27b347c15 5 * I'm too lazy for creating a class, so the code has been provided within the
mariob 0:e3c27b347c15 6 * main function
mariob 0:e3c27b347c15 7 */
mariob 0:e3c27b347c15 8 #include "mbed.h"
mariob 0:e3c27b347c15 9
mariob 0:e3c27b347c15 10 DigitalOut myled(LED1);
mariob 0:e3c27b347c15 11
mariob 0:e3c27b347c15 12 AnalogIn s (p20);
mariob 0:e3c27b347c15 13
mariob 0:e3c27b347c15 14 #define k_5 12466.0
mariob 0:e3c27b347c15 15 #define k_4 -23216.0
mariob 0:e3c27b347c15 16 #define k_3 14974.0
mariob 0:e3c27b347c15 17 #define k_2 -3585.0
mariob 0:e3c27b347c15 18 #define k_1 19.0
mariob 0:e3c27b347c15 19 #define k_0 96.0
mariob 0:e3c27b347c15 20
mariob 0:e3c27b347c15 21 int main() {
mariob 0:e3c27b347c15 22 while(1) {
mariob 0:e3c27b347c15 23 float val = s.read();
mariob 0:e3c27b347c15 24 float res = 0.0;
mariob 0:e3c27b347c15 25 res += k_5*(val*val*val*val*val);
mariob 0:e3c27b347c15 26 res += k_4*(val*val*val*val);
mariob 0:e3c27b347c15 27 res += k_3*(val*val*val);
mariob 0:e3c27b347c15 28 res += k_2*(val*val);
mariob 0:e3c27b347c15 29 res += k_1*val;
mariob 0:e3c27b347c15 30 res += k_0;
mariob 0:e3c27b347c15 31 printf("%f, dst=%f\n\r", val, res);
mariob 0:e3c27b347c15 32 myled = 1;
mariob 0:e3c27b347c15 33 wait(0.2);
mariob 0:e3c27b347c15 34 myled = 0;
mariob 0:e3c27b347c15 35 wait(0.2);
mariob 0:e3c27b347c15 36 }
mariob 0:e3c27b347c15 37 }
mariob 0:e3c27b347c15 38
mariob 0:e3c27b347c15 39 /*
mariob 0:e3c27b347c15 40 Matlab commands:
mariob 0:e3c27b347c15 41 Y = [10 15 20 25 30 35 40 50 60 70 80 90 100];
mariob 0:e3c27b347c15 42 X = [0.70 0.57 0.39 0.32 0.28 0.24 0.20 0.17 0.13 0.12 0.1 0.01 0.0001];
mariob 0:e3c27b347c15 43 p = polyfit(X, Y, 5);
mariob 0:e3c27b347c15 44 x_test = [0:0.05:0.7];
mariob 0:e3c27b347c15 45 for i=1:length(x_test)
mariob 0:e3c27b347c15 46 y_test(i) = polyval(p, x_test(i));
mariob 0:e3c27b347c15 47 end
mariob 0:e3c27b347c15 48 polyval(p,0.5)
mariob 0:e3c27b347c15 49 %x = 0.5;
mariob 0:e3c27b347c15 50 %res = p(1)*(x^4) + p(2)*(x^3) + p(3)*(x^2) + p(4)*(x^1) + p(5)*(x^0);
mariob 0:e3c27b347c15 51 figure
mariob 0:e3c27b347c15 52 plot(X, Y, 'b')
mariob 0:e3c27b347c15 53 hold on
mariob 0:e3c27b347c15 54 plot(x_test, y_test, 'r')
mariob 0:e3c27b347c15 55 */