Hallo, hab seit neuestem eine Uno R4 minima, nun versuch ich daten per canbus aus einem BMS auszuwerten, das BMS schickt daten wie Ladezustand, Temperaturen, Zellspannung und vielles mehr, bin nicht der Profiprogrammierer, nur hin und wieder was einfaches, mit der MCP2515 hab ich das vor langer Zeit für ein Motorsteuergerät hinbekommen, aber nicht mit dem sn65hvd230 der ja am Uno hängt, bekomme ständig fehler beim upload, vielleicht schinmal jemmand sowas realisiert ?
Beim separat zu installierenden Core für die IDE wird eine CAN-Bibliothek mitgeliefert, die auch Beispiele wie CANRead.ino hat. Nutze zunächst dieses Beispiel zum Testen.
Hi, ja das funktioniert wunderbar, daten kommen an, ich weis nur noch nicht , wie ich die daten aufbereite, und die jeweiligen datenlängen aufsplite und auswerte.
Also, ich hab das hier mal mit nem can adapter savvyCan simuliert, sonst müsste ich ans Auto rennen, eine Drehzal wird simuliert und die stellt sich aus 2 datenbits zusammen, datenbit 5+6 sollte 3000UPM ergeben
Was jetzt noch ein Rätsel ist wie man aus dem CanMsg Objekt die Bytes vernünftig bekommt.
Da der R4 relativ neu ist: Google mal wie mit dieser Library umzugehen ist, evtl. hilft auch ein Post im Englischsprachigen Forum unter R4.
ja genau das ist das Problem, es ist zu neu, und die Dokumentation ist auch nicht das wahre Arduino UNO R4 Minima CAN Bus, im internationalen Forum ist auch nix zu finden, da steht einer auch vor dem selben Problem
/** CAN data Frame */
typedef struct st_can_frame
{
uint32_t id; ///< CAN ID.
can_id_mode_t id_mode; ///< Standard or Extended ID (IDE).
can_frame_type_t type; ///< Frame type (RTR).
uint8_t data_length_code; ///< CAN Data Length Code (DLC).
uint32_t options; ///< Implementation-specific options.
uint8_t data[CAN_DATA_BUFFER_LENGTH]; ///< CAN data.
} can_frame_t;
Das Problem ist, ein Anfänger kauft sich eine neue, noch wenig verbreitete Hardware. Mit einem ESP32 oder einem UNO R3 mit MCP2515 würde sich das unkomplizierter darstellen.
Bitte erweitere das Beispiel:
void loop()
{
if (CAN.available())
{
CanMsg const msg = CAN.read();
Serial.println(msg);
Serial.println(msg.id); // es geht um diese Zeilen
Serial.println(msg.data[6]);
Serial.println(msg.data[7]);
}
}
das ist schonmal was, ja ich weis ich bin ein Anfänger, das Board hab ich mir geholt weil der schon Can Kann, und der preis echt gut ist, ich versuch jetzt das ganze mal mit switch case zu machen, damit auch mehrere id´s eingelesen und ausgewertet werden, danke für die ersten schritte