hc-sr04 arduino xbee ---> xbee arduino four digit s7s display

salve a tutti

ho realizzato con molta fatica uno sketch che mi permette di visualizzare(su un four digit s7sd sparkfun) , in pollici o cm la distanza misurata da un hc-sr04 e sono molto soddisfatto anche se il suddetto sketch sembra scritto con la destra da un maiale mancino..
ora sto cercando di avere il display remoto usando gli xbee s1 (li ho scelti perche pensavo che in un futuro fosse possibile visualizzare la distanza su uno smartphone o un tablet, ma credo di essermi sbagliato nell'acquisto).
ho preso un secondo arduino (anche se credo se ne possa fare a meno utilizzando gli in e out dell'xbee), per averne uno per la parte TX e uno per la parte RX.
ho diviso e modificato lo sketch in modo che un arduino legga l'hc-sr04 e invii la misura e l'altro riceva la misura, faccia tutti i calcoli e mostri la distanza sul s7sd.

gli xbee sono settati e riesco diciamo cosi a "chattare" in xctu.

ma quando alimento il tutto, sul display dell'RX vedo solo visualizzato il contenuto della memoria e non la somma tra la memoria e il dato ricevuto dall'xbee

collegando l'xbee rx al pc e aprendo xctu vedo che qualche cosa, che non so interpretare, arriva....

questi gli sketch:

TX
arduino uno
hc-sr04
droids 990.002 v2.0
xbee s1

  #include <SoftwareSerial.h>

  SoftwareSerial XBee(0, 1); // RX, TX
  
  int  val = 0;                 // si userà val per conservare lo stato del pin di input 
  int trigPin = 9;    //Trig - green Jumper
  int echoPin = 8;    //Echo - yellow Jumper
  long duration;

  unsigned long contatore;
  unsigned long contaimpulsi;

void setup() {

  Serial.begin (9600);
  contatore=millis();
  contaimpulsi=0;

   // imposta il pin digitale come input  
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  
  }
 
  void loop() {
    
  // The sensor is triggered by a HIGH pulse of 10 or more microseconds.
  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
  digitalWrite(trigPin, LOW);
  delayMicroseconds(5);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
 
  // Read the signal from the sensor: 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(echoPin, INPUT);
  duration = pulseIn(echoPin, HIGH);
  
    Serial.print (duration); //prova
  
  delay(1000);
  }

e RX

arduino micro
droids 990.002 v2.0
xbee s1
serial four digit seven segment display (sparkfun)

#include <EEPROM.h>

  #include <SoftwareSerial.h>
  SoftwareSerial XBee(0,12); // RX, TX
  SoftwareSerial Serial7Segment(3,1); //RX pin, TX pin
  
  #define BUTTON1 5              // pin di input dove è collegato il pulsante  
  #define BUTTONPIU A4
  #define BUTTONMENO A2
  #define BUTTONSX A5
  
  int  val = 0;                 // si userà val per conservare lo stato del pin di input 
  long durationRX, cm, INCHES, feet, inches;
  int X; 
  int XX;

 void setup() {

  Serial.begin (9600);

  Serial7Segment.begin(9600); //Talk to the Serial7Segment at 9600 bps
  Serial7Segment.write('v'); //Reset the display - this forces the cursor to return to the beginning of the display
  
  //Define inputs and outputs
  
  //pinMode(LED, OUTPUT);       // imposta il pin digitale come output  
  pinMode(BUTTON1, INPUT);      // imposta il pin digitale come input  

    
  X = EEPROM.read(XX);
  
  }
 
  void loop() {
    

  Serial7Segment.write('v'); //Reset the display - this forces the cursor to return to the beginning of the display

  
      if (Serial.available() > 0) {
        durationRX = Serial.read();
  }
  val = digitalRead(BUTTON1);  // legge il valore dell'input e lo conserva 
  
 
  // convert the time into a distance feet e cm
  cm = ((durationRX/2) / 29.1) + X;
  INCHES = ((durationRX/2) / 74) + X; 
  feet = INCHES / 12;
  inches = INCHES% 12; //es x = 7% 5; // X ora contiene 2
  
  
  if (digitalRead(BUTTONPIU) == HIGH)
    {
      (X++);
    }
  
  
  if (digitalRead(BUTTONMENO) == HIGH)
    {
      (X--);
    }
  
  
  if (digitalRead(BUTTONSX) == HIGH)
    {
      EEPROM.write(XX, X); 
  Serial7Segment.write(0x7A);  // Decimal, colon, apostrophe control command
  Serial7Segment.write((byte) 0);
  delay(100);
  Serial7Segment.write(0x7A);  // Decimal, colon, apostrophe control command
  Serial7Segment.write((byte) 255); 
    }

  
  if (val == LOW) {
  
  Serial7Segment.write(0x79);  // Decimal, colon, apostrophe control command
  Serial7Segment.write(0x01);
  Serial7Segment.print(cm);
  
  /*
  Serial.print(cm);
  Serial.print(" cm"); //esegui operazioni A
  Serial.println();
  */
  }
  
  else {

   if (feet >= 10) {
  Serial7Segment.write(0x79);
  Serial7Segment.write(0x79);  
  Serial7Segment.print(feet);
  Serial7Segment.write(0x77);  // Decimal, colon, apostrophe control command
  Serial7Segment.write((byte) 2);  // Turns on colon, apostrophoe, and far-right 
  Serial7Segment.write(0x79);  // Decimal, colon, apostrophe control command
  Serial7Segment.write(0x02);
  Serial7Segment.print(inches);
  }
  
  else {
  Serial7Segment.write(0x79);  // Decimal, colon, apostrophe control command
  Serial7Segment.write(0x01);
  Serial7Segment.print(feet);
  Serial7Segment.write(0x77);  // Decimal, colon, apostrophe control command
  Serial7Segment.write((byte) 2);  // Turns on colon, apostrophoe, and far-right 
  Serial7Segment.write(0x79);  // Decimal, colon, apostrophe control command
  Serial7Segment.write(0x02);
  Serial7Segment.print(inches);
  }
  }
  delay(100);
  }

qualche anima pia che mi prende per mano e mi accompagna su questo sentiero di montagna intrapreso in infradito?!?!

grazie dell'attenzione e dell'eventuale pazienza.

Prima di tutto, nella sezione dove avevi messo il post c'è chiaramente scritto, in grassetto, di non postare nulla ... quindi, per favore, la prossima volta presta più attenzione, poi, essendo questo il tuo primo post, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione) e di leggere con attenzione il REGOLAMENTO ...

... poi, in conformità al suddetto regolamento, punto 13, il cross-posting è proibito (anche tra lingue diverse) e tu hai posto praticamente la stessa domanda nell'area di lingua Inglese, tale domanda duplicata è stata cancellata.

Guglielmo

scusate se non mi ero presentato... qualche suggerimento?

Ma i pin da usare con la SoftwareSerial nei due programmi ... sono stati estratti a sorte ? :astonished:

No perché NON c'è alcuna logica, ad esempio, nell'usare come pin di una seriale virtuale quelli usati dalla ... seriale reale !!!

La SoftwareSerial si usa per creare nuove porte seriali, NON per sovrapporsi a quelle già esistenti ... ::slight_smile:

Puoi dare delle spiegazioni ?

Guglielmo