From 3c3c628b617dc53f0b7b59285c7d67888074c33d Mon Sep 17 00:00:00 2001 From: sicarius Date: Sun, 18 Feb 2007 00:14:00 +0000 Subject: +++ Additional Codework --- .../Framework/modules/input/distance_sensor.c | 32 ++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100755 source/Concept/Framework/modules/input/distance_sensor.c (limited to 'source/Concept/Framework/modules/input/distance_sensor.c') diff --git a/source/Concept/Framework/modules/input/distance_sensor.c b/source/Concept/Framework/modules/input/distance_sensor.c new file mode 100755 index 0000000..977784f --- /dev/null +++ b/source/Concept/Framework/modules/input/distance_sensor.c @@ -0,0 +1,32 @@ +#include "distance_sensor.h" + +//----------------------------------------------------------------------------- +float Distance_Sensor::GetDistance() +{ + uint32 result = 0; + + //Generate pulse + *hardwareDDR |= pin;//Set pin output + *hardwarePort |= pin;//Activate port + usleep(10);//Wait for 10µs + //*hardwarePort &= ~pin;//Deactivate port + *hardwareDDR &= ~pin;//Set pin input + + (parent->GetModule(IO_DISPLAY_MAIN))->Print("pre 1", 4, 1); + + //Wait for response + while(!(PINC & pin)){asm volatile("nop");} + + (parent->GetModule(IO_DISPLAY_MAIN))->Print("pre 2", 4, 1); + + //Calculate duration of response + while(*hardwarePin & pin) + { + result++; + asm volatile("nop"); + } + + (parent->GetModule(IO_DISPLAY_MAIN))->Print("pre 3", 4, 1); + + return (float(result) * DISTANCE_PER_VALUE); +} -- cgit v1.2.3