Datasheets:
PING datasheet
SERVO datasheet
Circuit:

Demo:
Code "Servo Set UP":
#includeServo CRservo; const int halt = 90; void setup(){ CRservo.attach(7); } void loop(){ CRservo.write(halt); delay(2); }
Code "Servo CR":
#includeServo CRservo; const int halt = 90; void setup(){ CRservo.attach(7); } void loop(){ CRservo.write(halt+20); delay(500); CRservo.write(halt-20); delay(500); CRservo.write(halt); delay(2000); }
Code "PING":
const int pingPin = 9;
void setup() {
Serial.begin(9600);
}
void loop(){
Serial.println(ping());
delay(100);
}
int ping(){
long duration, cm;
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);
pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);
cm = microsecondsToCentimeters(duration);
Serial.print(cm);
Serial.print("cm");
Serial.println();
return cm;
}
long microsecondsToCentimeters(long microseconds){
return microseconds / 29 / 2;
}
Code "Servo and PING":
#includeServo CRservo; const int halt = 90; const int pingPin = 9; void setup() { CRservo.attach(7); Serial.begin(9600); } void loop(){ if(ping() < 20) { CRservo.write(halt+20); delay(500); CRservo.write(halt-20); } else { CRservo.write(halt); } } int ping(){ long duration, cm; pinMode(pingPin, OUTPUT); digitalWrite(pingPin, LOW); delayMicroseconds(2); digitalWrite(pingPin, HIGH); delayMicroseconds(5); digitalWrite(pingPin, LOW); pinMode(pingPin, INPUT); duration = pulseIn(pingPin, HIGH); cm = microsecondsToCentimeters(duration); Serial.print(cm); Serial.print("cm"); Serial.println(); return cm; } long microsecondsToCentimeters(long microseconds){ return microseconds / 29 / 2; }