Problema con la programmazione ad oggetti.

Salve ragazzi, ieri ho provato a cimentarmi per la prima volta nella programmazione ad oggetti con Arduino. Vorrei creare un oggetto per il sensore ad ultrasuoni, con una funzione che mi ritorni la distanza. Il problema è che non riesco a memorizzare valori nelle variabili, ho provato a mettere dei messaggi seriali ed ho notato che proprio non mi registra niente. Il codice all'interno della funzione è un programma esempio che compilato a parte funziona benissimo. Grazie mille in anticipo XD, di seguito il codice:

class Ultrasuoni{
public:
  //Costruttore
  Ultrasuoni(int,int);
  void distance();
  
private:
  int echo;
  int trigger;


};

Ultrasuoni::Ultrasuoni(int echo1,int trigger1){
  echo = echo1;
  trigger = trigger1;
  Serial.print("Echo: ");
  Serial.println(echo);
  Serial.print("Trigger: ");
  Serial.println(trigger);
}

void Ultrasuoni::distance(){
  digitalWrite( trigger, LOW );

  digitalWrite( trigger, HIGH );
  delayMicroseconds( 10 );
  digitalWrite( trigger, LOW );
  
  long duration = pulseIn( echo, HIGH );

  long r = 0.034 * duration / 2;

  Serial.print( "durata: " );
  Serial.print( duration );
  Serial.print( " , " );
  Serial.print( "distanza: " );

  if( duration > 6000 ) Serial.println( "fuori portata");
  else { 
    Serial.print( r ); 
    Serial.println( "cm" );
  }

}


Ultrasuoni Sensore1(24,22);

void setup() {
  Serial.begin(9600);
}

void loop() {

  Sensore1.distance();

}

Prova con this->

--> Il puntatore this | Guida C++ | Programmazione HTML.it

Guarda anche questa lezione e le successive...
--> Classi in C++, definizione e implementazione | HTML.it

Scusa, ma il tuo problema è che non visualizza questi?

  Serial.print("Echo: ");
  Serial.println(echo);
  Serial.print("Trigger: ");
  Serial.println(trigger);

La Serial.begin(9600); viene eseguita nel setup() ovvero avviene dopo la creazione dell'oggetto.
Prova a mettere così e vedrai che funziona:

 Serial.begin(9600);  
  Serial.print("Echo: ");
  Serial.println(echo);
  Serial.print("Trigger: ");
  Serial.println(trigger);

PaoloP:
Mettendo this-> non funziona perchè le variabili sono dichiarate nel metodo non nella classe, ho provato a dichiararle nella classe ma ancora niente.

nid96ita:
Il mio problema non è quello, le variabili echo e trigger le legge perfettamente, il problema è che non riesco a registrare valori dentro le variabili "duration" e "r" che restano sempre a 0.

Errore stupidissimo!!!! Non avevo direzionato le porte D: Bastavano due righe nel costruttore dell'oggetto :sweat_smile:

arma96:
nid96ita:
Il mio problema non è quello, le variabili echo e trigger le legge perfettamente, il problema è che non riesco a registrare valori dentro le variabili "duration" e "r" che restano sempre a 0.

Beh, allora a cosa servono quelle istruzioni se non stampano nulla nel monitor seriale ?