Fonction Serial.begin

Bonjour à tous,

J'essaye d'utiliser la fonction Serial.begin, mais erreur à la compilation ; voici mon code :

void setup() 
{
  Serial.begin(250000, SERIAL_8N2); // Modification des paramètres
}

void loop() 
{
  // Serial.write(255);
}

Je voulais modifier les paramètres, mais il n'a pas l'air d'apprécier ; savez vous pourquoi? Je ne vois pas ou je fais une erreur!

(Soyez indulgent, je débute :wink: )

Merci d'avance.

Salut,

Quelle erreur et sur quelle board tu bosses ?

Sinon 250 000 baud c'est trop, c'est 115200 la limite

Je bosse sur Arduino DUE ; voici le code erreur :

Arduino : 1.5.7 (Windows 8), Carte : "Arduino Due (Programming Port)"

Emission.ino: In function 'void setup()':
Emission.ino:3:34: error: no matching function for call to 'UARTClass::begin(int, unsigned int)'
Emission.ino:3:34: note: candidate is:
In file included from C:\Program Files (x86)\Arduino\hardware\arduino\sam\variants\arduino_due_x/variant.h:38:0,
                 from C:\Program Files (x86)\Arduino\hardware\arduino\sam\cores\arduino/Arduino.h:189,
                 from Emission.ino:1:
C:\Program Files (x86)\Arduino\hardware\arduino\sam\cores\arduino/UARTClass.h:41:10: note: virtual void UARTClass::begin(uint32_t)
     void begin( const uint32_t dwBaudRate ) ;
          ^
C:\Program Files (x86)\Arduino\hardware\arduino\sam\cores\arduino/UARTClass.h:41:10: note:   candidate expects 1 argument, 2 provided

  Ce rapport contiendrait plus d'informations si l'option
  "Montrer les informations de sortie pendant la compilation"
  était activée dans Fichier > Préférences.

C'est spécifié que l'on peut réglé la vitesse de transmission que l'on souhaite. J'ai l'impression que c'est juste le 2ème paramètre qui pose problème...

C:\Program Files (x86)\Arduino\hardware\arduino\sam\cores\arduino/UARTClass.h:41:10: note: virtual void UARTClass::begin(uint32_t)
void begin( const uint32_t dwBaudRate ) ;
^
C:\Program Files (x86)\Arduino\hardware\arduino\sam\cores\arduino/UARTClass.h:41:10: note: candidate expects 1 argument, 2 provided

c'est explicite, tu ne doit mettre que baudrate.

floppp:
J'ai l'impression que c'est juste le 2ème paramètre qui pose problème...

Si tu vas regarder dans UARTClass.h tu verras que cette possibilité n'est pas implémentée.
Il n'y a que la forme begin(baudrate) qui soit définie pour la Due

On ne peut donc pas changer ce paramètre?
Je n'ai pas le choix, la configuration par défaut (bits de données, pas de parité, 1 bit de stop) ne convient pas pour mon application...
Comment faire si il me faut bits de données, pas de parité et 2 bits de stop?

Sur la partie anglaise du site il y a un fil sur le sujet Serial.begin parameters not working - Due 1.5.5 Beta - Arduino Due - Arduino Forum;
Il est suggéré de chercher la dernière version qui implémenterait cette fonction sur Serial1, Serial2 et Serial3

Je suis allez voir ce topic, merci ; mais je n'ai aps tout compris.
Il est spécifié qu'avec la classe Hardware.Serial, on ne peut pas changer le 2nd paramètre?

En quoi télécharger la version ide-1.5 va permettre de faire fonctionner la fonction?

Qu'est ce que GitHub?

J'ai bien la dernière version (1.5.7), mais je n'ai pas totalement compris à quoi servait github.

Je suis en revanche d'accord avec ce que ydkim a écrit sur le forum anglais :

for Arduino uno or mega
/hardware/arduino/avr/cores/arduino/HardwareSerial.h (This has defines e.g. SERIAL_7E1)
for Arduino Due
/hardware/arduino/sam/cores/arduino/hardwareSerial.h ( There is no define for config)

