informazioni su trasmissione e ricezione

Buongiorno!
Ho bisogno di un grande aiutod i teoria. ho delle lacune immense e proprio non arrivo a capire.
Il moi progetto é questo.
Fin’ora trasmetto attraverso fibre ottiche un segnale a frequenza fissa.
Che faccio, prima lo leggo attraverso analog write, poi scrivo auesto messaggio nel pin 3 di arduino nano cosi che me lo modula con una PWM.
passa attraverso la fibra ottica (naturalmente nel pin 3 c’é un LED) e arriva dall’altra parte dove il ricevitore (fotodiodo) lo legge e attraverso pulse in trovo dutycycle, risqlgo alla amplitude e alla frequenza e ho di nuovo il moi bel segnale analogico dopo averlo passato in un dac a 8bit.
Sin qui tutto bene.

Solo che io vorrei trasmettere tre segnali diversi.
Cioé vorrei leggere A0 inserirlo nel pin 3 per inviarlo, poi subito dopo A1 inserirlo nel pin 3 e inviarlo e infine A2 inserirlo nel pin 3 ed inviarlo.
Dall’altra parte il ricevitore deve capire in qualche modo se il segnale viene dq A0, A1, o A2.

Ho pensato di mandare con un altra fibra una serie di alti e bassi. in questo modo.

incomingSignal = analogRead(A0) >> 2;//get new value from A0
        byte sequenza[] = { 0, 0, 1,};
        if (millis() > 0.02)
        {
          digitalWrite(7, LOW); //Start transmission
          for (int i = 0; i < 4; i++)

          {
            digitalWrite(7, sequenza[i]);
          }
        }
        analogWrite(3, incomingSignal); //assigned value to the LEDs
        digitalWrite(7, HIGH); //high end message
      }

ncomingSignal1 = analogRead(A1) >> 2;//get new value from A1
           byte sequenza2[] = { 0, 1, 0,};
            if (millis() > 0.02)
         {
           digitalWrite(7,LOW); //Start transmission
      for(int i=0; i<4; i++)
  {
        digitalWrite(7, sequenza2[i]);
    }
         }
  
        analogWrite(3, incomingSignal1); //assigned value to the LEDs
         digitalWrite(7, HIGH);//end message
 incomingSignal2 = analogRead(A2) >> 2;//get new value from A2
          byte sequenza3[] = { 0, 0, 1,};
               if (millis() > 0.02)
         {
      for(int i=0; i<4; i++)
   {
      digitalWrite(7, sequenza3[i]);
   }
         }
 
        analogWrite(3, incomingSignal2); //assigned value to the LEDs
        digitalWrite(7,HIGH);

mando una byte sequenza prima di inviare il segnale e quando lo inviato rimane alto.

e ricevo in questo modo

int RX()
{
  if (digitalRead(A4) == HIGH)// lettura valore codice contrario per fotodiodo
  {
    for (int offset = 0; offset ++; offset < 5)
    {
      val = digitalRead(A4) << offset; //variabile scorrimento IDCODE
    }
    return val;

   switch (val)
   {
     case 1101:
     voltage = ((pulseIn(A5, LOW, 1280) * 100) / 128) >> 1;
    voltage = map(constrain(voltage, 0, 100), 0, 100, 0, 255);//statement
    dac.output(voltage);
         break;

        case 1101:
          voltage1 = ((pulseIn(A5, LOW, 1280) * 100) / 128) >> 1;
          voltage1 = map(constrain(voltage1, 0, 100), 0, 100, 0, 255);
//          dac2.output(voltage1);
          break;
  
        case 1100:
          voltage2 = ((pulseIn(A5, LOW, 1280) * 100) / 128) >> 1;
          voltage2 = map(constrain(voltage2, 0, 100), 0, 100, 0, 255);
  //          dac3.output(voltage2);
            break;

      }
  }
}

Sto sbagliando completamente? Ha senso il moi ragionamento.
Ringrazio qualsiasi consiglio aiuto e correzione!!!

Giulialiuyi: Sto sbagliando completamente?

Assolutamente si, non ha alcun senso convertire il segnale in pwm e inviarlo con la fibra ottica, usa la fibra per inviare dati tramite seriale.

:o :o :o :o :o

ma anche se questi dati non sono messaggi, non li prendo dal computer ma sono segnali analogici che converto tramite PWM. ????

P.S. il programma deve funzionare con arduino collegato ad una batteria e niente cmputer di mezzo. Sarebbe una cosa del genere?

http://www.leonardomiliani.com/2013/arduino-invio-seriale-di-dati-da-e-per-il-computer/

ma da e per arduino?

Io utilizzavo la PWM perche conoscendone periodo riuscivo a risalire al segnale originale in maniera intuitiva e veloce. Ora con https://www.arduino.cc/en/Tutorial/SoftwareSerial non ho la minima idea di come posso riottenere il segnale originale sinuoide ectt.