long MeUltrasonicSensor::measure(){
	long duration;
	pinMode(s2, OUTPUT);
	MeOutput::write1(0);
	delayMicroseconds(2);
	MeOutput::write1(1023);
	delayMicroseconds(10);
	MeOutput::write1(0);
	pinMode(s1,INPUT);
	duration = pulseIn(s1,HIGH);
	return duration;
}
Exemple #2
0
long Ultrasonic::getTimming()
{
	digitalWrite(trigger_pin, LOW); 
	delayMicroseconds(2); 

	digitalWrite(trigger_pin, HIGH);
	delayMicroseconds(10); 

	digitalWrite(trigger_pin, LOW);

	return pulseIn(echo_pin, HIGH, timeout);
}
Exemple #3
0
///////////////////////
// Internal functions
///////////////////////
int Distance::checkModule(uint8_t module)
{
  long duration, distance;
  startPwm();
  setShift(module, PULSE_TIME);
  duration = pulseIn(ULTRASOUND_RECEIVE_PIN, HIGH);
  distance = (duration * CM_PER_MICROSECOND) + FIXED_OFFSET;
  //distance = (.13077*pow(duration,1-.2421));
  stopPwm();
  delay(250);
  return (int)distance;
}
long Ultrasonic::Timing()
{
  digitalWrite(Trig_pin, LOW);
  delayMicroseconds(2);
  digitalWrite(Trig_pin, HIGH);
  delayMicroseconds(10);
  digitalWrite(Trig_pin, LOW);
  duration = pulseIn(Echo_pin,HIGH,Time_out);
  if ( duration == 0 ) {
	duration = Time_out; }
  return duration;
}
Exemple #5
0
unsigned long sense_distance() {
    /* send pulse */
    digitalWrite(TRIG_PIN, HIGH);
    const uint16_t magic_delay = 1000;  // us
    delayMicroseconds(magic_delay);
    digitalWrite(TRIG_PIN, LOW);

    /* calculate distance */
    unsigned long duration = pulseIn(ECHO_PIN, HIGH);
    const uint8_t conversion_factor = 6;
    return duration >> conversion_factor;
}
ultrasonic::udistance()
{
    
       digitalWrite(trigPin,HIGH);
       delayMicroseconds(15);
       digitalWrite(trigPin,LOW);
       delayMicroseconds(2);
       duration = pulseIn(echoPin, HIGH);
       uldistance = duration/58.2;
       return uldistance;
    
}
Exemple #7
0
// HC-SR04 ultrasonic sensor driver
unsigned int SonarControl::readHCSR04(int triggerPin, int echoPin){
  unsigned int uS;  
  digitalWrite(triggerPin, LOW); 
  delayMicroseconds(2); 
  digitalWrite(triggerPin, HIGH);
  delayMicroseconds(10); 
  digitalWrite(triggerPin, LOW);
  uS = pulseIn(echoPin, HIGH, MAX_ECHO_TIME + 1000);  
  if (uS > MAX_ECHO_TIME) uS = NO_ECHO;
    else if (uS < MIN_ECHO_TIME) uS = NO_ECHO;
  return uS;
}
Exemple #8
0
void SonarTask(void* p)
{

	float cmdistance_1; //left
	float cmdistance_2; //right
	long microsec = ultrasonic.timing(); //MODIFIED DELAY FUNCTION
	long microsec_2 = ultrasonic_2.timing();
	
	    digitalWrite(trigpin_1, LOW);
		digitalWrite(trigpin_2, LOW);
	    vTaskDelay(2);
	    digitalWrite(trigpin_1, HIGH);
		digitalWrite(trigpin_2, HIGH);
	    vTaskDelay(10);
	    digitalWrite(trigpin_1, LOW);
		digitalWrite(trigpin_2, LOW);
	    long microsec_1 = pulseIn(echopin_1, HIGH);
		long microsec_2 = pulseIn(echopin_2, HIGH);
	    cmdistance_1 = microsec_1 / cmdivisor / 2.0;
		cmdistance_2 = microsec_2 / cmdivisor / 2.0;
		
	    int distance_left = (int) cmdistance_1;
		int distance_right = (int) cmdistance_2;
		
		if(cmdistance>40 && cmdistance<60) {

		}
		else if (cmdistance<40)	{

		}
		else { }

		if(cmdistance>40 && cmdistance<60) {

		}
		else if (cmdistance<40)	{

		}
		else { }
}
Exemple #9
0
DHT11Result DHT11::read()
{
  pinMode(_pin, OUTPUT);
  digitalWrite(_pin, LOW);
  delay(20);

  uint32_t cycles[80];

  noInterrupts();
  {
    pinMode(_pin, INPUT_PULLUP);

    if (pulseIn(_pin, HIGH) == 0) {
      return prepareErrorResult("Timeout waiting for start signal LOW pulse");
    }

    for (int i = 0; i < 80; i+= 2) {
      cycles[i] = pulse(LOW, 150);
      cycles[i + 1] = pulse(HIGH, 150);
    }

    interrupts();
  }

  uint32_t data[5];
  data[0] = data[1] = data[2] = data[3] = data[4] = 0;

  for (int i = 0; i < 40; ++i) {
    uint32_t lowCycles  = cycles[2 * i];
    uint32_t highCycles = cycles[2 * i + 1];

    data[i/8] <<= 1;

    if (highCycles > lowCycles) {
      data[i/8] |= 1;
    }
  }

  uint32_t calculatedParity = (data[0] + data[1] + data[2] + data[3]) & 0xFF;

  if (data[4] != calculatedParity)
  {
    return prepareErrorResult("Parity check failed");
  }

  DHT11Result result;
  result.hasError = false;
  result.errorMessage = "";
  result.humidity = data[0];
  result.temperatureC = data[2];
  return result;
}
Exemple #10
0
void loop() {
// establish variables for duration of the ping,
// and the distance result in inches and centimeters:
	long duration, inches, cm;

// The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
	pinMode(pingPin, OUTPUT);
	digitalWrite(pingPin, LOW);
	delayMicroseconds(2);
	digitalWrite(pingPin, HIGH);
	delayMicroseconds(10);
	digitalWrite(pingPin, LOW);

// The same pin is used to read the signal from the PING))): a HIGH
// pulse whose duration is the time (in microseconds) from the sending
// of the ping to the reception of its echo off of an object.
	pinMode(inPin, INPUT);
	duration = pulseIn(inPin, HIGH);

// convert the time into a distance
	inches = microsecondsToInches(duration);
	cm = microsecondsToCentimeters(duration);

	Serial.println(cm, DEC);

	if (cm < 3) {
		// play the note corresponding to this sensor:
		tone(8, notes[4], 30);
	}

	if ((cm >= 3) && (cm <= 9)) {
		// play the note corresponding to this sensor:
		tone(8, notes[0], 30);
	}

	if ((cm >= 10) && (cm <= 19)) {
		// play the note corresponding to this sensor:
		tone(8, notes[1], 30);
	}
	if ((cm >= 20) && (cm <= 29)) {
		// play the note corresponding to this sensor:
		tone(8, notes[2], 30);
	}

	if ((cm >= 30) && (cm <= 49)) {
		// play the note corresponding to this sensor:
		tone(8, notes[3], 30);
	}

	delay(100);
}
Exemple #11
0
void sonar_loop()
{
  pinMode(pwPin, INPUT);
  pulse = pulseIn(pwPin, HIGH);
  inches = pulse / 147;
  cm = inches * 2.54;
  Serial.print(inches);
  Serial.print("in, ");
  Serial.print(cm);
  Serial.print("cm");
  Serial.println();
  delay(500);
}
Exemple #12
0
float BlockingRC::getValueWithDelay(int pinIndex, long int delayInMicros)   //get the current RC reading for the channel 'pinIndex', provided that the time elapsed since the last reading was taken is greater than delayInMicros
{
	long int currentTime = micros();
	if((currentTime - lastReadTime)>delayInMicros)
	{
	lastReadTime = currentTime;
	return lastValue = pulseIn(pin[pinIndex], HIGH, 25000);
	}
	else
	{
	return lastValue;
	}
}
void frontleftsensor(){
  //———Front Left Sensor-------- 
  digitalWrite(trigPinFL, HIGH); //triggers sonar
  delayMicroseconds(1000);
  digitalWrite(trigPinFL, LOW); //turn off the sonar sender
  durationFL = pulseIn(echoPinFL, HIGH);//measures distance
  distanceFL = (durationFL/2) / 29.1; //converts to cm
 //Serial.print("distanceFL = ");
 //Serial.println(distanceFL);
  if (distanceFL<=10)
    frontleftsensor();
  delay(5);
}
Exemple #14
0
unsigned int Remote::measure(byte channel)
{
	unsigned int measurement;

	measurement = pulseIn(_pins[channel], HIGH, 6000); // 30000 for servo at 50Hz, 5500 at 300Hz
	
	if(_debug)
	{
		printUnsigned("Remote Measure: ", measurement);
	}

	return(measurement); 
}
Exemple #15
0
unsigned long LUltrasonic::measureDistance() {
	unsigned long duration, distance; 

	digitalWrite(_triggerPin, LOW); 
	delayMicroseconds(10); 
	digitalWrite(_triggerPin, HIGH);
	delayMicroseconds(20);
	digitalWrite(_triggerPin, LOW);
	duration = pulseIn(_echoPin, HIGH);
	distance = duration / 29 / 2;
    
    return distance <= MAX_MEASUREABLE_DISTANCE ? distance : INFINITE_DISTANCE;
}
long Me_UltrasonicSensor::measure()
{
	long duration;
	pinMode(signalPin, OUTPUT);
	digitalWrite(signalPin, LOW);
	delayMicroseconds(2);
	digitalWrite(signalPin, HIGH);
	delayMicroseconds(10);
	digitalWrite(signalPin,LOW);
	pinMode(signalPin,INPUT);
	duration = pulseIn(signalPin,HIGH);
	return duration;
}
int get_distance(){
  //returns distance in centimeters from a ping sensor setup on pin 53
  pinMode(53, OUTPUT);
  digitalWrite(53, LOW);
  delayMicroseconds(2);
  digitalWrite(53, HIGH);
  delayMicroseconds(5);
  digitalWrite(53, LOW);

  pinMode(53, INPUT);

  return pulseIn(53, HIGH) / 29 / 2;
}
/**
 * \par Function
 *   measure
 * \par Description
 *   To get the duration of the ultrasonic sensor
 * \param[in]
 *   timeout - This value is used to define the measurement range, The
 *   default value is 30000.
 * \par Output
 *   None
 * \return
 *   The duration value associated with distance
 * \par Others
 *   None
 */
