#include "LedControl.h" #define echoPin 9 #define trigPin 8 #define outPin 13 LedControl lc=LedControl(12,11,10,1); int mindistance; //минимальное расстояние до датчика int dist; //текущее расстояние до датчика unsigned long mintime,maxtime,currenttime; //время прохождения минимальной точки, максимальной точки и текущее время int dir,lastdir; //направление движения int count; void setup() { pinMode(trigPin, OUTPUT); pinMode(outPin, OUTPUT); pinMode(echoPin, INPUT); mindistance=10000; //100 м count=0; // Initialize the MAX7219 device lc.shutdown(0,false); // Enable display lc.setIntensity(0,15); // Set brightness level (0 is min, 15 is max) lc.clearDisplay(0); // Clear display register lc.setDigit(0,0,0,false); } void writenumber(int count) { int dig=0; while (count>0) { lc.setDigit(0,dig,count%10,false); } } int getdistance() { int duration, cm; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); return duration / 58; } void podtyag() { currenttime=millis(); //запоминаем текущее время dist=getdistance(); //измеряем расстояние lastdir=dir; if (dist(mindistance+15)) //достигли нижней точки спуска { if (dir=1) maxtime=currenttime; dir=0; } if ((dir!=lastdir)&&((mintime-maxtime)>500)) //поднялись и время подъема больше 0,5 сек { count++; } if ((currenttime-maxtime)>60000) count=0; //Минуту ничего не происходило if (count>=5) { digitalWrite(outPin,HIGH); delay(200); digitalWrite(outPin,LOW); } } void loop() { podtyag(); writenumber(count); delay(100); }