Inmiddels kan ik ook meerdere LED-strips tegelijk aansturen via dezelfde RS485-bus!
Maar nu zit ik met het probleem van collisions: ik wil later meer module gaan aansluiten (bijv. temperatuur-sensor) en ook LED-strips als groep kunnen aansturen. Hierdoor heb ik in het protocol een type-id en een groep-id toegevoegd. Het nadeel is dus dat als ik een hele groep tegelijk aan stuur, ze allemaal op exact hetzelfde moment reageren.
Ik heb inmiddels al wat rond gezocht en kwam een paar oplossingen tegen:
1. Alles toch afzonderlijk aansturen ipv als groep;
2. Geen response sturen bij een 'broadcast';
3. De verstuurde data zelf uitlezen en vergelijken. Als dit ongelijk is, is er een collision;
4. Eerst checken of de bus vrij is, dan een willekeurige periode (id * tijd) wachten, nogmaals checken en dan pas versturen.
Nu heb ik bij alle oplossing echter nadelen gevonden:
1. Een stuk minder mooi (tegen mijn principes

), meer code/loops aan de PC-kant en wellicht is het te zien als de strips niet tegelijk reageren.
2. Geen duidelijkheid of het allemaal goed is ontvangen.
3. Dit was volgens mij niet mogelijk met de MAX485 en zeker niet met mijn huidige printjes aangezien daar de receiver en transmitter niet tegelijk aangezet kunnen worden. Bovendien wordt de code in de microcontroller dan een stuk complexer omdat er niet altijd zomaar op de inkomende data moet worden gereageerd.
4. Het zou kunnen dat na de eerste check een tweede module ook gaat checken maar met een kortere wachttijd en ze daardoor dus alsnog beide op hetzelfde moment gaan zenden.
Nu lijkt optie 4 mij toch het meest geschikt. Het geschetste probleem kan zich eigenlijk alleen maar voordoen als de modules niet tegelijk worden aangesproken (dus geen broadcast). Op de PC kan ik er wel voor zorgen dat er niet meerdere modules afzonderlijk worden aangestuurd zonder eerste op antwoord te wachten.
Hoe zouden jullie dit aanpakken? Zie ik mogelijk nog een manier over het hoofd? Of is optie 4 inderdaad de beste manier om dit op te lossen? Zo ja, hoe kan ik het beste controleren of de bus in gebruik is? Normaal gesproken zou ik daar RXC voor gebruiken, maar die wordt pas gezet als de byte helemaal in de buffer zit. Gaat dat niet mis als twee modules exact tegelijk gaan zenden?