Comment faire pour définir les mêmes configurations pour la DUE?

Merci d'avance.

Je continues mon avancée en essayant de comprendre.

En fouillant dans UARTClass.h dans le répertoire sam, je m'aperçois qu'aucune fonction ne détaille le deuxième paramètre de void.begin : void begin( const uint32_t dwBaudRate ) ;

En revanche, en allant dans USARTClass.h, tout est définit : void begin( const uint32_t dwBaudRate , const uint32_t config ) ;

Il suffisait donc juste de passer sur le port UART1? Quand je test mon nouveau code, cela fonctionne :

void setup() 
{
  Serial1.begin(250000, SERIAL_8N2); // Configuration
}

void loop() 
{
  Serial1.write(255);
}

floppp:
J'ai bien la dernière version (1.5.7), mais je n'ai pas totalement compris à quoi servait github.

Github c'est un espace de codage collaboratif. La problématique de base est simple : imagine que tu travailles avec d'autres personnes sur une librairie : tu fais des modif, un autre en fait etc ... sans github c'est le bordel : vous vous envoyez les fichiers dès qu'il y a une modif, faut les recopier dans une nouvelle etc ... La il y a un fichier central dans le cloud et toutes les personnes autorisée peuvent faire des modifs, les valider, les annuler ...

De plus même quelqu'un de l'exterieur peut suggérer des modifications, c'est d'ailleurs très courant sur arduino, ça permet notamment de proposer des corrections de bug ou des améliorations.

Chose également utile, tu peux synchroniser to github à tes fichiers sur ton PC, ainsi dès que tu fais des modif sur une librairie de ton pc par exemple, tu peux directement injecter les modif sur le github. De même que si tu n'as pas ton PC sous la main, tu peux bosser sur github, et en rentrant synchronisé ton pc pour récurer les modifs

floppp:
Il suffisait donc juste de passer sur le port UART1? Quand je test mon nouveau code, cela fonctionne :

J'avais bien précisé "la dernière version qui implémenterait cette fonction sur Serial1, Serial2 et Serial3"

Ok désolé fdufnews, je n'avais pas compris. Comme je débute, je découvre un peu... :wink:

Autre petite question, comment fait-on pour envoyer (toujours sur UART1), un niveau (haut ou bas) d'une certaine durée, mais qui ne prennent pas en compte la configuration du mon UART?

Par exemple, j'envoie un niveau de repos (exemple à 1) d'une certaine durée, et ensuite je commence ma transmission (avec mes bits de données,bits de stop, ...)

J'espère que vous avez compris. En fait je veux juste envoyez un niveau haut ou bas sur ma ligne, d'une certaine durée.

Ca sent le DMX ça ...

Qu'on m'arrête si je me trompe, je n'ai jamais tenté l'expérience et y'a peut-être une autre méthode : il suffit simplement de configuré le pin TX en OUTPUT, et de faire des digitalWrite() puis de relancer Serial1.begin() pour remettre le pin dans son état "normal"

Tout à fait B@tto, je tente de faire du DMX à la main, pour ensuite faire une fonction complète de DMX pour mon Arduino DUE.
EN effet, jepensais procéder de la sorte, car je ne vois pas comment on pourrait faire autrement...

Bonjour,

Ce sujet m'intéresse.
floppp a écrit :

Il suffisait donc juste de passer sur le port UART1 ?

et dans son code, il remet la même chose qu'au départ .

Comment passer par UART1, en plus clair que fallait-il faire svp ?

Géryko

void setup() 
{
  Serial1.begin(250000, SERIAL_8N2); // Configuration
}

void loop() 
{
  Serial1.write(255);
}

Port UART0 : Serial.begin
Port UART1 : Serial1.begin

OK Merci
Dans le code je lisais seriall avec 2 L et je pensais à une faute de frappe.
Géryko

@ B@tto :

Le problème est que l'on est pas très précis en utilisant un digitalWrite (en regardant à l'oscillo, j'obtient 92µs pour 88µs dans mon programme et 13µs pour 8µs établit dans mon programme).

L'utilisation digitalWrite + delayMicroseconds ne me semble pas très précise...