#include // this constant won't change. It's the pin number of the sensor's output: const int pingPin = 0; String msg = ""; void setup() { // initialize serial communication: Serial.begin(9600); delay(5000); } long distance(){ // establish variables for duration of the ping, and the distance result // in inches and centimeters: long duration, inches, cm; // The PING))) is triggered by a HIGH pulse of 2 or more microseconds. // Give a short LOW pulse beforehand to ensure a clean HIGH pulse: pinMode(pingPin, OUTPUT); digitalWrite(pingPin, LOW); delayMicroseconds(2); digitalWrite(pingPin, HIGH); delayMicroseconds(5); digitalWrite(pingPin, LOW); // The same pin is used to read the signal from the PING))): a HIGH pulse // whose duration is the time (in microseconds) from the sending of the ping // to the reception of its echo off of an object. pinMode(pingPin, INPUT); duration = pulseIn(pingPin, HIGH); // convert the time into a distance inches = microsecondsToInches(duration); cm= microsecondsToCentimeters(duration); // Serial.print(cm); // Serial.print(" cm. "); //Serial.println(); return inches; } void loop() { long d = distance(); Serial.println(d); piano(d); //Serial.print(distance2text(d)); //Serial.println(); // if(msg.length()>20){ // Serial.println(msg); // msg=""; // } delay(100); } long microsecondsToInches(long microseconds) { // According to Parallax's datasheet for the PING))), there are 73.746 // microseconds per inch (i.e. sound travels at 1130 feet per second). // This gives the distance travelled by the ping, outbound and return, // so we divide by 2 to get the distance of the obstacle. // See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf return microseconds / 74 / 2; } long microsecondsToCentimeters(long microseconds) { // The speed of sound is 340 m/s or 29 microseconds per centimeter. // The ping travels out and back, so to find the distance of the object we // take half of the distance travelled. return microseconds / 29 / 2; } String distance2text(long cm){ if (cm < 28){ switch(cm){ case 0 : msg+="\n"; break; case 1 : msg+="A"; break; case 2 : msg+="B"; break; case 3 : msg+="C"; break; case 4 : msg+="D"; break; case 5 : msg+="E"; break; case 6 : msg+="F"; break; case 7 : msg+="G"; break; case 8 : msg+="H"; break; case 9 : msg+="I"; break; case 10 : msg+="J"; break; case 11 : msg+="K"; break; case 12 : msg+="L"; break; case 13 : msg+="M"; break; case 14 : msg+="N"; break; case 15 : msg+="O"; break; case 16 : msg+="P"; break; case 17 : msg+="Q"; break; case 18 : msg+="R"; break; case 19 : msg+="S"; break; case 20 : msg+="T"; break; case 21 : msg+="U"; break; case 22 : msg+="V"; break; case 23 : msg+="W"; break; case 24 : msg+="X"; break; case 25 : msg+="Y"; break; case 26 : msg+="Z"; break; case 27 : msg+="\n"; break; defualt: Serial.print(" "); } } return msg; } String piano(long inches){ //wetyu asdfghjk if (inches < 13){ int n = 100; switch(inches){ case 0 : Keyboard.press(KEY_W); delay(n); Keyboard.release(KEY_W); break; case 1 : Keyboard.press(KEY_E); delay(n); Keyboard.release(KEY_E); break; case 2 : Keyboard.press(KEY_T); delay(n); Keyboard.release(KEY_T); break; case 3 : Keyboard.press(KEY_Y); delay(n); Keyboard.release(KEY_Y); break; case 4 : Keyboard.press(KEY_U); delay(n); Keyboard.release(KEY_U); break; case 5 : Keyboard.press(KEY_A); delay(n); Keyboard.release(KEY_A); break; case 6 : Keyboard.press(KEY_S); delay(n); Keyboard.release(KEY_S); break; case 7 : Keyboard.press(KEY_D); delay(n); Keyboard.release(KEY_D); break; case 8 : Keyboard.press(KEY_F); delay(n); Keyboard.release(KEY_F); break; case 9 : Keyboard.press(KEY_G); delay(n); Keyboard.release(KEY_G); break; case 10 : Keyboard.press(KEY_H); delay(n); Keyboard.release(KEY_H); break; Keyboard.press(KEY_J); delay(n); Keyboard.release(KEY_J); break; case 12 : Keyboard.press(KEY_K); delay(n); Keyboard.release(KEY_K); break; default: Serial.print(" "); } }else{ ; } }