Communication via RX et TX

Le problème exposé dans ce sujet a été résolu.

Salut salut En ce moment, je bosse avec un camarade sur la communication via rx et tx de notre arduino (avant de se lancer sur la xbee ^^). Le truc super c'est qu'on arrive avec deux pc différent, où dessus est connecté une arduino par pc, et avec ce code (le seul qu'on arrive à faire fonctionné):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
// include the SoftwareSerial library so you can use its functions:
#include <SoftwareSerial.h>

#define rxPin 00
#define txPin 1

// set up a new serial port
SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin);

void setup()  {
  // define pin modes for tx, rx:
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  // set the data rate for the SoftwareSerial port
  mySerial.begin(9600);
}

void loop() {
  if (mySerial.available()>0){
  mySerial.read();
 }
}

On arrive a communiqué via la console comm (c'est à dire que ce qu'il envoie est reçu par moi et vice versa. Soucis, on ne peut ni traiter les infos, ni en envoyer directement de la carte 1 à la carte 2 ^^

On tourne sous Arduino UNO ;) Si vous avez une idée car moi je commence à sécher la x)

Merci d'avance ;)

Et si tu utilise une liaison série sur la carte pour discuter avec le PC, et une autre pour discuter avec l'autre carte ?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// include the SoftwareSerial library so you can use its functions:
#include <SoftwareSerial.h>

#define rxPin 00
#define txPin 1

// set up a new serial port
SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin);

void setup()  {
  // define pin modes for tx, rx:
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  // set the data rate for the SoftwareSerial port
  mySerial.begin(9600);
  Serial.begin(9600);
}

void loop() {
  if (mySerial.available()>0){
  Serial.print(mySerial.read());
 }
  if (Serial.available()>0){
  mySerial.print(Serial.read());
 }
}

(sans rx et tx input et output) il n'y a aucun écris ^^

Dryusdan

Si tu ne configures pas les entrées/sorties, comment veux-tu que ça marche ?

Dans le code ci-dessus, je me contente de lire sur une interface pour écrire sur l'autre (en utilisant la même vitesse sur chaque interface pour ne pas avoir de problème de goulot d'étranglement), il suffit de programmer une action différente sur la réception de données sur une interface pour faire un traitement différent.

Bonjour Eskimon :) En mettant comme pin le 2 en rx et le 3 en tx cette fois si un l'envoie, l'autre ne reçois pas :/

Et notre gros soucis viens juste du fait que quand on envoie un 1/2/3 etc… L'autre les reçois mais avec un if(chiffre= 3) ou autre, (chiffre en int, char etc..) on ne peut le traiter (et faire un var_dump/print_r est plus facile en php qu'en arduino ^^)

J'ai pas du tout regardé le hardware, je pensais que ça correspondait déjà aux entrées/sorties utilisées pour dialoguer entre les arduino.

Donc effectivement, il faut choisir 2 autres pins des cartes, les relier (la pin A de la carte 1 avec la pin B de la carte 2 et vice versa), et configurer la SoftwareSerial pour utiliser les pins A et B. Ainsi, chaque carte devrait retransmettre les données reçues du PC (sur Serial) à l'autre carte (via mySerial), et ce qui est reçu sur mySerial au PC.

On peut tout à fait traiter les données reçues, pourquoi ne pourrait-on pas le faire ?

Du coup, il n'y a plus de PC, c'est encore plus simple.

Avec ce câblage, je vais faire un programme par Arduino:

Arduino 1:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
void setup()  {
  Serial.begin(9600);
}

void loop() {
  Serial.print('A');
  delay(250);
  Serial.print('B');
  delay(250);
}

Arduino 2:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#define LED 13

void setup()  {
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  if (Serial.available()>0){
    if(Serial.read() == 'A')
      digitalWrite(LED, 1);
    else
      digitalWrite(LED, 0);
  }
}

J'ai jamais fait d'arduino, mais ça doit être ça. Normalement la led devrait clignoter 2 fois par seconde.

+0 -0

Hey :) C'est aussi simple que ça? o.O pourtant quand on utilisais le serial.read(); du style

1
chaine = Serial.read();

ça marchais pas (char, const char * enfin bref ^^) Merci pour vos réponses :) n'ayant pas les arduinos sous la main, je ne pourrais tester que lundi u.U Je vous recontacterai alors ;) Merci pour votre aide :)

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte