Alors, suite à mes dernières expériences et constatations, voici un petit résumé de la situation actuelle. Quand j'ai commencé à réfléchir à cette idée de réseaux de modules sur laquelle je suis parti, j'avais en tête un réseau avec des connections un peu dans tous les sens. Les découvertes que j'ai faites sur les protocoles sériel et I2C me conduisent à la conclusion qu'aucun de ces deux protocoles ne permet, a priori, ce type de réseau. Cependant, ils permettent d'autres types de réseaux.
J'ai illustré cette idée dans le schéma ci-joint. De manière générale, j'identifie quatre types de réseaux:
La ligne a l'avantage d'être simple, par contre elle est unidirectionnelle. Cette lacune est corrigée par le cercle qui est une ligne dont la fin est reliée au début: l'information peut être transmise dans les deux directions en envoyant un message qui traverse l'ensemble des noeuds et revient. L'arbre impose un rapport hiérarchique strict mais permet de communiquer d'un noeud plus élevé vers plus d'un noeud en bas (en fait la ligne est une sorte d'arbre très simple...). Enfin le rhizome serait plus le type de réseau que j'avais en tête au départ, où l'information peut circuler un peu dans tous les sens.
Bref, ces contraintes sont acceptables et même intéressantes, entre autres parce qu'elles rappelent des formes naturelles. À suivre dès demain.
Software Serial
La librairie SoftwareSerial de Arduino pourrait permettre de faire des structures en rhizome ou en arbre. Elle impose cependant des contraintes solides, comme le fait de ne pas pouvoir avoir d'interrupts ie. il n'y a pas de Serial.available() et la fonction read() attends jusqu'à ce que des données arrivent. On pourrait cependant mettre un timeout sur ce read() pour éviter les boucles sans fin. Au fond c'est comme si les modules devaient être en écoute active pour pouvoir recevoir un message (contrainte intéressante).
L'autre contrainte: normalement ça devrait fonctionner avec une clock interne MAIS rien ne le garantit. Il faudra faire des tests.
Il existe une version de la SoftwareSerial library qui utilise des interrupts, mais apparamment elle ne fonctionne pas avec la clock interne.
Références:
http://www.ladyada.net/make/eshield/AFSoftSerial.zip
http://forums.ladyada.net/viewtopic.php?t=7072&sid=80406b85d80616f5cd610...
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1202245205/28
http://www.arduino.cc/en/Reference/SoftwareSerial
Software serial
Il y a une option également qui pourrait briser ce modèle par rapport au sériel. En effet, le sériel "hardware" n'a qu'une entrée et une sortie. Mais on peut utiliser la communication sérielle sur d'autres pins... il existe même une librarie pour ça avec Arduino:
http://arduino.cc/en/Reference/SoftwareSerial
Mauvais modèle?
En fait je pense que ma vision du protocole I2C est toujours déficiente. Ça fonctionne plutôt sur un modèle de bus. Enfin, toutes mes expériences avec ça me posent des problèmes de synchronisation, j'aime pas trop le fait d'utiliser des interrupts, ça demande de réfléchir d'une manière différente...
Je vais m'essayer avec le sériel maintenant.
Post new comment