Pages: [1]   Go Down
Author Topic: serial arduino mega NON riceve  (Read 622 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buongiorno a tutti, sono di nuovo qui a disturbare... smiley-roll

Sto lavorando ad una piccola rete rs485, in cui ci sono due arduino UNO e un arduino MEGA.

Quando invio dati via serial da arduino MEGA ad arduino UNO è tutto OK...
Ma quando invio i dati da UNO a MEGA, il mega non riceve... non entra nemmeno nel void serialEvent.

Ho provato anche a collegare direttamente le porte seriali di MEGA e UNO (escludendo intanto il terzo).

Non funziona.

Il codice sul MEGA è questo:
Code:
Serial2begin(9600);
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

...
void serial2Event() {
  while (Serial2.available()) {
    inrs485=Serial2.read();
  }
  Serial.write(inrs485);
  lcd.print("RX485");
  lcd.print(inrs485);
  inrs485=0;
   
}

Non funziona.

Ho provato anche con le altre seriali, addirittura con quella collegata all'USB, ma io invio i dti dal PC, arduinoMEGA non li riceve (con il monitor seriale).

Il programma dell'arduino UNO che invia i dati è questo (funzionante perchè vedo i dati anche con il monitor seriale collegato a arduino UNO):

Code:
...
if(digitalRead(12)==1){
Serial.write(20);
}

Ma il MEGA non riceve nulla.

Mi potete aiutare perfavore?

Grazie, Marco
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7079
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il codice del core di Arduino che richiama il serial event è:
Code:
void serialEventRun(void)
{
#ifdef serialEvent_implemented
  if (Serial.available()) serialEvent();
#endif
#ifdef serialEvent1_implemented
  if (Serial1.available()) serialEvent1();
#endif
#ifdef serialEvent2_implemented
  if (Serial2.available()) serialEvent2();
#endif
#ifdef serialEvent3_implemented
  if (Serial3.available()) serialEvent3();
#endif
}
quindi hai sbagliato il nome della funzione richiamata. correggi in serialEvent2

Per la cronaca, la funzione serialEventRun viene richiamata ogni fine loop nel main.c del core.
Code:
#include <Arduino.h>
int main(void)
{
init();
#if defined(USBCON)
USBDevice.attach();
#endif
setup();
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}
return 0;
}
« Last Edit: January 23, 2013, 09:24:20 am by PaoloP » Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il codice del core di Arduino che richiama il serial event è:
Code:
void serialEventRun(void)
{
#ifdef serialEvent_implemented
  if (Serial.available()) serialEvent();
#endif
#ifdef serialEvent1_implemented
  if (Serial1.available()) serialEvent1();
#endif
#ifdef serialEvent2_implemented
  if (Serial2.available()) serialEvent2();
#endif
#ifdef serialEvent3_implemented
  if (Serial3.available()) serialEvent3();
#endif
}
quindi hai sbagliato il nome della funzione richiamata. correggi in serialEvent2

[...]


AHHHAHH... il fatto è che ero proprio convinto quando lo scrivevo... Ho anche pensato "sarà giusto? mah, me lo dirà il compilatore..."

Grazie PaoloP
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

buongiorno, ho fatto alcune prove e tutto funziona correttamente. C'è però una piccola imprecisione nella comunicazione, cioè l'arduino uno invia i dati corretti, ma il mega li riceve sommati a 208. cioè se arduino uno invia 41, il mega riceve 208... perchè? invece se ad arduino uno gli attacco il cavo usb, il computer visualizza i dati giusti.

ciao, Marco
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7079
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hai collegato i GND delle due schede tra di loro?
Se non l'ho hai fatto è come misurare la vera altezza di due persone che però portano scarpe diverse.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hai collegato i GND delle due schede tra di loro?
Se non l'ho hai fatto è come misurare la vera altezza di due persone che però portano scarpe diverse.

Si si sono collegate ... Hanno la stessa alimentazione.

Per adesso ho "risolto" sottraendo il 208 che stranamente viene sommato ai dati in arrivo:  smiley-grin

Code:
INdati = Serial1.read()-208; 

e per adesso funziona, ma se possibile vorrei capire perché fa così.
Logged

Pages: [1]   Go Up
Jump to: