Pb Arduino uno / broche Tx

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

Il faut mettre le code dans le message. Je viens de le faire pour toi.
Les personnes qui consultent le forum depuis leur téléphone ne peuvent pas charger et visualiser code

Bonjour mlajm

J'ai fait l'essai de ton programme, j'ai "contourné" la sonde, je n'ai pas ce modèle. Tout fonctionne bien que ce soit avec le câble USB ou alimenté par powerbank 5V.
Par contre, si je ne "contourne" pas la sonde, plus de flash sur la LED Tx (programme bloqué?).
Question, comment est alimentée ta sonde, quelle différence entre connecté USB et powerbank?

Cordialement
jpbbricole

avez vous connecté les GNDs des 2 cartes ??

déja meme sans connecté l'arduino à ma deuxième carte , j'ai mis la sonde sur la broche TX et j'aurai le 50Hz , alors que si j'alimente l'arduino par PC j'aurai la trame avec le signal propre

où est le GND ??

GND c'est le GND de l'Arduino

?? ça veut dire quoi ?

Quand vous connectez les 2 arduinos il faut que le Tx du premier soit connecté au Rx du second et que le GND du premier soit connecté au GND du second (et bien sûr que les tensions soient compatibles)

expliquez concrètement ce que vous avez fait ? quelle est cette sonde et comment est-elle connectée ?

j'ai alimenté l'arduino avec le pc : le rx et tx de l'arduino sont relié aux tx /rx d'une autre carte (pareille pour le GND aussi), dans ce cas l'arduino envoie une trame et tout fonctionne correctement.
Mon but est d'alimenter l'arduino via une batterie au lieu du pc, dans ce cas j'ai plus de trame sur Tx (que de 50Hz). j'ai dissocié les 2 cartes pour voir le problème provient de quel coté et j'ai trouvé que l'arduino lorsqu'elle est alimenté par batterie j'ai eu le soucis sur la broche TX

je ne comprends pas ce que vous dites - c'est quoi ce 50Hz ?

Signal de bruit sinusoïdale de fréquence 50Hz

OK - mesuré entre la pin Tx et GND de l'arduino - sur un oscilloscope - c'est ça ?

avec quelle amplitude de tension ?

Dans le cas ou l'arduino est alimentée par le PC , sur TX j'ai bien le 5Vet je vois sur l'oscillo les données.
Dans le ca ou L'arduino est alimentée via port jack (adaptateur 12V/1.5A) je mesure bien le 12V sur la broche Vin et j'ai 5V sur la broche 5V , par contre la led de TX ne s'allume pas et j'aurai une allure sinusoïdale avec un amplitude 80V .
Dans le cas ou l'arduino est alimentée via la broche Vin par une batterie 8.4V ,j'aurai aussi une allure sinusoïdale avec un amplitude 4V. J'ai pensé que peut être tension de batterie ou de l'adaptateur n'est pas assez stable comme celle de port USB mais je ne suis pas sur de ça.

80V ???

Bonjour,
Est ce qu'il une référence de batterie recommandée à être utilisé avec Arduino ? à on avis puisque le montage fonctionne avec le port USB , je pense c'est un problème provient du batterie ou adaptateur.

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