Pages: [1]   Go Down
Author Topic: communication entre arduino mega et uno?[REGLE]  (Read 766 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour,
je suis entrain de bidouiller un code pour controller des leds via un ecran tactile...
tout marche,
 sauf que je n'ai pas assez de sorties pwm disponible sur ma carte mega, (l'ecran tactile me prend des sorties)
j'ai a ma disposition une carte uno....et je pense relier les 2, pour qu'elle communique entre elles (en fait j'ai juste besoin que la mega donne la bonne valeur de la led a la carte uno, ..relation maitre-esclave)
j'ai essayer plusieurs choses, et je bute...je n'arrive pas a les faire communiquer ensemble dans un premier temps
j'utilise la librairie SoftEasyTransfer, et  NewSoftSerial sous arduino 23

le code de la carte master (mega)
Code:
#include <SoftEasyTransfer.h>

/*   For Arduino 1.0 and newer, do this:   */
//#include <SoftwareSerial.h>
//SoftwareSerial mySerial(2, 3);

/*   For Arduino 22 and older, do this:   */
#include <NewSoftSerial.h>
NewSoftSerial mySerial(2, 3);



//create object
SoftEasyTransfer ET;

struct SEND_DATA_STRUCTURE{
  //put your variable definitions here for the data you want to send
  //THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
  int blinks;
  int pause;
};

//give a name to the group of data
SEND_DATA_STRUCTURE mydata;

void setup(){
  mySerial.begin(9600);
  //start the library, pass in the data details and the name of the serial port.
  ET.begin(details(mydata), &mySerial);
  
  pinMode(13, OUTPUT);
  
  randomSeed(analogRead(0));
  
}

void loop(){
  //this is how you access the variables. [name of the group].[variable name]
  mydata.blinks = random(5);
  mydata.pause = random(5);
  //send the data
  ET.sendData();
  
  //Just for fun, we will blink it out too
   for(int i = mydata.blinks; i>0; i--){
      digitalWrite(13, HIGH);
      delay(mydata.pause * 100);
      digitalWrite(13, LOW);
      delay(mydata.pause * 100);
    }
  
  delay(5000);
}

j'ai bien ma led qui s'allume aleatoirement..pas de probleme

le code de l'esclave (uno)
Code:
#include <SoftEasyTransfer.h>

/*   For Arduino 1.0 and newer, do this:   */
//#include <SoftwareSerial.h>
//SoftwareSerial mySerial(2, 3);

/*   For Arduino 22 and older, do this:   */
#include <NewSoftSerial.h>
NewSoftSerial mySerial(2, 3);


//create object
SoftEasyTransfer ET;

struct RECEIVE_DATA_STRUCTURE{
  //put your variable definitions here for the data you want to receive
  //THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
  int blinks;
  int pause;
};

//give a name to the group of data
RECEIVE_DATA_STRUCTURE mydata;

void setup(){
  mySerial.begin(9600);
  //start the library, pass in the data details and the name of the serial port.
  ET.begin(details(mydata), &mySerial);
  
  pinMode(13, OUTPUT);
  
}

void loop(){
  //check and see if a data packet has come in.
  if(ET.receiveData()){
    //this is how you access the variables. [name of the group].[variable name]
    //since we have data, we will blink it out.
    for(int i = mydata.blinks; i>0; i--){
      digitalWrite(13, HIGH);
      delay(mydata.pause * 100);
      digitalWrite(13, LOW);
      delay(mydata.pause * 100);
    }
  }
  //you should make this delay shorter then your transmit delay or else messages could be lost
  delay(250);
}

et la ..rien....

en premier probleme je pense a une erreur de cablage...
mega pin 3---> uno pin 2
        pin 2---> pin 3
(j'ai aussi essayé l'inverse)
faut il utiliser une autre pin, 0,1 (rx,tx) ?
faut il utiliser un autre type de connections (j'ai une horloge sur le port sda et scl de l'arduino mega)?
merci
« Last Edit: May 24, 2012, 03:48:00 am by nonos » Logged

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

Bonjour,
essaye avec TX/RX normalement c'est le bon cablage
TX "Mega" --> RX "Uno" Maitre
RX "Mega" --> TX "Uno" Esclave
 smiley-grin
Logged

83 - var
Offline Offline
God Member
*****
Karma: 9
Posts: 863
ARDUINO Powa !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

alors écoute ton câblage est bon tu a bien inversé 2 et 3  (rx / tx) et oui 2 3 sont très bien pour les software serial je les utilise aussi, à tu la possibilité d'utiliser le débug? (port série afficher en console dans l'IDE) ça te permettrai d'afficher ce que t'envoie d'un coté et ce que tu reçois de l'autre, tu n'envoie peut être juste pas les bonne valeur ou alors les interprète mal..

