Mario Bambagini
/
gp2d12_example
tested code for using the GP2D12 sensors
main.cpp@0:e3c27b347c15, 2013-03-12 (annotated)
- Committer:
- mariob
- Date:
- Tue Mar 12 13:19:29 2013 +0000
- Revision:
- 0:e3c27b347c15
MB
Who changed what in which revision?
User | Revision | Line number | New 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 | */ |