Problema con il sensore ad ultrasuoni+servo

Salve, ultimamente sto lavorando a un progetto: "I sensori di vicinanza+ il Sonar" (2 sensori ad ultrasuoni+ un servo su cui è montato un sensore ad ultrasuoni) però mi sono imbattuto in questo errore stupido, penso che sia sbagliato qualcosa con le parentesi e le loro posizioni, ma poiché sono alle prime armi con Arduino, sarei molto grato se qualcuno saprebbe aiutarmi. Ecco il codice:

 //Security Alarm with Ultrasonic Sensor

//Led
#define BLUE 13
#define RED1 7
#define RED2 4


//Active buzzer
#define buzzer1 2
#define buzzer2 8

//Servomotore
#include<Servo.h>.
Servo myServo;

//Sensore 1
#define trigPin1 6
#define echoPin1 5

//Sensore 2
#define trigPin2 11
#define echoPin2 10

//Sensore 3
const int trigPin3 = 9;
const int echoPin3 = 3;

long duration;
int distance;
float new_delay;


void setup()
{
  //Sensore 1
  Serial.begin (9600);
  pinMode(trigPin1, OUTPUT);
  pinMode(echoPin1, INPUT);
  pinMode(buzzer1, OUTPUT);
  pinMode(buzzer2, OUTPUT);
  pinMode(BLUE, OUTPUT);
  pinMode(RED1, OUTPUT);
  pinMode(RED2, OUTPUT);

  //Sensore 2
  Serial.begin (9600);
  pinMode(trigPin2, OUTPUT);
  pinMode(echoPin2, INPUT);
  pinMode(buzzer1, OUTPUT);
  pinMode(buzzer2, OUTPUT);
  pinMode(BLUE, OUTPUT);
  pinMode(RED1, OUTPUT);
  pinMode(RED2, OUTPUT);
  
  //Sensore 3
  Serial.begin (9600);
  pinMode(trigPin3, OUTPUT);
  pinMode(echoPin3, INPUT);
  pinMode(buzzer1, OUTPUT);
  pinMode(buzzer2, OUTPUT);
  pinMode(BLUE, OUTPUT);
  pinMode(RED1, OUTPUT);
  pinMode(RED2, OUTPUT);
  myServo.attach(12);
}

void loop()
{
  //Rotazione del Servomotore
  for(int i=15;i<=165;i++){
  myServo.write(i);
  delay(30);
  distance = calculateDistance();

  Serial.print(i);
  Serial.print(","); 
  Serial.print(distance);
  Serial.print(".");
  }
  //Rotazione del servomotore (modificabile)
  for(int i=165;i>=15;i--){
  myServo.write(i);
  delay(30);
  distance = calculateDistance();
  Serial.print(i);
  Serial.print(",");
  Serial.print(distance);
  Serial.print(".");
  }
  //Sensore 1
  long duration, distance;
  digitalWrite(trigPin1, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin1, HIGH);
  delayMicroseconds(100);
  digitalWrite(trigPin1, LOW);
  duration = pulseIn(echoPin1, HIGH, 100);
  distance = (duration / 2) / 29.1;
  new_delay = (distance * 3) + 3;
  Serial.print(distance);
  Serial.println("  cm");
  if (distance < 1179)
  { digitalWrite(buzzer1, HIGH);
    digitalWrite(buzzer2, HIGH);
    digitalWrite(BLUE, LOW);
    digitalWrite(RED1, HIGH);
    digitalWrite(RED2, HIGH);
    delay(new_delay);
    digitalWrite(buzzer1, LOW);
    digitalWrite(buzzer2, LOW);
    digitalWrite(RED1, HIGH);
    digitalWrite(RED2, HIGH);
  }

  //Sensore 2
  long duration, distance;
  digitalWrite(trigPin2, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin2, HIGH);
  delayMicroseconds(100);
  digitalWrite(trigPin2, LOW);
  duration = pulseIn(echoPin2, HIGH);
  distance = (duration / 2) / 29.1;
  new_delay = (distance * 3) + 3;
  Serial.print(distance);
  Serial.println("  cm");
  if (distance < 1179)
  { digitalWrite(buzzer1, HIGH);
    digitalWrite(buzzer2, HIGH);
    digitalWrite(BLUE, LOW);
    digitalWrite(RED1, HIGH);
    digitalWrite(RED2, HIGH);
    delay(new_delay);
    digitalWrite(buzzer1, LOW);
    digitalWrite(buzzer2, LOW);
    digitalWrite(RED1, HIGH);
    digitalWrite(RED2, HIGH);
  }
  
  //Sensore 3
  long duration, distance;
  digitalWrite(trigPin3, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin3, HIGH);
  delayMicroseconds(100);
  digitalWrite(trigPin3, LOW);
  duration = pulseIn(echoPin3, HIGH);
  distance = (duration / 2) / 29.1;
  new_delay = (distance * 3) + 3;
  Serial.print(distance);
  Serial.println("  cm");
  if (distance < 1179)
  {
    digitalWrite(buzzer1, HIGH);
    digitalWrite(buzzer2, HIGH);
    digitalWrite(BLUE, LOW);
    digitalWrite(RED1, HIGH);
    digitalWrite(RED2, HIGH);
    delay(new_delay);
    digitalWrite(buzzer1, LOW);
    digitalWrite(buzzer2, LOW);
    digitalWrite(RED1, HIGH);
    digitalWrite(RED2, HIGH);
  }

    else
    {
      digitalWrite(buzzer1, LOW);
      digitalWrite(buzzer2, LOW);
      digitalWrite(BLUE, HIGH);
      digitalWrite(RED1, LOW);
      digitalWrite(RED2, LOW);
    }

  delay(200);
}
int calculateDistance(){

  digitalWrite(trigPin3, LOW); 
  delayMicroseconds(2);
  digitalWrite(trigPin3, HIGH); 
  delayMicroseconds(10);
  digitalWrite(trigPin3, LOW);
  duration = pulseIn(echoPin3, HIGH);
  distance= duration*0.034/2;
  return distance;
}

