Bonjour,
Comme cité dans le titre, je suis mené à réaliser un programme sous Arduino qui permet le couplage automatique entre le réseau et un alternateur, donc il faut vérifier tout d'abord la tension, la fréquence et le déphasage, puis la synchronisation, mon programme permet de vérifier les trois premières conditions, mon problème, c'est quand je simule chaque partie indépendamment, ça marche à merveille, mais quand j'ai assemblé le tout, il m'affiche du n'importe quoi.. Le voilà mon programme :
Si vous voyez d'où vient le problème, veuillez me le signaler.Code:#include <LiquidCrystal.h> LiquidCrystal lcd(11,10,5,4,3,2); int tensiona=A0, tensionr=A1; // Noms des entrées analogiques A0 et A1 int Signr=13, Signa=12; // Entrées du signal carré float Va,Vr; // Initialiser la valeur avec laquelle on va comparer int A,R; // Variables d'entrées unsigned long ta,tr; boolean a1=0,b1=0, a2=0,b2=0; unsigned long fA,fR,T,t,t1; char message[]=""; void setup() { // put your setup code here, to run once: lcd.begin(16,2); // Initialiser LCD pinMode(tensiona,INPUT); // déclarer comme entrée pinMode(tensionr, INPUT); pinMode(Signr, INPUT); pinMode(Signa, INPUT); } void loop() { //lcd.clear(); A=analogRead(tensiona); // A reçoit la valeur de l'entrée analogique while(A!=0) // Tant que le signal est non nul, on cherchera le max (l'amplitude du signal) {if(A > Va) {Va = A;} A=analogRead(tensiona); } R=analogRead(tensionr); while(R!=0) {if(R > Vr) {Vr = R;} R=analogRead(tensionr); } //if((Va*5)/1024==(Vr*5)/1024) //{lcd.setCursor(0,0); //lcd.print("YES");} //else {lcd.setCursor(0,0); //lcd.print("NO");} float SA=(float (Va)*5)/1024 ,SR=(float (Vr)*5)/1024; // On calcule les valeurs des entrées en Volt lcd.setCursor(11,0); // On affiche SA dans la première ligne, première colonne lcd.print(SA); lcd.setCursor(11,1); lcd.print(SR); A=analogRead(tensiona); R=analogRead(tensionr); test0: { b1=a1; a1=digitalRead(Signa); // Lecture de la valeur de l'entrée if (a1==!b1 && a1==1) { t=millis(); goto test1; } else if(a1==b1) {goto test0;} } test1: { a1=digitalRead(Signa); if(a1==b1) { goto test2;} else {goto test1;} } test2: { a1=digitalRead(Signa); if(a1==!b1 && a1==1) {t1=millis(); T=(t1-t); fA=1000/((T)); sprintf(message,"fA=%d Hz",fA); lcd.begin(16,2); //utilisation d'un écran 16 colonnes et 2lignes lcd.print(message); //petit test pour vérifier quetout marche // On calcule la valeur de la fréquence //delay(500000); goto test0; } else if(a1==b1) {goto test2;} } a1=digitalRead(Signa); phase0: { b1=a1; a1=digitalRead(Signa); if (a1==!b1 && a1==1) {ta= millis();} else if (a1==b1) {goto phase0;} } phase1: {b2=a2; a2=digitalRead(Signr); if (a2==!b2 && a2==1) {tr= millis();} else if (a2==b2) {goto phase1;} } if(tr==ta) {lcd.setCursor(0,1); lcd.print("En phase");} else if (tr!=ta) {lcd.setCursor(0,1); lcd.print("En deph");} }
Merci et bonne journée
-----