Ultrasonic sensor to measure the bag in cellophane film
Dependencies: PCF2119_16X2_LCD SRF02 mbed
Revision 0:ad0e2e5cb37b, committed 2016-01-05
- Comitter:
- BPPearson
- Date:
- Tue Jan 05 16:41:00 2016 +0000
- Commit message:
- Ultrasonic bag sensor
Changed in this revision
diff -r 000000000000 -r ad0e2e5cb37b PCF2119_16X2_LCD.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PCF2119_16X2_LCD.lib Tue Jan 05 16:41:00 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/ssozonoff/code/PCF2119_16X2_LCD/#1590b28a5be7
diff -r 000000000000 -r ad0e2e5cb37b SRF02.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SRF02.lib Tue Jan 05 16:41:00 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/bobboteck/code/SRF02/#6b978ea41787
diff -r 000000000000 -r ad0e2e5cb37b main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Jan 05 16:41:00 2016 +0000 @@ -0,0 +1,131 @@ +#include "mbed.h" +#include "SRF02.h" +#include "PC2119_16X2_LCD.h" + +// ultrasonc sensor has a resolution of 1 cm at best so can only be used for rough positional measurements + +// Batron LCD - this code is a bit rough and ready and doesn't cope with the second line of the dsiplay very well + +// Adresse I2C standard des afficheurs LCD +#define LCDADDR 0x76 + +DigitalOut led1(LED1); +DigitalOut led2(LED2); +DigitalOut led3(LED3); +DigitalOut led4(LED4); +DigitalIn multiSensor(p20); +//I2C i2c(p9, p10); +//DigitalOut resetLCD(p11); +//I2C ultraS(p28,p27); +Serial pc(USBTX, USBRX); // tx, rx +SRF02 srf02c(p28, p27, 0xE0, 0x52); +SRF02 srf02l(p28, p27, 0xE2, 0x52); +SRF02 srf02r(p28, p27, 0xE4, 0x52); +AnalogOut anOut(p18); +//PC2119_16X2_LCD lcd(p9, p10, p11); + +float filteredDistance = 1000.0; +float range = 4000.0; + +// procedure declarations + + + + +int main() +{ + // char str[10]; +// char msb = 0; +// char lsb = 0; + float distanceC; + float distanceL = range; + float distanceR = range; + bool validReading; + + // set i2c frequency to 100KHz + //i2c.frequency(100000); + + //pc.printf("clear lcd display\n"); + multiSensor.mode(PullUp); + + // do forever + while (1) + { + validReading = false; + + distanceC = srf02c.read(); + + if (multiSensor == true) + { + distanceL = srf02l.read(); + distanceR = srf02r.read(); + } + + if (distanceC < range) + { + led1 = 1; + validReading = true; + } + else + { + led1 = 0; + } + + if (multiSensor == true){ + if (distanceL < range) + { + led2 = 1; + validReading = true; + } + else + { + led2 = 0; + } + + if (distanceR < range) + { + led3 = 1; + validReading = true; + } + else + { + led3 = 0; + } + } + + //pc.printf("Distances %5.3f, %5.3f, %5.3f\n", distanceC, distanceL, distanceR); + + if (validReading) + { + float shortestDistance = 0.0; + + if (multiSensor == true){ + if (distanceC < distanceL && distanceC < distanceR) + shortestDistance = distanceC; + else + if (distanceL < distanceR) + shortestDistance = distanceL; + else + shortestDistance = distanceR; + } + else + shortestDistance = distanceC; + + filteredDistance = (0.7 * filteredDistance) + (0.3 * shortestDistance); + + pc.printf("Average distance %5.3f\n", filteredDistance); + + anOut = filteredDistance / range; + } + else + { + pc.printf("Out of range\n"); + + anOut = 0.0; + } + + // wait a while then loop again - was 20 ms + //wait_ms(100); + } +} +
diff -r 000000000000 -r ad0e2e5cb37b mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Tue Jan 05 16:41:00 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/8ab26030e058 \ No newline at end of file