Il problema me lo segna alla riga = //Sensore 3 long duration, distance;
Ed ecco il messaggio di errore: "exit status 1
redeclaration of 'long int duration' "
Perfavore, se qualcuno sa come risolvere questo problema, ne sarei molto grato.
Grazie.

Ogni nome di variabile o funzione o altro per il compilatore è un identificatore. All'interno {} può esistere un solo identificatore. Il messaggio di errore: re-dichiarazione di long int duration.
Quindi dichiari long duration una sola volta e usi l'identificatore duration tutte le volte che vuoi.

Detto in altri termini non puoi dichiarare due variabili con lo stesso nome.

PS: Cerca nel tuo IDE il comando per formattare il codice. Ad esempio con arduino-ide-1.8.19 premi CTRL+T e il codice diventa più leggibile.

Ciao.

Hai dichiarato quelle 2 variabili come globali subito prima del setup(). E poi le hai dichiarate altre 3 volte dentro il loop().

long duration, distance 

Questa riga è una dichiarazione. Togli o commenta queste 3 righe.

@mauro_pagliato: Buongiorno e benvenuto nella sezione Italiana del forum,

cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento (punto 16.7), fai la tua presentazione NELL'APPOSITA DISCUSSIONE spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.

Grazie,

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto. :wink:

@Maurotec @fratt : Mauro, Fratt ... la prendiamo l'abitudine di controllare le presentazioni prima di rispondere? :angry:

Grazie.

Guglielmo

Ho capito, grazie. Mi presento, sono mauro pagliato ingegnere elettronico, ultimamente mi sono appassionato di arduino e di tutte le case che ci puoi fare. Ma non sono molto esperto (ad usarlo), spero di essermi presentato sufficientemente. Grazie ancora

Con quella linea e la stessa negli altri due sensori, stai ridefinendo le variabili duratione distance, già definito come globale prima dell'setup:

long duration;
int distance;

Elimina quelle tre righe.

Saluti:
E. González.

@mauro_pagliato: ... emmm ... ma lo hai letto CON ATTENZIONE il mio post?

La presentazione va fatta "NELL'APPOSITA DISCUSSIONE spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati".

Farla qui non serve a nulla ... chi vuole sapere la tua esperienza con Arduino la va a cecare nel thread delle presentazioni ... perché questa discussione, nell'arco di poche settimane, scomparirà sommersa dalle altre ... :roll_eyes:

Grazie,

Guglielmo

Fatto, grazie. Buon proseguimento di serata.

Il problema con quella linea e cosa ti succede anche negli altri due sensori:

 long duration, distance;

In esso ridefinisci come locali (da utilizzare all'interno del loop) due variabili che hai precedentemente definito come globali prima dell'setup, (da utilizzare in tutto il codice).

long duration;
int distance;

O in un modo o nell'altro.

@mauro_pagliato: Grazie, scorri la discussione dall'inizio che ci sono risposte precedenti con alcune indicazioni che potrebbero sfuggirti :wink:

Guglielmo

Grazie mille a tutti, problema risolto. Siete stati molto gentili!
Grazie. :slightly_smiling_face:

Mauro

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.