Ultragarsinis atstumo matuoklis (HC-SR04) Veikia aido principu. Paleidžia 20 mikrosekundžių (1/1 000 000 sekundės dalis) ultragarso impulsą ir klausosi kol išgirs aidą. Tada išmatuoja kiek praėjo laiko kol išgirdo aidą ir tada suskaičiuoja atstumą. 1 cm garsas pirmyn atgal keliauja 58 mikrosekundes. {{:raspberrypi:wiringpi:pasted:20170209-081634.png}} #include #include #include /* gcc -Wall -o ultra ultra.c -lwiringPi -std=c11 sudo ./ultra */ const int TRIG = 12; //pin for trigering sound const int ECHO = 16; //pin for listening for echo void setup() { //wiringPiSetup(); wiringPiSetupGpio(); pinMode(TRIG, OUTPUT); pinMode(ECHO, INPUT); //TRIG pin must start LOW digitalWrite(TRIG, LOW); delay(100); } long travelTime2; double getCM() { //Send trig pulse digitalWrite(TRIG, HIGH); delayMicroseconds(20); digitalWrite(TRIG, LOW); //Wait for echo start while(digitalRead(ECHO) == LOW); //Wait for echo end long startTime = micros(); while(digitalRead(ECHO) == HIGH); long travelTime = micros() - startTime; travelTime2 = travelTime; double distance = travelTime / 58.0; //Get distance in cm return distance; } int main(void) { printf("Hit Ctrl+c to stop\n"); setup(); while (1) { printf("Distance: %4.0fcm, Travel Time: %6d microseconds \r", getCM(), (int)travelTime2); fflush(stdout); } return 0; } Demonstracija kaip veikia gyvai: {{ :raspberrypi:wiringpi:20170209_094833_x264.mp4 |}}