Duvida Pessoal >,<

Olá pessoal do forum arduino, preciso muito da ajuda de vocês na minha programação.
Estou fazendo uma bengala para cegos, em que nela terá um sensor, quando esse sensor detectar alguma coisa ele ligará um motor vibratorio para alertar o cego que tem alguma coisa na frente dele. quando o objeto nao estiver mais na frente dele o motor deverá parar. O sensor que vou usar é o : “Ping Ultrasonic Range Finder”
Fiz minha programação certinha e talz…
Porem nao sei se está certo, se tiver algum erro me falem por favor?

Programação:

// pinagem do sensor
const int pingPin = 7; // o pino em que eu vou colocar o sensor
const int readPin = 8;
const int buzzPin = 9;
// pinagem do motor vibratorio
const int vibradorPin = 0;

void setup()
{
Serial.begin(9600); //onde tudo começa
//codigo sensor

long microsecondsToCentimeters(long microseconds);

}

void loop() {
long duration, inches, cm, microseconds ;

pinMode(buzzPin, OUTPUT); // dizendo que o sensor ira enviar dados
pinMode(vibradorPin, OUTPUT); //dizendo que o motor tambem ira enviar
pinMode(pingPin, OUTPUT); // As linhas a seguir esta dizendo que o sensor irá enviar a cada 2 microsegundos
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);

pinMode(readPin, INPUT);
// int duration = pulseIn(readPin, HIGH);
//cm = microsecondsToCentimeters(duration);

if (cm<50) { // se cm for menor q tal
pinMode ( vibradorPin, HIGH );
}
}

long microsecondsToCentimeters(long microseconds)
{

return microseconds / 29 / 2 ;

}

Observe as modificações que eu fiz

// pinagem do sensor
const int pingPin = 7; // o pino em que eu vou colocar o sensor
const int readPin = 8;
const int speakerPin = 9; 
const int motorPin = 0; // pinagem do motor vibratorio precisa ser com PWM, o pin 0 nao tem


void setup()
{
 Serial.begin(9600); //onde tudo começa
 //essas definições de pinMode podem ficar aqui
 pinMode(speakerPin, OUTPUT); // dizendo que o sensor ira enviar dados
 ///nao precisa para o motor, vou utilizar o PWM, analogWrite
 //pinMode(motorPin, OUTPUT); //dizendo que o motor tambem ira enviar

 //codigo sensor
 
/// não precisa definir a função dentro do loop
/// long microsecondsToCentimeters(long microseconds);
 
}

void loop() {
 long duration, cm, microseconds ;
 int freq,mtfreq;
 
 pinMode(pingPin, OUTPUT); // As linhas a seguir esta dizendo que o sensor irá enviar a cada 2 microsegundos
 
 digitalWrite(pingPin, LOW);
 
 delayMicroseconds(2);
  
 digitalWrite(pingPin, HIGH);
 
 delayMicroseconds(5);
 
 digitalWrite(pingPin, LOW);
  
 pinMode(readPin, INPUT);
 
 duration = pulseIn(pingPin, HIGH);
 
 cm = microsecondsToCentimeters(duration);
 
 freq = map(cm,DIST_MIN ,DIST_MAX,440,880); // aqui vc precisa setar a dist min e maxima
 
 //eu mapeio para as frequencias de 440 a 880 , vc pode mudar isso tbm
  
 freq = constrain(freq,440,880); //limito  a freq nos valores maximos e minimos
 
 mtfreq = map(cm,DIST_MIN,DIST_MAX,0,255); // agora os valores de vibracao para o motor
 
 mtfreq = constrain(mtfreq,0,255);
 
 analogWrite(motorPin,mtfreq);
 
 playTone(freq,10); //toco um sinal na freq por 10 milisegundos

}
 

 long microsecondsToCentimeters(long microseconds)
{

 return microseconds / 29 / 2 ;
   
}

void playTone(int tone, int duration) {
  for (long i = 0; i < duration * 1000L; i += tone * 2) {
    digitalWrite(speakerPin, HIGH);
    delayMicroseconds(tone);
    digitalWrite(speakerPin, LOW);
    delayMicroseconds(tone);
  }
}

antes de tudo obrigado pelo ajuda... soh nao entendi muito bem, como colocar a distancia...

Esses 440, 880 seria a distancia minima e maxima em centimetros??

E gostei da ideia do som, porem acho q nao é viavel agora para mim, pois seria meio dificil para um cego ouvir o som em certos lugares...

E outra coisa, nao entendi muito bem como colocar o motor, se puder me esplicar melhor, ou quem sabe, fazer um pequeno esboço no paint sei lá seria de muito agrado....

se puder tirar essa minha duvida eu agradeço ^^

Obs: a minha que eu fiz está muito errada?? Obs²: aqui ta dizendo que o Dist_Min nao foi declarado, se puder solucionar tambem ^^

Obrigado a todos que estao lendo sou meio leigo nessas coisas de programação, entao desculpe qualquer pergunta "idiota"

você sabe o que a função map faz?

map( valor , x1,y1, x2, y2)

a função map pega a varíavel valor que esta no intervalo ** x1 e y1** e leva para o intervalo x2 e y2 ,é como uma regra de 3.
No caso da frequência ,
freq = map(cm,DIST_MIN ,DIST_MAX,440,880);
eu peguei a variável da distância cm que esta em um intervalo que você vai definir e vou levar ela para um intervalo que será a frequencia da buzzer que eu quero que esteja entre 440 hertz e 880 hertz (440 Hz é nota Lá pura),
Você deve substituir DIST_MIN e DIST_MAX pelo valo que te interessa.
para isso , antes de fazer essas transformações faça uma leitura do sensor de distância assim

// pinagem do sensor
const int pingPin = 7; // o pino em que eu vou colocar o sensor
const int readPin = 8;
const int speakerPin = 9;
const int motorPin = 0; // pinagem do motor vibratorio precisa ser com PWM, o pin 0 nao tem


void setup()
{
 Serial.begin(9600); //onde tudo começa
 //essas definições de pinMode podem ficar aqui
 pinMode(speakerPin, OUTPUT); // dizendo que o sensor ira enviar dados
 ///nao precisa para o motor, vou utilizar o PWM, analogWrite
 //pinMode(motorPin, OUTPUT); //dizendo que o motor tambem ira enviar

 //codigo sensor

/// não precisa definir a função dentro do loop
/// long microsecondsToCentimeters(long microseconds);

}

void loop() {
 long duration, cm, microseconds ;
 int freq,mtfreq;

 pinMode(pingPin, OUTPUT); // As linhas a seguir esta dizendo que o sensor irá enviar a cada 2 microsegundos

 digitalWrite(pingPin, LOW);

 delayMicroseconds(2);
  
 digitalWrite(pingPin, HIGH);

 delayMicroseconds(5);

 digitalWrite(pingPin, LOW);
  
 pinMode(readPin, INPUT);

 duration = pulseIn(pingPin, HIGH);

 cm = microsecondsToCentimeters(duration);
 Serial.print("Distancia em cm: ");
 Serial.println(cm);
 delay(100);

 ///freq = map(cm,DIST_MIN ,DIST_MAX,440,880); // aqui vc precisa setar a dist min e maxima

 //eu mapeio para as frequencias de 440 a 880 , vc pode mudar isso tbm
  
 ///freq = constrain(freq,440,880); //limito  a freq nos valores maximos e minimos

 ///mtfreq = map(cm,DIST_MIN,DIST_MAX,0,255); // agora os valores de vibracao para o motor

 ///mtfreq = constrain(mtfreq,0,255);

 ///analogWrite(motorPin,mtfreq);

 ///playTone(freq,10); //toco um sinal na freq por 10 milisegundos

}


 long microsecondsToCentimeters(long microseconds)
{

 return microseconds / 29 / 2 ;
  
}

Opa Vlw ae cara... desculpa a demora para responder, é porque eu estava aprendendo a função MAP... Para que ela servia e talz... Vlw agora vo começar a fazer os testes e talz... Se mais alguem quiser dar opinião, ou quem saber me ajudar a melhorar a programação agradeço muito...

Obrigados a todos que leram esse meu topico, e aquele que me respondeu, pois me ajudou muito....

Obrigado denovo a todos, flws ;)