Arduino Forum upgrade scheduled for Monday, October 20th, 11am-4pm (CEST). Sorry for the inconvenience!
Pages: [1] 2   Go Down
Author Topic: Buffer serial  (Read 2619 times)
0 Members and 1 Guest are viewing this topic.
New Zealand
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
With arduino everything is possible
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour a tous,
J'ai écrit un programme qui assigne une valeur a une variable de type const de la manière si dessous.

Code:
const int maVariable = getVar();

void setup() {...}

void loop() {...}

int getVar() {
  while(!Serial.available()) {}
  return Serial.read();
}

Ca me semble une bonne méthode pour initialisé la variable par Serial mais le problème est que l'arduino ne lit rien comme si le buffer serial reste vide quand il devrais recevoir de l'information. J'ai fais des teste et le arduino est OK normalement. Je ne comprend pas ce qui ce passe.
Merci

Cyril
Logged

France
Offline Offline
Faraday Member
**
Karma: 40
Posts: 3660
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

une constante, comme son nom l'indique, est constante on ne peut pas la changer, sa valeur est déterminée à la compilation. Si tu veux pouvoir modifier une valeur à l'exécution, même qu'une seule fois à l'initialisation, il faut que ce soit une variable classique.
Logged

New Zealand
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
With arduino everything is possible
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci pour la réponse. Mais ce qui et bizarre c'est que même quand elle n'est pas const ça ne marche pas. Etrange...  :-?

Cyril
Logged

France
Offline Offline
Faraday Member
**
Karma: 40
Posts: 3660
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

En fait je ne suis pas sûr que l'on puisse appeler une fonction à la création d'une variable. Tu pourrais plutôt essayer ça:
Code:
void setup(void){
maVariable = getVar();
}
« Last Edit: June 01, 2010, 06:12:31 am by fdufnews » Logged

New Zealand
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
With arduino everything is possible
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ce qui est encore plus bizarre c'est que si je fais:

Code:
int maVariable = getVar();

void setup() {...}

void loop() {...}

int getVar() {
  Serial.println("La methode getVar march?");

  while(!Serial.available()) {}
  return Serial.read();
}

La commande Serial.println marche mais pas Serial.read.
 smiley-wink

Cyril
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 31
Posts: 3234
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Mets plutôt :

Code:
if(Serial.available()) {
Serial.println("La methode if marche ?");
return Serial.read();
}

Ta boucle while peut se bloquer de façon infinie .
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

New Zealand
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
With arduino everything is possible
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Pourquoi???
 smiley

Cyril
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 31
Posts: 3234
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tant que la condition while n'est pas remplie tu restes dans while et le reste du programme ne peut pas se dérouler.
Avec if si la condition n'est pas remplie, le reste du programme se déroule sans ce qui se trouve dans la fonction conditionné par le if().
« Last Edit: June 02, 2010, 01:39:54 am by jfs » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

New Zealand
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
With arduino everything is possible
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Mais le bute dans ce programme c'est d'attendre que l'utilisateur envoye un nombre.

Code:
int getVar() {
  Serial.println("La methode getVar march?");

  while(!Serial.available()) {} // Attend qu'un nombre soit envoyé
  return Serial.read();
}

Cyril
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 31
Posts: 3234
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Celui que je t'ai proposé aussi... mais il ne peut pas se bloquer.

Code:
if(Serial.available()) { //si un nombre est envoyé...fait ce qui est dans la boucle if()
 Serial.println("La methode if marche ?");
 Serial.println (Serial.read()); // écrit ce qui "rentre"
 return Serial.read();
}

Comment envoies-tu ton nombre, comment est branché ton Arduino ?
« Last Edit: June 02, 2010, 01:44:39 am by jfs » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

New Zealand
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
With arduino everything is possible
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci pour la réponse. Je comprend mais mon problème c'est que le nombre n'est pas forcement envoyé tous de suite donc il faudrait une méthode qui attend que l'utilisateur envoyé un nombre.

Code:
if (Serial.available()) {...}

Cela marche une fois mais n'attend pas. smiley-wink

Cyril
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 31
Posts: 3234
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tu mets la suite de ce que tu veux faire dans la boucle if(), comme la question est posée à chaque boucle loop(), c'est comme si tu attendais que l'on envoie un chiffre.
Et en attendant cette action, ton arduino peut faire autre chose... passer l'aspirateur, faire la vaisselle  ;D

Ce code fonctionne :

Quote
int maVariable = getVar();

void setup() {
  Serial.begin(9600);
}

void loop() {

  getVar();
}

int getVar() {
  if(Serial.available()) { //si un nombre est envoyé...fait ce qui est dans la boucle if()
    Serial.println("La methode if marche ?");
    Serial.println (Serial.read()); // écrit ce qui "rentre"
    return Serial.read();
  }
}

« Last Edit: June 02, 2010, 02:23:59 am by jfs » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

New Zealand
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
With arduino everything is possible
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci, c'est vrais que je pourrais faire sa. Mais peux tu m'expliquer pourquoi la boucle while marchait pas, juste par curiosité.  smiley-wink

Cyril
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 31
Posts: 3234
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Avais-tu mis Serial.begin() dans le setup() ?
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

New Zealand
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
With arduino everything is possible
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui, la preuve c'est que Serial.println marche.

En fait j'ai fais sa:

Code:
int getVar() {
Serial.begin(9600);

...
}

Logged

Pages: [1] 2   Go Up
Arduino Forum upgrade scheduled for Monday, October 20th, 11am-4pm (CEST). Sorry for the inconvenience!
Jump to: