neděle 26. března 2017

Ultrazvukový senzor podruhé

Tentokrát s přerušením


#define ECHOPIN 2 // Echo pin z HC-SC04 na pin 2
#define TRIGPIN 10 // Trig pin z HC-SC04 na pin 5

float distance = 0.0;

static unsigned long startTime;
static unsigned long pulseWidth;

void EchoPinISR() 
{    
    if (digitalRead(2)) // Gone HIGH
        startTime = micros();
    else{  // Gone LOW
        pulseWidth = micros() - startTime;
        distance = pulseWidth * 0.017315f;
    }
}

void setup()
{
  //Nastaví sériovou komunikaci
  Serial.begin(9600);

  //Nastaví pin 2 jako vstupní
  pinMode(ECHOPIN, INPUT);
  attachInterrupt(digitalPinToInterrupt(ECHOPIN), EchoPinISR, CHANGE);

  //Nastaví pin 5 jako výstupní
  pinMode(TRIGPIN, OUTPUT);
}

void trig()
{
    // Vyšle impuls do modulu HC-SR04
    digitalWrite(TRIGPIN, LOW);
    delayMicroseconds(2);
    digitalWrite(TRIGPIN, HIGH);
    delayMicroseconds(10);
    digitalWrite(TRIGPIN, LOW);
}

  int lastPing=0;
  
void loop()
{
  if (lastPing+20 < millis())
  {
    lastPing = millis();
    trig();
  }
   

    //delay(12); // 4m čekání
    if (distance < 1000)
    {
      // odešle informace na sérivý port
      Serial.println(distance); // pro zobrazení na plotru
    }else
    {
      // ERROR
    }
    
}

Zdroj: 
http://forum.arduino.cc/index.php?topic=283086.0

Žádné komentáře:

Okomentovat