problema comunicazione rs485

Buon Natale,

ho un problema con il programma per la comunicazione seriale. Praticamente ho comprato due moduli rs485 per far comunicare due arduino Mega, sono riuscito a farli comunicare ma ho un piccolo problema, il primo arduino mega deve inviare un segnale in base alla commutazione di un determinato pulsante, mentre il secondo arduino deve ricevere il segnale ed in base al tipo di segnale deve accendere un led. Il tipo di segnale che mando sono lettere e quindi il programma è banale ma il mio problema è che usando char posso fare al massimo 26 led( perchè lew lettere sono 26) ed a me servono monti di più.

Questo è il programma per inviare

int a =0;
int b =0;
int c =0;
int d =0;
void setup() {
  Serial.begin(9600);
 pinMode(2, INPUT);
 pinMode(3, INPUT);
 pinMode(4, INPUT);
 pinMode(5, INPUT);

 pinMode(14, OUTPUT);
 pinMode(15, OUTPUT);
 pinMode(16, OUTPUT);
 pinMode(17, OUTPUT);
}

void loop() {

 if((digitalRead(2)==HIGH)and (a==0)){
  digitalWrite(14, HIGH);
  Serial.println('A');
  a=1;
 
 }
 if((digitalRead(2)==LOW)and (a==1)){
   digitalWrite(14, LOW);
   Serial.println('a');
   a=0;
 }

questo è il programma per ricevere

void setup() {
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
Serial.begin(9600);

}

void loop() {


int segnale=Serial.read() ;

switch(segnale){
  
case 'A':
digitalWrite(3, HIGH);
break;

case 'a':
digitalWrite(3, LOW);
break;

case 'B':
digitalWrite(4, HIGH);
break;

case 'b':
digitalWrite(4, LOW);
break;


case 'C':
digitalWrite(5, HIGH);
break;

case 'D':
digitalWrite(5, LOW);
break;

case 'd':
digitalWrite(6, HIGH);
break;


 
}

 
}

c'è qualche modo per far leggere due lettere al Case dello swich?

grazie di tutto ed ancora Buon natale

Buonasera,
prima di tutto, nella sezione in lingua Inglese si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post ...

... poi, essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

P.S.: Il tuo post è già stato spostato nell'opportuna sezione del forum "Italiano"

>lelecuci: ... emmm ... lo hai letto bene il post ? :o ... la tua presentazione la devi inserire nell'apposito thread dove la gente, primi di risponderti la va a cercare.

Inserita qui, tra due giorni, non la trova più nessuno, quindi, cortesemnete, fai come esattamente descritto nel mio post #1. Grazie. :slight_smile:

Guglielmo

In merito al tuo problema, invece di trasmettere un carattere ASCII , trasmetti un byte ... così puoi inviare un valore da 0 a 255.

Nella classe Serial, guardati il metodo write() :wink:

Guglielmo

Grazie per il consiglio, ma ho visto che anche se io scrivo una parola lui la trasforma in numeri. C'è un modo per trasformare quei numeri nuovamente in lettere o no? Per il mio progetto non serve perché userò i numeri ma sono curioso di sapere se è possibile farlo per progetti futuri.

Grazie di tutto.

Non c'è nessuna trasformazione da fare.

La lettera 'A' e il valore sessantacinque sono la stessa identica cosa.

Cioè un un byte fatto così: 01000001

Quelle che chiami "lettere" sono solo una rappresentazione visiva umana.

Serial.print('A') è la stessa cosa di Serial.write(65)

Bisogna sempre sapere se si sta lavorando con una rappresentazione o con un valore.

ti ringrazio per la risposta ma forse non mi sono spiegato bene, lo so che ogni lettera equivale ad un codice binario o ad un numero. se io per esempio vorrei fare un tastierino per scrivere delle parole e poi queste parole vorrei inviarle ad un altra scheda molto distante, come faccio a fargli convertire i byte o i numeri che gli arrivano in parole?

ciao lelecuci,

non sono sicurissimo di aver capito cosa ti serve...però ci provo:
immagino che per tastierino si possa considerare uno dei classici 4x4 tipo QUESTO ; quindi con numeri dallo "0" al "9", lettere A-B-C-D e due caratteri "" ed "#" (ma ovviamente tutto mappabile) che fa l'incrocio del segnale riferito alla colonna ed alla riga.
quindi diciamo che tu voglia inviare la parola "ABCD"...dal mio punto di vista premerai i quattro pulsanti delle lettere, a tua scelta salvare i caratteri in un array prima di inviarlo od inviare le lettere singole ad ogni pressione; dopo premerai uno di due tasti speciali, o "
" o "#", per far capire all'arduino che la parola è compiuta, questo carattere o viene salvato nell'array ed abilta altresi l'invio di tutta l'array, se stesso compreso, oppure risulterà l'ultimo carattere ricevuto dall'arduino remoto e gli farà capire, perchè lo implementi nel tuo codice, che la parola è conclusa.
l'arduino remoto gestirà il tutto come vuoi tu.
diciamo così: arduino invia un byte alla volta...sia che siano byte, appunto, che char, sia int (2 byte distinti),float o long (4 byte distinti)...a te sta gestire questo flusso; tu sai cosa stai inviando e a te sta gestire i dati in ingresso.
modi ce ne sono parecchi (leggasi anche protocollo/i scambio dati).