-
-
Save mskf1383/dcf260b96f09312afe41d3e80a2ae3b8 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // import libraries | |
| #include <Servo.h> // Michael Margolis, Arduino | |
| #include <TM1637Display.h> // TM1637 by Avishay Orpaz | |
| // set pins | |
| #define clkPin 2 | |
| #define dioPin 3 | |
| #define triggerPin 7 | |
| #define echoPin 8 | |
| #define servoPin 9 | |
| #define piezoPin 10 | |
| // define objects | |
| Servo baseMotor; | |
| TM1637Display monitor(clkPin, dioPin); | |
| // define variables | |
| int angle; | |
| long duration; | |
| int distance[19] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; | |
| int newDistance; | |
| void setup() { | |
| // setup serial | |
| Serial.begin(9600); | |
| // setup monitor | |
| monitor.setBrightness(7); | |
| monitor.clear(); | |
| //setup servo | |
| baseMotor.attach(servoPin); | |
| // setup ultrasonic | |
| pinMode(triggerPin, OUTPUT); | |
| pinMode(echoPin, INPUT); | |
| // setup piezo | |
| pinMode(piezoPin, INPUT); | |
| // setup environment | |
| for (angle = 0; angle <= 180; angle += 10) { | |
| // set angle | |
| baseMotor.write(angle); | |
| delay(1000); | |
| // get distance | |
| distance[angle/10] = getDistance(); | |
| } | |
| // print distances | |
| Serial.print("{"); | |
| Serial.print(distance[0]); Serial.print(", "); | |
| Serial.print(distance[1]); Serial.print(", "); | |
| Serial.print(distance[2]); Serial.print(", "); | |
| Serial.print(distance[3]); Serial.print(", "); | |
| Serial.print(distance[4]); Serial.print(", "); | |
| Serial.print(distance[5]); Serial.print(", "); | |
| Serial.print(distance[6]); Serial.print(", "); | |
| Serial.print(distance[7]); Serial.print(", "); | |
| Serial.print(distance[8]); Serial.print(", "); | |
| Serial.print(distance[9]); Serial.print(", "); | |
| Serial.print(distance[10]); Serial.print(", "); | |
| Serial.print(distance[11]); Serial.print(", "); | |
| Serial.print(distance[12]); Serial.print(", "); | |
| Serial.print(distance[13]); Serial.print(", "); | |
| Serial.print(distance[14]); Serial.print(", "); | |
| Serial.print(distance[15]); Serial.print(", "); | |
| Serial.print(distance[16]); Serial.print(", "); | |
| Serial.print(distance[17]); | |
| Serial.println("}\n"); | |
| } | |
| void loop() { | |
| for (angle = 180; angle > 0; angle -= 10) { | |
| // set angle | |
| baseMotor.write(angle); | |
| delay(1000); | |
| noTone(piezoPin); | |
| monitor.clear(); | |
| // get distance | |
| newDistance = getDistance(); | |
| // check | |
| if (newDistance < distance[angle/10] - 5){ | |
| warn(); | |
| } | |
| } | |
| for (angle = 0; angle < 180; angle += 10) { | |
| // set angle | |
| baseMotor.write(angle); | |
| delay(1000); | |
| noTone(piezoPin); | |
| monitor.clear(); | |
| // get distance | |
| newDistance = getDistance(); | |
| // check | |
| if (newDistance < distance[angle/10] - 5){ | |
| warn(); | |
| } | |
| } | |
| } | |
| int getDistance() { | |
| // reset ulterasonic | |
| digitalWrite(triggerPin, LOW); | |
| delayMicroseconds(2); | |
| // send signal | |
| digitalWrite(triggerPin, HIGH); | |
| delayMicroseconds(10); | |
| digitalWrite(triggerPin, LOW); | |
| // recive signal | |
| duration = pulseIn(echoPin, HIGH); | |
| // calculate distance | |
| return duration*0.034/2; | |
| } | |
| void warn() { | |
| // print in serial | |
| Serial.print(" --Angle "); | |
| Serial.print(angle); | |
| Serial.print("-- Unwanted object in "); | |
| Serial.print(newDistance); | |
| Serial.println("cm!"); | |
| // play sound | |
| tone(piezoPin, 1000); | |
| // show in monitor | |
| monitor.showNumberDec(newDistance, false); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment