Recuperation Canbus et affichage sur Nextion

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.

Merci

Bonjour guizmo84

Je ne peut par t'aider à filtrer, mais pour afficher sur Nextion, peut-être :wink:
Tu peux utiliser une bibliothèque
image

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);
}

Le programme Nextion:
Text_Nextion.zip (235.3 KB)

Cordialement
jpbbricole

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

Oui, c'est un "métier" où il faut s'obstiner :wink:

Je ne connais pas encore, CAN Bus, mais j'ai commandé un UNO R4, je vais pouvoir étudier.

A+
Cordialement
jpbbricole

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.