long MeUltrasonicSensor::measure(unsigned long timeout)
{
  long duration;
  MePort::dWrite2(LOW);
  delayMicroseconds(2);
  MePort::dWrite2(HIGH);
  delayMicroseconds(10);
  MePort::dWrite2(LOW);
  pinMode(s2, INPUT);
  duration = pulseIn(s2, HIGH, timeout);
  delayMicroseconds(200);
  return(duration);
}
Exemple #19
0
    long pulse(int mode, double timeout = 5) {
        if(pin == NULL) {
            puts("Pin not initialized!");
            return 0;
        }
        if(this->mode == OUTPUT){
            //muxPin(pin, 0x27);
            digitalMode(pin, INPUT);
            this->mode = INPUT;
        }

        return pulseIn(pin, mode, timeout);
    }
int UltrasonicSensor::getDistance(){
	pinMode(trig, OUTPUT);
	digitalWrite(trig,LOW);
	delayMicroseconds(2);
	digitalWrite(trig, HIGH);
	delayMicroseconds(5);
	digitalWrite(trig, LOW);
	
	pinMode(echo, INPUT);
	int duration = pulseIn(echo, HIGH,11800);
	int distance = duration/29/2;
	
	return distance;
}
Exemple #21
0
bool LeWeiPPDSensor::getValue(double *i)
{
    const unsigned long sampletime_ms = 30000;
    unsigned long lowpulseoccupancy = 0;

    unsigned long stoptime = millis() + sampletime_ms;
    while (((signed long)millis() - (signed long)stoptime) < 0)
        lowpulseoccupancy += pulseIn(_pin, LOW);

    float ratio = lowpulseoccupancy/(sampletime_ms*10.0);  // Integer percentage 0=>100
    *i = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // using spec sheet curve

    return true;
}
/**
 * Public method called on from the ColorSensor class
 * @param color : the desried color to pulse read
                    0 = white
                    1 = blue
                    2 = red
                    3 = green
 *
 * Returns the pulse of the desired color
 */