Skizo !
Logged

Un tien vaux mieux que deux tu l'auras !

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

merci pour vous reponses..
bon j'ai changé un peu de facon de faire..
je suis revenu a une version precedente de EasyTransfer Arduino Library v1.7
, et je ne passe plus par la librairie newsoftserial
j'ai branché sur les pin rx0 et tx1 en croisant ...
et la ca marche...il me reste a adapter le code
je mets le code pour en dessous si un jour quelqu'un se trouve dans la meme situation que moi...

Code:
#include <EasyTransfer.h>

//create object
EasyTransfer ET;

struct RECEIVE_DATA_STRUCTURE{
  //put your variable definitions here for the data you want to receive
  //THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
  int blinks;
  int pause;
};

//give a name to the group of data
RECEIVE_DATA_STRUCTURE mydata;

void setup(){
  Serial.begin(9600);
  //start the library, pass in the data details and the name of the serial port. Can be Serial, Serial1, Serial2, etc.
  ET.begin(details(mydata), &Serial);
 
  pinMode(13, OUTPUT);
 
}

void loop(){
  //check and see if a data packet has come in.
  if(ET.receiveData()){
    //this is how you access the variables. [name of the group].[variable name]
    //since we have data, we will blink it out.
    for(int i = mydata.blinks; i>0; i--){
      digitalWrite(13, HIGH);
      delay(mydata.pause * 100);
      digitalWrite(13, LOW);
      delay(mydata.pause * 100);
    }
  }
 
  //you should make this delay shorter then your transmit delay or else messages could be lost
  delay(250);
}
et

Code:
#include <EasyTransfer.h>

//create object
EasyTransfer ET;

struct SEND_DATA_STRUCTURE{
  //put your variable definitions here for the data you want to send
  //THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
  int blinks;
  int pause;
};

//give a name to the group of data
SEND_DATA_STRUCTURE mydata;

void setup(){
  Serial.begin(9600);
  //start the library, pass in the data details and the name of the serial port. Can be Serial, Serial1, Serial2, etc.
  ET.begin(details(mydata), &Serial);
 
  pinMode(13, OUTPUT);
 
  randomSeed(analogRead(0));
 
}

void loop(){
  //this is how you access the variables. [name of the group].[variable name]
  mydata.blinks = random(5);
  mydata.pause = random(5);
  //send the data
  ET.sendData();
 
  //Just for fun, we will blink it out too
   for(int i = mydata.blinks; i>0; i--){
      digitalWrite(13, HIGH);
      delay(mydata.pause * 100);
      digitalWrite(13, LOW);
      delay(mydata.pause * 100);
    }
 
  delay(5000);
}
Logged

83 - var
Offline Offline
God Member
*****
Karma: 9
Posts: 863
ARDUINO Powa !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok, dommage que tu n'ai pas réussi de l'autre façon mais bon, le principale c'est que tu t'en sois sortie, merci pour le partage smiley-wink

Skizo !
Logged

Un tien vaux mieux que deux tu l'auras !

Pages: [1]   Go Up
Jump to: