Sensore ultrasuoni su pin 14-15

Salve a tutti, devo configurare la lettura di 1 sensore Ultrasuoni (cosa assai banale) però avendo terminato i pin da 0 a 13 su arduino mega, pensavo di collegarlo tipo ai pin 15-16.....ma non funziona.... cosa devo cambiare nel seguente codice?

#include <Servo.h>
Servo myservo;  // create servo object to control a servo
#define servoPin 2 //~
const int pinTrigger = 15;
const int pinEcho    = 14;

int angle =100;    // initial angle  for servo
int angleStep =50;
const int minAngle = 100;
const int maxAngle = 170;

void setup() {
  Serial.begin(9600);
  myservo.attach(servoPin);  // attaches the servo on pin 3 to the servo object
  myservo.write(angle);
  pinMode(pinTrigger, OUTPUT);
  pinMode(pinEcho, INPUT);
  Serial.print( "Setto l'angolo: ");
  Serial.print(angle);
}
 
void loop() { 
  // imposta l'uscita del trigger LOW
  digitalWrite(pinTrigger, LOW);
  // imposta l'uscita del trigger HIGH per 10 microsecondi
  digitalWrite(pinTrigger, HIGH);
  delayMicroseconds(10);
  digitalWrite(pinTrigger, LOW);
  // calcolo del tempo attraverso il pin di echo
  long durata = pulseIn(pinEcho, HIGH);
  long distanza = durata/58.31;
Serial.print("Distanza: ");
Serial.print(distanza);
   if(distanza <= 30){
    // change the angle for next time through the loop:
      angle = 170;
      myservo.write(angle); // move the servo to desired angle
      Serial.print("Moved to: ");
      Serial.print(angle);   // print the angle
      Serial.println(" degree");    
  delay(1); // waits for the servo to get there
   } else {
     // change the angle for next time through the loop:
      angle = 100;
      myservo.write(angle); // move the servo to desired angle
      Serial.print("Moved to: ");
      Serial.print(angle);   // print the angle
      Serial.println(" degree");    
  delay(1);
    
    }
    // Aspetta 1000 microsecondi prima di generare l'impulso successivo
    delay(1000);
}

Fai riferimento a questo pdf: mega.pdf (1.9 MB) quelli che sono indicati come 14 e 15 sono riconosciuti con una differente numerazione (in viola la numerazione riconosciura dal IDE) ...

#define PIN_A0   (54)
#define PIN_A1   (55)
#define PIN_A2   (56)
#define PIN_A3   (57)
#define PIN_A4   (58)
#define PIN_A5   (59)
#define PIN_A6   (60)
#define PIN_A7   (61)
#define PIN_A8   (62)
#define PIN_A9   (63)
#define PIN_A10  (64)
#define PIN_A11  (65)
#define PIN_A12  (66)
#define PIN_A13  (67)
#define PIN_A14  (68)
#define PIN_A15  (69)

... quindi, tu prova a mettere PIN_A14 e PIN_A15 al posto di 14 e 15 e vedi se va.

Guglielmo

Grazie si, risolto!
Una cosa, utilizzo questo codice per far girare la base di un braccio robot al rilevamento di una persona:

  if (rightIRSensorValue == 1 && leftIRSensorValue == 0 )
  { if (distanza >= MIN_DISTANCE && distanza <= MAX_DISTANCE) {
      motoreY.setSpeed(-5000);
      motoreY.setAcceleration(10);
      motoreY.run();
    }
  }
  else if (rightIRSensorValue == 0 && leftIRSensorValue == 1 )
  { if (distanza >= MIN_DISTANCE && distanza <= MAX_DISTANCE) {
      motoreY.setSpeed(5000);
      motoreY.setAcceleration(10);
      motoreY.run();
    }
  } else {
    //motoreY.stop();
  }

In pratica con un sensore ultrasuoni al centro e due IR ai lati, però gli IR non sono molto precisi, e per lo più devi avvicinarti molto.... cosa potreu utilizzare?

... degli IR con maggiore portata e precisione, come quelli per i piccoli LIDAR, QUESTO è uno (arriva a 10mt), QUESTO è un'altro (arriva a 40mt) ... certo, costano una discreta somma, ma magari, cercando in giro, ne trovi anche di più economici.

Guglielmo

Ed invece un sensore pir?!

Non ti da la distanza.

Guglielmo

A me non serve che dia la distanza: i sensori IR ai lati indicano se la persona sta a destra o a sinistra del braccio robot, in base a quello fanno ruotare verso la persona il braccio. Quando si è ruotato verso l persona il sensore ultrasuoni dice che è vicino e quindi interrompe il movimento. I sensori IR per rilevano oggeti a breve distanza (troppo breve)!