Bonjour,
ivanutsu:
j'ai une petite question. celle si est de savoir si je pourrais commander mon arduino grâce a 2 port série différant (pour pouvoir entrée deux donner via mon application qui elle est faite en c# ) dans mon application je pourrais mettre deux port série mais dans la programmation de mon arduino je ne le sait pas ou je ne connais pas la technique.
Si le but est d'avoir deux port série virtuelle usb coté ordi, quelque soit l'arduino c'est impossible (matérielement j'entend, aprés avec le module usb/série qui va bien c'est faisable), par contre si le but est d'envoyer des données depuis l'application via le port usb et de les retransmettre à un autre matériel série, il existe une librairie de "software serial" NewSoftSerial -> NewSoftSerial | Arduiniana qui permet de transformer n'importe quelle couple de broche Dx en port série TTL (TTL = 0/5v, donc pas possible de connecter ce port série à un ordinateur via le port rs232 (-12/+12v) tel quelle !!).
Sinon d'un point de vu purement sémantique pour réaliser ton morceau de code :
void setup()
{
}
void loop()
{
Serial.begin(9600);
int variable1 = Serial.read ();
Serial.end();
Serial.begin(11600);
int variable2 = Serial.read();
Serial.end();
}
Je dis bien d'un point de vu purement sémantique, parce que en réalité ce code à 2 chance sur 3 de buggé ou de ne pas recevoir correctement les données.
De plus tes commentaire me laisse penser que tu n'as pas compris le fonctionnement de Serial.read(), la fonction read() renvoi un octet, donc pour recevoir un int comme tu le voudrai dans ton code il faudrait recevoir au minimum deux octets (voir + bas pourquoi).
ivanutsu:
mais j'ai une deuxième question est ce que le commande envoyer ne peut pas être une chaine de caractère ??? (la aussi comment puis-je faire ?)
Cela peut être n'importe quoi sous forme binaire (byte[]), des caractères, des int, des float, des byte, ... mais il faudra coté arduino pensé à recoller les morceaux !
Exemple un int -> 2 octets donc coté arduino il faudra faire deux Serial.read() puis une peu de math :
int val = Serial.read() + (Serial.read() << 8);
Attention par contre aux différentes plateformes/architectures, big-endian, little-endian / 32bits, 64bits, en .net (C#, vb, ...) cela joue sur le nombres d'octets envoyé (et l'ordre dans lequel il sont envoyé) via le port série en utilisant BitConverter.GetBytes(); pour la conversion en bytes[].
ivanutsu:
je vais me pencher du coter des librairie prévue pour en savoir un peut plus. sinon un grand merci pour la résolution des chaine de caractère mais si je ne le réinitialise pas est-ce que je ne risque pas de surcharger la mémoire ???
La méthode que te donne zoroastre ne peut pas "déraper" car si tu regarde le code de plus prés tu remarquera ceci :
if(dataBufferIndex == BUFFERSIZE){dataBufferIndex = 0; break; }
Si BUFFERSIZE octets on était reçu alors on replace le curseur du tableau à 0 et on "casse" la boucle.
Si tu veut vraiment vider "à la main" le buffer du port série tu peut utiliser Serial.flush();