Buenas amigos, compre para mi hijo unos sensores TPMS para las ruedas del coche y quería visualizar los datos en una pantalla, de momento en el puerto serie, para después implantarlo en alguna pantalla.
El fabricante me dio estos dados de la trama Can que manda cada sensor:
ID 0x01 Sensor Delantero Derecho, 0x02 Delanter Izquierdo, 0x03 Trasero Derecho, 0x04 Trasero Izq.
Bufer = [D0, D1, D2, D3, D4, D5, D6]
Donde:
D1 y D2 es la presión en Kpa....................0x0100 son 256 kpa
D4 es la temperatura en ºC.......................0x18 son 30ºC
D6 es el voltaje de la pila en Voltios...........0x21 son 3,3v
Tengo problemas para visualizar la presión ya que me viene en dos byte y la tengo que pasar a bares y con decimales.
Y tambien tengo problemas para visualizar el voltaje de la batería
Esto es lo que he echo,de momento para probar solo lo hice con un sensor.
Resultado:
1.- La temperatura me funciona prefectamente.
2.- La Presion también me funciona pero me sale en Kpa,no se si lo hice bien, como la paso a bares.
3.- La bateria me imprime 33v en vez de 3,3v, como hago para que me salga 3,3v
Las pruebas las hice por que el sensor trae un pulsador oculto que con un pincho lo dejas presionado 30seg y te lanza los datos de 0x0100, 0x18 y 0x21 que puse arriba
#include <SPI.h>
#include "mcp_can_h"
int Presion = 0;
int temp = 0;
int bat = 0;
const int SPI_CS_PIN = 9;
MCP_CAN CAN(SPI_CS_PIN);
void setup() {
Serial.begin(9600);
if (CAN_OK == CAN.begin(CAN_500KBPS)) {
Serial.println("CAN BUS Shield init ok!");
}
else {
Serial.println("CAN BUS Shield init fail");
Serial.println("Init CAN BUS Shield again");
delay(100);
}
}
void loop() {
unsigned char len = 0;
unsigned char buf[8];
while (CAN_MSGAVAIL == CAN.checkReceive()) {
CAN.readMsgBuf(&len, buf);
switch (CAN.getCanId()) {
case 0x01:
temp = buf[4];
Serial.print("Temperatura= ");
Serial.println(temp);
bat = buf[6];
Serial.print("Bateria= ");
Serial.println(bat);
Presion = buf[1] + buf[2];
Serial.print("Presion= ");
Serial.println(Presion);
break;
}
}
}