#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