communication Sérial1

Bonjour à tous,

Je découvre Arduino Duemilanove (ATmega328)

Apres quelques test avec Arduino 0022

  • Clignotement d'une led
  • Commande par bouton poussoir
  • serveur Web avec une carte ENC28J60

Pas de problème ça fontionne comme prévu :slight_smile:

J'ai voulu tester une communication via les liaisons serie
Et là je bloque : >:(

Impossible de compiler si je veux utiliser serial1 sérial2 ou sérial3

Il me revoie ce message d'erreur

MultiSerialMega.cpp: In function 'void setup()':
MultiSerialMega:23: error: 'Serial1' was not declared in this scope
MultiSerialMega.cpp: In function 'void loop()':
MultiSerialMega:28: error: 'Serial1' was not declared in this scope

Après quelque recherche sur le net ils conseillent d'utiliser une autre librairie
newSoftwareSerial11

avec cette nouvelle librairie toujours impossible de compiler
et message d'erreur différent.

SoftwareSerialold\SoftwareSerial.cpp.o: In function SoftwareSerial::begin(long)': C:\arduino-0022\libraries\SoftwareSerialold/SoftwareSerial.cpp:46: multiple definition of SoftwareSerial::begin(long)'
SoftwareSerial\SoftwareSerial.cpp.o:C:\arduino-0022\libraries\SoftwareSerial/SoftwareSerial.cpp:378: first defined here
SoftwareSerialold\SoftwareSerial.cpp.o: In function SoftwareSerial::read()': C:\arduino-0022\libraries\SoftwareSerialold/SoftwareSerial.cpp:55: multiple definition of SoftwareSerial::read()'
SoftwareSerial\SoftwareSerial.cpp.o:C:\arduino-0022\libraries\SoftwareSerial/SoftwareSerial.cpp:424: first defined here

Si une personne à une idée je suis preneur

j'ai raté quelque chose ?
Il y a un problème de librairie ?

Merci d'avance pour votre aide.

Bonsoir,

Impossible de compiler si je veux utiliser serial1 sérial2 ou sérial3

Il me revoie ce message d'erreur

MultiSerialMega.cpp: In function 'void setup()':
MultiSerialMega:23: error: 'Serial1' was not declared in this scope
MultiSerialMega.cpp: In function 'void loop()':
MultiSerialMega:28: error: 'Serial1' was not declared in this scope

Au risque de dire une anerie, ces instructions ne concernent pas uniquement les cartes Mega ???

A+

Bonsoir Bidouille,

Merci pour ta reponse rapide,

Effectivement dans les commentaires il est ecrit "works only on the Arduino Mega" (Si les développeurs mettent des commentaires ce n'est pas pour rien) :wink:

/*
Mega multple serial test
Receives from the main serial port, sends to the others.
Receives from serial port 1, sends to the main serial (Serial 0).
This example works only on the Arduino Mega
The circuit:

  • Any serial device attached to Serial port 1
  • Serial monitor open on Serial port 0:
    created 30 Dec. 2008
    by Tom Igoe
    This example code is in the public domain.
    */
    void setup() {
    // initialize both serial ports:
    Serial.begin(9600);
    Serial1.begin(9600);
    }
    void loop() {
    // read from port 1, send to port 0:
    if (Serial1.available()) {
    int inByte = Serial1.read();
    Serial.print(inByte, BYTE);
    }
    }

Mais n'ayant rien trouvé de plus simple pour faire un premier test je pensais que ce code qui utilise uniquement des fonctions de base pourrait marcher avec un Duemilanove

Je continue mes investigation :slight_smile:

Effectivement seule la mega posséde trois vrais port série. Il est cependant possible d'en créer des "logiciels" sur les autres carte avec les librairies adaptées.

Bonjour,

Dommage que l' Arduino Duemilanove n'ai qu'un port physique :cry:

j'ai continué mes tests de communication et avec le code ci-dessous et la librairie NewSoftwareSerial
j'arrive maintenant à envoyer des caractères d'un PC vers un deuxième via hyper terminal et la carte Arduino.

//Test communication serie avec remplacement de la librairie SoftwareSerial par NewSoftwareSerial
// Arduino lecture sur pin 4
// Arduino renvoi sur pin 3

#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3, true);
SoftwareSerial mySerial2(4, 5, true);

int rx=0;

void setup()
{
// initialisation port 1
mySerial.begin(9600);
mySerial.flush(); //raz port.
// initilisation du port 2
mySerial2.begin(9600);
mySerial2.flush(); //raz port.
}
void loop() // run over and over again
{
if (mySerial2.available()) {
rx = mySerial2.read();
mySerial.print(rx, BYTE);
}
}

Tout est bien sauf le premier caractère envoyé après un upload ou un reset qui est erroné les suivants eux sont envoyés sans erreur ?????