test_icp_cas_limite.ino (6,8 Ko)
Bonjour , voici le code qui tourne sur ma carte
#include <DFRobot_ICP10111.h>
DFRobot_ICP10111 icp;
// Fonction pour envoyer la commande
void sendCommand(uint8_t *data, size_t dataSize) {
// Envoi des données sur Serial
for (size_t i = 0; i < dataSize; i++) {
Serial.write(data[i]);
}
delay(50); // Ajout d'une pause (vous pouvez ajuster cette valeur selon vos besoins)
}
// Fonction pour calculer le CRC8
uint8_t crc_Update8(uint8_t *i_pbyBuf, size_t i_dwSize, uint8_t i_byCrc) {
const uint8_t kg_crc_abyTable8[] = {
// Tableau CRC8
0x00, 0x5e, 0xbc, 0xe2, 0x61, 0x3f, 0xdd, 0x83,
0xc2, 0x9c, 0x7e, 0x20, 0xa3, 0xfd, 0x1f, 0x41,
0x9d, 0xc3, 0x21, 0x7f, 0xfc, 0xa2, 0x40, 0x1e,
0x5f, 0x01, 0xe3, 0xbd, 0x3e, 0x60, 0x82, 0xdc,
0x23, 0x7d, 0x9f, 0xc1, 0x42, 0x1c, 0xfe, 0xa0,
0xe1, 0xbf, 0x5d, 0x03, 0x80, 0xde, 0x3c, 0x62,
0xbe, 0xe0, 0x02, 0x5c, 0xdf, 0x81, 0x63, 0x3d,
0x7c, 0x22, 0xc0, 0x9e, 0x1d, 0x43, 0xa1, 0xff,
0x46, 0x18, 0xfa, 0xa4, 0x27, 0x79, 0x9b, 0xc5,
0x84, 0xda, 0x38, 0x66, 0xe5, 0xbb, 0x59, 0x07,
0xdb, 0x85, 0x67, 0x39, 0xba, 0xe4, 0x06, 0x58,
0x19, 0x47, 0xa5, 0xfb, 0x78, 0x26, 0xc4, 0x9a,
0x65, 0x3b, 0xd9, 0x87, 0x04, 0x5a, 0xb8, 0xe6,
0xa7, 0xf9, 0x1b, 0x45, 0xc6, 0x98, 0x7a, 0x24,
0xf8, 0xa6, 0x44, 0x1a, 0x99, 0xc7, 0x25, 0x7b,
0x3a, 0x64, 0x86, 0xd8, 0x5b, 0x05, 0xe7, 0xb9,
0x8c, 0xd2, 0x30, 0x6e, 0xed, 0xb3, 0x51, 0x0f,
0x4e, 0x10, 0xf2, 0xac, 0x2f, 0x71, 0x93, 0xcd,
0x11, 0x4f, 0xad, 0xf3, 0x70, 0x2e, 0xcc, 0x92,
0xd3, 0x8d, 0x6f, 0x31, 0xb2, 0xec, 0x0e, 0x50,
0xaf, 0xf1, 0x13, 0x4d, 0xce, 0x90, 0x72, 0x2c,
0x6d, 0x33, 0xd1, 0x8f, 0x0c, 0x52, 0xb0, 0xee,
0x32, 0x6c, 0x8e, 0xd0, 0x53, 0x0d, 0xef, 0xb1,
0xf0, 0xae, 0x4c, 0x12, 0x91, 0xcf, 0x2d, 0x73,
0xca, 0x94, 0x76, 0x28, 0xab, 0xf5, 0x17, 0x49,
0x08, 0x56, 0xb4, 0xea, 0x69, 0x37, 0xd5, 0x8b,
0x57, 0x09, 0xeb, 0xb5, 0x36, 0x68, 0x8a, 0xd4,
0x95, 0xcb, 0x29, 0x77, 0xf4, 0xaa, 0x48, 0x16,
0xe9, 0xb7, 0x55, 0x0b, 0x88, 0xd6, 0x34, 0x6a,
0x2b, 0x75, 0x97, 0xc9, 0x4a, 0x14, 0xf6, 0xa8,
0x74, 0x2a, 0xc8, 0x96, 0x15, 0x4b, 0xa9, 0xf7,
0xb6, 0xe8, 0x0a, 0x54, 0xd7, 0x89, 0x6b, 0x35
};
while (i_dwSize--) {
i_byCrc = kg_crc_abyTable8[i_byCrc ^ *i_pbyBuf++];
}
return i_byCrc;
}
void setup(void) {
Serial.begin(115200);
while (icp.begin() != 0) {
Serial.println("Failed to initialize the sensor");
}
Serial.println("Success to initialize the sensor");
// Configuration du capteur
icp.setWorkPattern(icp.eNormal);
}
void loop(void) {
// Lecture des données du capteur
float pressure = icp.getAirPressure() * 0.00001; // Pression en bar
float temperature = icp.getTemperature(); // Température en degrés Celsius
// Vérification des conditions de pression et de température
if (pressure >= 0.3 && pressure <= 1.2 && temperature >= -127 && temperature <= 128) {
// Calcul de la masse théorique
float atmosphericPressure = 1.01325; // Pression atmosphérique standard en bar
float theoreticalMass = pressure / atmosphericPressure;
// Affichage des données
Serial.println("------------------------------------------");
Serial.println("Données du capteur : ");
Serial.print("Pression : ");
Serial.print(pressure, 4); // Affichage de la pression avec 4 décimales
Serial.println(" bar");
Serial.print("Température : ");
Serial.print(temperature);
Serial.println(" °C");
// Affichage de la masse théorique en décimal
Serial.print("Masse théorique (décimal) : ");
Serial.print(theoreticalMass, 3); // Affichage avec 3 décimales
// Affichage de la masse théorique en hexadécimal
Serial.print("Masse théorique (hex) : 0x");
uint16_t theoreticalMassHex = static_cast<uint16_t>(theoreticalMass * 1000); // Conversion en hexadécimal
Serial.print(theoreticalMassHex, HEX);
Serial.println();
// Construction de la trame
uint8_t data[] = {0x1B, 0x40, 0x91, 0x1F, 0x06,
lowByte(theoreticalMassHex), highByte(theoreticalMassHex),
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
// Calcul du CRC
uint8_t crc = crc_Update8(data, sizeof(data) - 1, 0); // Calcul du CRC8 pour les 34 premiers octets
data[sizeof(data) - 1] = crc; // Ajout du CRC à la fin de la trame
// Affichage du CRC envoyé en hexadécimal
Serial.print("CRC envoyé : 0x");
if (crc < 0x10) {
Serial.print("0"); // Assurez-vous d'afficher les valeurs hexadécimales avec deux chiffres
}
Serial.println(crc, HEX);
// Affichage de la trame en hexadécimal
Serial.println("Trame envoyée : ");
for (size_t i = 0; i < sizeof(data); i++) {
if (data[i] < 0x10) {
Serial.print("0"); // Ajout d'un zéro si la valeur est inférieure à 0x10
}
Serial.print(data[i], HEX);
Serial.print(" ");
}
Serial.println();
// Envoi de la commande avec break et timeout
sendCommand(data, sizeof(data));
} else {
// Construction de la trame de valeurs nulles
uint8_t data[] = {0x1B, 0x40, 0x91, 0x1F, 0x06,
0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
// Calcul du CRC
uint8_t crc = crc_Update8(data, sizeof(data) - 1, 0); // Calcul du CRC8 pour les 34 premiers octets
data[sizeof(data) - 1] = crc; // Ajout du CRC à la fin de la trame
// Affichage du CRC envoyé en hexadécimal
Serial.print("CRC envoyé : 0x");
if (crc < 0x10) {
Serial.print("0"); // Assurez-vous d'afficher les valeurs hexadécimales avec deux chiffres
}
Serial.println(crc, HEX);
// Affichage de la trame en hexadécimal
Serial.println("Trame envoyée : ");
for (size_t i = 0; i < sizeof(data); i++) {
if (data[i] < 0x10) {
Serial.print("0"); // Ajout d'un zéro si la valeur est inférieure à 0x10
}
Serial.print(data[i], HEX);
Serial.print(" ");
}
Serial.println();
// Envoi de la commande avec break et timeout
sendCommand(data, sizeof(data));
}
delay(1000);
}