Bonjour à tous,
Voilà après des heures à apprendre la prog sur un arduino, j'avoue, je suis coincé...
Pour faire simple, l'idée est de faire communiquer deux arduino via un récepteur et un émetteur.
Le premier arduino sera connecter sur le contact sec d'un inverseur dans un TGBT. Tant que le contact sera ouvert, celui ci enverra le message "ON". Lorsque l'inverseur s'actionnera, il enverra le message "OFF" (car le contact sera ouvert). Comme celà, j'aurais l'information comme quoi je suis hors réseau et que je suis basculé sur groupe électrogène.
Le second arduino devra recevoir le message. Si le message est "ON", tout va bien, aucune action. Si le message est "OFF", il action un relais (NO) qui donne l'info à un optimiseur de tension. En gros, je souhaite lors d'un passage sur groupe électrogène, faire du délestage !
Voilà le tableau
J'ai donc monté mes arduino mega (2560) sur une platine essai, avec un émetteur et récepteur Aurel, et installé la bibliothèque virtualWire.
J'ai lancé les prog test et la communication est niquel. J'ai un arduino qui envoi le message "HELLO" avec une incrémentation toutes les 2 sec.
J'ai donc fais une modif du programme. Si la pin 2 voit du 5V, elle envoi "ON" si plus de tension, elle envoi "OFF". Mais voilà où ça pose problème, mon arduino envoi une alternance de "OFF" "ON" "OFF" "ON" etc.
Voilà le programme en question:
#include <VirtualWire.h>
const int led_pin = 11;
const int transmit_pin = 22;
const int transmit_en_pin = 3;
const int inverter_pin = 2;
void setup()
{
// Initialise the IO and ISR
vw_set_tx_pin(transmit_pin);
vw_set_ptt_pin(transmit_en_pin);
vw_set_ptt_inverted(true); // Required for DR3100
vw_setup(2000); // Bits per sec
pinMode(led_pin, OUTPUT);
pinMode(2, INPUT);
}
void loop()
{
digitalWrite(2, HIGH);
digitalRead(2);
if (2, HIGH);
{
char msg[7] = {'O','N',};
digitalWrite(led_pin, HIGH); // Flash a light to show transmitting
vw_send((uint8_t *)msg, 7);
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(led_pin, LOW);
delay(5000);
}
if (2, LOW);
{ char msg[8] = {'O','F','F',};
digitalWrite(led_pin, HIGH); // Flash a light to show transmitting
vw_send((uint8_t *)msg, 8);
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(led_pin, LOW);
delay(5000);
}
}
Merci d'avance pour votre aide! (ps: c'est pas hyper propre, car j'ai modifié mon prog plusieurs fois pour essayé des choses... y aura donc des incohérences )