int BackEndColorSensor::colorRead(int color)    {

    //set the S2 and S3 pins to select the color to be sensed
    if(color == 0) { //white
        digitalWrite(COLOR_SENSOR_PIN_S3, LOW); //S3
        digitalWrite(COLOR_SENSOR_PIN_S2, HIGH); //S2
        // Serial.print(" w");
    }

    else if(color == 1) { //blue
        digitalWrite(COLOR_SENSOR_PIN_S3, HIGH); //S3
        digitalWrite(COLOR_SENSOR_PIN_S2, LOW); //S2
        // Serial.print(" b");
    }

    else if(color == 2) { //red
        digitalWrite(COLOR_SENSOR_PIN_S3, LOW); //S3
        digitalWrite(COLOR_SENSOR_PIN_S2, LOW); //S2
        // Serial.print(" r");
    }

    else if(color == 3) { //green
        digitalWrite(COLOR_SENSOR_PIN_S3, HIGH); //S3
        digitalWrite(COLOR_SENSOR_PIN_S2, HIGH); //S2
        // Serial.print(" g");
    }

    int readPulse; //where the pulse reading from sensor will go

    //  turn LEDs on or off, as directed by the LEDstate var
    if(LEDstate == 0) {
        digitalWrite(COLOR_SENSOR_PIN_LED, LOW);
    }
    if(LEDstate == 1) {
        digitalWrite(COLOR_SENSOR_PIN_LED, HIGH);
    }

    delay(100); //Delay for 100ms for before reading

    // now take a measurement from the sensor, timing a low pulse on the sensor's "out" pin
    readPulse = int(pulseIn(COLOR_SENSOR_PIN_OUT, LOW, 80000));

    //if the pulseIn times out, it returns 0 and that throws off numbers. just cap it at 80k if it happens
    if(readPulse < .1) {
        readPulse = 1;
    }

    // return the pulse value back to whatever called for it...
    return readPulse;
}
Exemple #23
0
long SR04::Distance() {
    long d = 0;
    _duration = 0;
    digitalWrite(_triggerPin, LOW);
    delayMicroseconds(2);
    digitalWrite(_triggerPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(_triggerPin, LOW);
    delayMicroseconds(2);
    _duration = pulseIn(_echoPin, HIGH, PULSE_TIMEOUT);
    d = MicrosecondsToMillimeter(_duration);
    delay(25);
    return d;
}
Exemple #24
0
IRReceiverOutput const & IRReceiver::recv() {
	// Re-read everything only if the first pulse lasts more than 4.5 ms
	if (pulseIn(_pin, HIGH, 500000) >= 4400) {
		_wasRepeated = false;
		_lastResult.IRAddress = getByte();
		_lastResult.IRAddressReversed = getByte();
		_lastResult.Command = getByte();
		_lastResult.CommandReversed = getByte();
	}
	else
		_wasRepeated = true;

	return _lastResult;
}
long YoungMakerUltrasonic::Distance() {
    long d = 0;
    _duration = 0;
    digitalWrite(_triggerPin, LOW);
    delayMicroseconds(2);
    digitalWrite(_triggerPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(_triggerPin, LOW);
    delayMicroseconds(2);
    _duration = pulseIn(_echoPin, HIGH, PULSE_TIMEOUT);
    d = MicrosecondsToCentimeter(_duration);
    delay(25);
    return d;
}
Exemple #26
0
void sonar_loop()
{
  pinMode(PIN_sonar_PW, INPUT);
  pulse = pulseIn(PIN_sonar_PW, HIGH);
  inches = pulse / 147;
  cm = inches * 2.54;
  //Serial.print(inches);
  //Serial.print("in, ");
  //Serial.print(cm);
  Serial.print("(-4,");
  Serial.print(cm);
  Serial.println(")"); 
  //delay(500);
}
Exemple #27
0
long Ping::getDuration() {
    pinMode(pin, OUTPUT);

    digitalWrite(pin, LOW);
    delayMicroseconds(2);
    digitalWrite(pin, HIGH);
    delayMicroseconds(5);
    digitalWrite(pin, LOW);

    pinMode(pin, INPUT);


    return pulseIn(pin, HIGH);
}
Exemple #28
0
unsigned long Ultrasonic::measureTiming(){
  digitalWrite(trigPin, LOW); // Ensure low
  delayMicroseconds(2); // Wait for stable low

  digitalWrite(trigPin, HIGH); // Set trigger pin to high for 10 microseconds
  delayMicroseconds(10);        // to initiate sensor cycle

  digitalWrite(trigPin, LOW); // Then set low again, the sensor will now emit and receive
                               // 8 cycles of ultrasonic sound waves at 40 khz

  return pulseIn(echoPin,HIGH);  // Now wait for the sensor to output a pulse,
                                  // the pulse width corresponds to a distance,
                                  // given delta t from send to recieved.
}
Exemple #29
0
unsigned long ColorReader::checkGreen() {
  unsigned long pulse;
  
  digitalWrite(s2, HIGH);
  digitalWrite(s3, HIGH);

  pulse = pulseIn(out, LOW, 80000);

  if ( pulse < 0.1) {
    pulse = 80000;  
  }

  return(pulse);
}
Exemple #30
0
// Devuelve distancia en cm
int ultrasonido::distancia()
{
    digitalWrite(_Trig, LOW); // Estabiliza el pulso y apaga el disparador
    delayMicroseconds(5);

    digitalWrite(_Trig, HIGH); // Manda un pulso durante 10 microsegundos
    delayMicroseconds(10);
    digitalWrite(_Trig ,LOW); // Se interrumpe el pulso

    _duracion = pulseIn(_Echo, HIGH); // Cuenta el tiempo que transcurre hasta la recepcion
    _distancia = (_duracion/2)/29.1;	// Factor de converisón para obtener distancia en cm

    return(_distancia);
}