J'ai un projet Arduino qui utilise un module radio nRF24l01 + sur SPI (en utilisant cette bibliothèque: http://tmrh20.github.io/RF24/) et un lecteur RFID sur logiciel. Je dors mon Arduino et je les ai réveillés par interruption lorsqu'un message a été reçu ou qu'une étiquette RFID est prête à être lue. Le RFID est sur les broches 4 et 5, tandis que le nRF couvre les broches 9 - 13 ainsi que le numéro 2 pour son interruption.Softwareserial Arduino s'affrontant avec SPI?
Ces deux modules fonctionnent correctement avec le code de veille et d'interruption séparément, mais lorsqu'ils sont combinés dans une seule esquisse, l'Arduino se réveille à cause d'une étiquette RFID, le lit, puis essaie d'envoyer quelque chose par radio et alors il suffit de se bloquer en attendant l'appel de la librairie write() pour retourner.
Je me suis un peu penchée sur les deux bibliothèques, mais je ne peux pas faire la tête ou la queue de la bibliothèque de logiciels. Il semble peut-être utiliser les mêmes ISR dans les coulisses que mon module nRF, mais je ne vois pas immédiatement pourquoi cela devrait être un gros problème, et je ne comprends pas pourquoi cela devrait provoquer le blocage de la radio.
Je sais que cela peut être long, mais est-ce que quelqu'un a une idée de ce qui pourrait se passer? Peut-être que quelqu'un connaît ces bibliothèques? Des pensées sur un travail autour? Merci.
voulez-vous dire le logiciel SPI avec le lecteur RFID? –
Le lecteur RFID utilise le logiciel logiciel, donc utilise le protocole de type UART. Le nRF utilise SPI. – MaxStrange
donc je prends les ports série du matériel sont tous pris? Quoi qu'il en soit, ils devraient travailler ensemble très bien. Comment la radio est-elle alimentée? une fourniture séparée? Est-ce un uno? si c'est uno et que vous utilisez le 3.3v, j'utiliserais une alimentation 3.3v séparée car la capacité actuelle est assez petite et l'ajout d'un autre périphérique par exemple pourrait l'empêcher de fonctionner. Cependant, si ce n'est pas le cas, alors après avoir lu depuis la RFID, désactivez la série logicielle afin qu'elle ne désactive pas les interruptions (au cas où elle en recevrait une autre pendant que vous essayez de transmettre). voir si ça marche. c'est un problème de logiciel ou de puissance avec la radio –