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!!!!