Bonjour à tous, je sais que le sujet du canbus a souvent été évoqué mais je ne m'en sors pas, étant tout nouveau dans la programmation Arduino et auto.
Mon projet : via un MCP2515 récupérer les données vitesse, RPM, tension (pour commencer) d'un audi TT mk2 et les envoyer sur un Nextion pour remplacer le cluster (odb) entre les compteur à aiguille.
Coté Nextion ça marche, j'arrive à simuler des valeurs aléatoire et les données bougent bien.
Coté Canbus, je suis entrain de monter un sniffeur avec un arduino uno et le mcp2515 pour récupérer les données et ensuite les "trier" pour déterminer lesquelles sont celles que je veux.
Ensuite je remettrai mon MCP2515 sur mon arduino uno final.
C'est la suite où je suis bcp moins à l'aise. comment filtrer ces données et les envoyer au Nextion comme je le ferai avec une variable.
J'ai choisi le Nextion pour la faciliter de création d'interface mais je peux aussi le remplacer par un TFT si plus adéquat pour vous.
L'étape suivante sera de pouvoir interagir avec l arduino via une appli mobile (choix d'un thème de couleur par exemple)
Enfin, la creation d'un PCB incluant un arduino, le mcp2515 et un regulateur de tension 12V vers 5V pour alimenter la carte avec les tension de la voiture (brancher sur le compteur)
d'ailleurs si quelqu'un à deja les PID audi A3 ou TT mk2 ça m'aiderai bcp, meme si je ferai quand même le sniffeur pour apprendre.
Je ne peut par t'aider à filtrer, mais pour afficher sur Nextion, peut-être
Tu peux utiliser une bibliothèque
ou faire ça "à al main", ce n'est pas très compliqué.
Je t'ai fait un exemple qui affiche un chiffre qui s'incrémente et un texte qui alterne Gauche et Droite.
Le programme Arduino:
/*
Name: Test_Nextion.ino
Created: 22.01.2024
Author: jpbbricole
*/
//------------------------------------- Nextion (next)
enum nextObjIndex {nextObjNum, nextObjTxt}; // Type d'objets Nextion
String canDirection = ""; // Texte à evoyer à Nextion
int canRpm = 0; // Valeur à envoyer à Nextion
void setup()
{
Serial.begin(9600);
}
void loop()
{
canDirection = (canDirection =="Gauche") ? "Droite" : "Gauche";
canRpm ++;
nextSendValue(nextObjTxt, "t0", canDirection); // Envoi du texte
nextSendValue(nextObjNum, "n0", String(canRpm)); // Envoi de la valeur numérique
delay(1000);
}
void nextSendValue(int objectType, String objectName, String objectData)
{
String nextData = "";
switch (objectType)
{
case nextObjNum:
nextData = objectName + ".val=" + objectData;
break;
case nextObjTxt:
nextData = objectName + ".txt=\"" + objectData + "\"";
break;
}
for (int i = 0; i < nextData.length(); i++) // Envoi de chaque caractère, l'un après l'autre
{
Serial.write(nextData[i]);
}
nextSendEnd();
delay(30);
}
void nextSendEnd() // Fin de transmission
{
Serial.write(0xff); //We need to write the 3 ending bits to the Nextion as well
Serial.write(0xff); //it will tell the Nextion that this is the end of what we want to send.
Serial.write(0xff);
}
Merci jpb, ça j'y arrive, j'ai réaliser un compteur qui change l'affichage de la vitesse, des rpm et de la température de facon aléatoire avec une variable arduino. J'arrive aussi à afficher et masquer des icones donc on va dire que la partie Nextion fonctionnera.
Mon pb ca sera plus, récupérer les infos via le canbus (a force je trouverai) et ces valeurs les envoyer vers le nextion.
En tout cas merci d'avoir pris le temps de vouloir m'aider