Hi
In meinem CAN Bus benutze ich auf Uno/Nano/Mega(-Clon) CAN-Module per SPI.
Die verwendete Library "CAN_BUS_Shield-master in Version 1.0.0"
aus der library.properties :
name=CAN-BUS Shield
version=1.0.0
author=Seeed Studio
maintainer=Seeed Studio <techsupport@seeed.cc>
sentence=Arduino library to control CAN-BUS Shield.
paragraph=Arduino library to control CAN-BUS Shield.
category=Device Control
url=https://github.com/Seeed-Studio/CAN_BUS_Shield
architectures=*
Mein Bestreben war es, mir einen Fehler-Code ausgeben zu lassen, wenn der Arduino Probleme bekommt.
Z.B. wollte ich die LED 'L' (D13) zwei Mal aufblitzen lassen, wenn bereits im setup() die Initialisierung des CAN-Modul fehlschlägt.
Soweit - so wenig Funktion zeigte sich
D13 ist SPI-Clock, sollte also bereits ein OUTPUT sein - egal, pinMode eingefügt, ohne Änderung.
In der Lib gesucht, ob's eine Methode gibt, womit ich das Modul 'beenden' kann - ist nicht vorgesehen.
In der Referenz gesucht, ob ich SPI beenden kann - zumindest hat spi dafür die Methode .end() - nur will ich nicht verstehen, wie ich Das anwenden kann - ob's mir hilft ist Da noch nicht ganz raus.
Momentan habe ich das Problem, daß digitalWrite auf D13 rein gar Nichts an der LED auslöst.
Meine Intuition geht in die Richtung, daß, wenn ich SPI deaktiviere, ich wieder Herr über D13 werden - lasse mich Da gerne belehren - geiler fände ich, wenn D13 mir was vorblinkt.
SPI muß danach nicht wieder aktiviert werden - das Blinken ist bis zu einem WatchDog-Reset (8 Sekunden) - der Versuch, beim nächsten Starten Alles besser hinzubekommen.
Resets werden ausgelöst:
- CAN-Init fail in setup() (2x Blitzen)
- keine CAN-Nachricht empfangen über 72 Sekunden (willkürliche Zeit) (5x Blitzen)
- Reset-Befehl via CAN (8x Blitzen)
Das Blitzen passiert per State-Maschine in einer Endlos-Schleife bis zum Reset.
Wer einen Weg für mich hat, möge bitte in Erscheinung treten
MfG
Edit
Thread als Gelöst markiert
Lösung: SPI.end(); beendet den Zugriff der SPI-Hardware auf die SPI-Pins, somit kann wieder 'normal' mit den Pins gearbeitet werden.
Normal müsste ein SPI.begin(); danach SPI wieder aktivieren - hier unnötig, da per Reset der Sketch eh neu gestartet wird.