
Ultrasonic sensor to measure the bag in cellophane film
Dependencies: PCF2119_16X2_LCD SRF02 mbed
main.cpp@0:ad0e2e5cb37b, 2016-01-05 (annotated)
- Committer:
- BPPearson
- Date:
- Tue Jan 05 16:41:00 2016 +0000
- Revision:
- 0:ad0e2e5cb37b
Ultrasonic bag sensor
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
BPPearson | 0:ad0e2e5cb37b | 1 | #include "mbed.h" |
BPPearson | 0:ad0e2e5cb37b | 2 | #include "SRF02.h" |
BPPearson | 0:ad0e2e5cb37b | 3 | #include "PC2119_16X2_LCD.h" |
BPPearson | 0:ad0e2e5cb37b | 4 | |
BPPearson | 0:ad0e2e5cb37b | 5 | // ultrasonc sensor has a resolution of 1 cm at best so can only be used for rough positional measurements |
BPPearson | 0:ad0e2e5cb37b | 6 | |
BPPearson | 0:ad0e2e5cb37b | 7 | // Batron LCD - this code is a bit rough and ready and doesn't cope with the second line of the dsiplay very well |
BPPearson | 0:ad0e2e5cb37b | 8 | |
BPPearson | 0:ad0e2e5cb37b | 9 | // Adresse I2C standard des afficheurs LCD |
BPPearson | 0:ad0e2e5cb37b | 10 | #define LCDADDR 0x76 |
BPPearson | 0:ad0e2e5cb37b | 11 | |
BPPearson | 0:ad0e2e5cb37b | 12 | DigitalOut led1(LED1); |
BPPearson | 0:ad0e2e5cb37b | 13 | DigitalOut led2(LED2); |
BPPearson | 0:ad0e2e5cb37b | 14 | DigitalOut led3(LED3); |
BPPearson | 0:ad0e2e5cb37b | 15 | DigitalOut led4(LED4); |
BPPearson | 0:ad0e2e5cb37b | 16 | DigitalIn multiSensor(p20); |
BPPearson | 0:ad0e2e5cb37b | 17 | //I2C i2c(p9, p10); |
BPPearson | 0:ad0e2e5cb37b | 18 | //DigitalOut resetLCD(p11); |
BPPearson | 0:ad0e2e5cb37b | 19 | //I2C ultraS(p28,p27); |
BPPearson | 0:ad0e2e5cb37b | 20 | Serial pc(USBTX, USBRX); // tx, rx |
BPPearson | 0:ad0e2e5cb37b | 21 | SRF02 srf02c(p28, p27, 0xE0, 0x52); |
BPPearson | 0:ad0e2e5cb37b | 22 | SRF02 srf02l(p28, p27, 0xE2, 0x52); |
BPPearson | 0:ad0e2e5cb37b | 23 | SRF02 srf02r(p28, p27, 0xE4, 0x52); |
BPPearson | 0:ad0e2e5cb37b | 24 | AnalogOut anOut(p18); |
BPPearson | 0:ad0e2e5cb37b | 25 | //PC2119_16X2_LCD lcd(p9, p10, p11); |
BPPearson | 0:ad0e2e5cb37b | 26 | |
BPPearson | 0:ad0e2e5cb37b | 27 | float filteredDistance = 1000.0; |
BPPearson | 0:ad0e2e5cb37b | 28 | float range = 4000.0; |
BPPearson | 0:ad0e2e5cb37b | 29 | |
BPPearson | 0:ad0e2e5cb37b | 30 | // procedure declarations |
BPPearson | 0:ad0e2e5cb37b | 31 | |
BPPearson | 0:ad0e2e5cb37b | 32 | |
BPPearson | 0:ad0e2e5cb37b | 33 | |
BPPearson | 0:ad0e2e5cb37b | 34 | |
BPPearson | 0:ad0e2e5cb37b | 35 | int main() |
BPPearson | 0:ad0e2e5cb37b | 36 | { |
BPPearson | 0:ad0e2e5cb37b | 37 | // char str[10]; |
BPPearson | 0:ad0e2e5cb37b | 38 | // char msb = 0; |
BPPearson | 0:ad0e2e5cb37b | 39 | // char lsb = 0; |
BPPearson | 0:ad0e2e5cb37b | 40 | float distanceC; |
BPPearson | 0:ad0e2e5cb37b | 41 | float distanceL = range; |
BPPearson | 0:ad0e2e5cb37b | 42 | float distanceR = range; |
BPPearson | 0:ad0e2e5cb37b | 43 | bool validReading; |
BPPearson | 0:ad0e2e5cb37b | 44 | |
BPPearson | 0:ad0e2e5cb37b | 45 | // set i2c frequency to 100KHz |
BPPearson | 0:ad0e2e5cb37b | 46 | //i2c.frequency(100000); |
BPPearson | 0:ad0e2e5cb37b | 47 | |
BPPearson | 0:ad0e2e5cb37b | 48 | //pc.printf("clear lcd display\n"); |
BPPearson | 0:ad0e2e5cb37b | 49 | multiSensor.mode(PullUp); |
BPPearson | 0:ad0e2e5cb37b | 50 | |
BPPearson | 0:ad0e2e5cb37b | 51 | // do forever |
BPPearson | 0:ad0e2e5cb37b | 52 | while (1) |
BPPearson | 0:ad0e2e5cb37b | 53 | { |
BPPearson | 0:ad0e2e5cb37b | 54 | validReading = false; |
BPPearson | 0:ad0e2e5cb37b | 55 | |
BPPearson | 0:ad0e2e5cb37b | 56 | distanceC = srf02c.read(); |
BPPearson | 0:ad0e2e5cb37b | 57 | |
BPPearson | 0:ad0e2e5cb37b | 58 | if (multiSensor == true) |
BPPearson | 0:ad0e2e5cb37b | 59 | { |
BPPearson | 0:ad0e2e5cb37b | 60 | distanceL = srf02l.read(); |
BPPearson | 0:ad0e2e5cb37b | 61 | distanceR = srf02r.read(); |
BPPearson | 0:ad0e2e5cb37b | 62 | } |
BPPearson | 0:ad0e2e5cb37b | 63 | |
BPPearson | 0:ad0e2e5cb37b | 64 | if (distanceC < range) |
BPPearson | 0:ad0e2e5cb37b | 65 | { |
BPPearson | 0:ad0e2e5cb37b | 66 | led1 = 1; |
BPPearson | 0:ad0e2e5cb37b | 67 | validReading = true; |
BPPearson | 0:ad0e2e5cb37b | 68 | } |
BPPearson | 0:ad0e2e5cb37b | 69 | else |
BPPearson | 0:ad0e2e5cb37b | 70 | { |
BPPearson | 0:ad0e2e5cb37b | 71 | led1 = 0; |
BPPearson | 0:ad0e2e5cb37b | 72 | } |
BPPearson | 0:ad0e2e5cb37b | 73 | |
BPPearson | 0:ad0e2e5cb37b | 74 | if (multiSensor == true){ |
BPPearson | 0:ad0e2e5cb37b | 75 | if (distanceL < range) |
BPPearson | 0:ad0e2e5cb37b | 76 | { |
BPPearson | 0:ad0e2e5cb37b | 77 | led2 = 1; |
BPPearson | 0:ad0e2e5cb37b | 78 | validReading = true; |
BPPearson | 0:ad0e2e5cb37b | 79 | } |
BPPearson | 0:ad0e2e5cb37b | 80 | else |
BPPearson | 0:ad0e2e5cb37b | 81 | { |
BPPearson | 0:ad0e2e5cb37b | 82 | led2 = 0; |
BPPearson | 0:ad0e2e5cb37b | 83 | } |
BPPearson | 0:ad0e2e5cb37b | 84 | |
BPPearson | 0:ad0e2e5cb37b | 85 | if (distanceR < range) |
BPPearson | 0:ad0e2e5cb37b | 86 | { |
BPPearson | 0:ad0e2e5cb37b | 87 | led3 = 1; |
BPPearson | 0:ad0e2e5cb37b | 88 | validReading = true; |
BPPearson | 0:ad0e2e5cb37b | 89 | } |
BPPearson | 0:ad0e2e5cb37b | 90 | else |
BPPearson | 0:ad0e2e5cb37b | 91 | { |
BPPearson | 0:ad0e2e5cb37b | 92 | led3 = 0; |
BPPearson | 0:ad0e2e5cb37b | 93 | } |
BPPearson | 0:ad0e2e5cb37b | 94 | } |
BPPearson | 0:ad0e2e5cb37b | 95 | |
BPPearson | 0:ad0e2e5cb37b | 96 | //pc.printf("Distances %5.3f, %5.3f, %5.3f\n", distanceC, distanceL, distanceR); |
BPPearson | 0:ad0e2e5cb37b | 97 | |
BPPearson | 0:ad0e2e5cb37b | 98 | if (validReading) |
BPPearson | 0:ad0e2e5cb37b | 99 | { |
BPPearson | 0:ad0e2e5cb37b | 100 | float shortestDistance = 0.0; |
BPPearson | 0:ad0e2e5cb37b | 101 | |
BPPearson | 0:ad0e2e5cb37b | 102 | if (multiSensor == true){ |
BPPearson | 0:ad0e2e5cb37b | 103 | if (distanceC < distanceL && distanceC < distanceR) |
BPPearson | 0:ad0e2e5cb37b | 104 | shortestDistance = distanceC; |
BPPearson | 0:ad0e2e5cb37b | 105 | else |
BPPearson | 0:ad0e2e5cb37b | 106 | if (distanceL < distanceR) |
BPPearson | 0:ad0e2e5cb37b | 107 | shortestDistance = distanceL; |
BPPearson | 0:ad0e2e5cb37b | 108 | else |
BPPearson | 0:ad0e2e5cb37b | 109 | shortestDistance = distanceR; |
BPPearson | 0:ad0e2e5cb37b | 110 | } |
BPPearson | 0:ad0e2e5cb37b | 111 | else |
BPPearson | 0:ad0e2e5cb37b | 112 | shortestDistance = distanceC; |
BPPearson | 0:ad0e2e5cb37b | 113 | |
BPPearson | 0:ad0e2e5cb37b | 114 | filteredDistance = (0.7 * filteredDistance) + (0.3 * shortestDistance); |
BPPearson | 0:ad0e2e5cb37b | 115 | |
BPPearson | 0:ad0e2e5cb37b | 116 | pc.printf("Average distance %5.3f\n", filteredDistance); |
BPPearson | 0:ad0e2e5cb37b | 117 | |
BPPearson | 0:ad0e2e5cb37b | 118 | anOut = filteredDistance / range; |
BPPearson | 0:ad0e2e5cb37b | 119 | } |
BPPearson | 0:ad0e2e5cb37b | 120 | else |
BPPearson | 0:ad0e2e5cb37b | 121 | { |
BPPearson | 0:ad0e2e5cb37b | 122 | pc.printf("Out of range\n"); |
BPPearson | 0:ad0e2e5cb37b | 123 | |
BPPearson | 0:ad0e2e5cb37b | 124 | anOut = 0.0; |
BPPearson | 0:ad0e2e5cb37b | 125 | } |
BPPearson | 0:ad0e2e5cb37b | 126 | |
BPPearson | 0:ad0e2e5cb37b | 127 | // wait a while then loop again - was 20 ms |
BPPearson | 0:ad0e2e5cb37b | 128 | //wait_ms(100); |
BPPearson | 0:ad0e2e5cb37b | 129 | } |
BPPearson | 0:ad0e2e5cb37b | 130 | } |
BPPearson | 0:ad0e2e5cb37b | 131 |