Bonsoir,
je cherche à interroger le port série d'un contrôleur de charge solaire, il s'agit d'un Smart Solar 75/15 de Victron qui dispose d'une sortie série en clair (Ve.Direct), qui envoie une trame toutes les secondes avec les informations utiles.
Mon code me permet aisément d'analyser chaque trame, mais je n'ai pas besoin de l'interroger toutes les secondes, je préférais ne tenir compte de cette source d'information qu'à la demande (et ignorer les autres trames) et disposer du temps libre pour faire tourner des trucs qui durent plus d'une seconde ou tout simplement dormir (sleep_8s) pour économiser de la batterie.
J'ai donc deux problèmes:
Comment interroger plutôt que de subir les envois
Comment inhiber les interruptions afin de "dormir"
#include <Wire.h>
#include <SoftwareSerial.h>
String label, val;
int tension;
SoftwareSerial mySerial(2, 3); // RX, TX
void setup()
{
Serial.begin(19200);
mySerial.begin(19200);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(13, OUTPUT);
}
void loop()
{
if (mySerial.available())
{
label = mySerial.readStringUntil('\t');
val = mySerial.readStringUntil('\r\r\n');
if (label == "V"){
tension = val.toInt();
Serial.println(tension);
//activité série
digitalWrite(13, HIGH);
delay(50);
digitalWrite(13, LOW);
//soir
if (tension < 12000){
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
}
//matin
if (tension > 13000){
digitalWrite(5, LOW);
digitalWrite(4, HIGH);
}
}
}
}
Merci
Philippe