unit Unit1; interface uses Windows, Messages, Graphics, Controls, Forms, Dialogs, IdWinsock2, stdctrls, SysUtils, Classes, IdBaseComponent, IdAntiFreezeBase, IdAntiFreeze, IdComponent, IdUDPBase, IdUDPClient, IdStack, IdUDPServer, IdSocketHandle, ExtCtrls, Buttons, ImgList, Gauges; type TForm1 = class(TForm) IdUDPClient1: TIdUDPClient; GroupBox3: TGroupBox; GroupBox4: TGroupBox; GroupBox5: TGroupBox; GroupBox6: TGroupBox; SpeedButton2: TSpeedButton; SpeedButton3: TSpeedButton; SpeedButton4: TSpeedButton; SpeedButton5: TSpeedButton; Label1: TLabel; Label2: TLabel; SpeedButton18: TSpeedButton; SpeedButton19: TSpeedButton; SpeedButton20: TSpeedButton; SpeedButton21: TSpeedButton; Bevel1: TBevel; SpeedButton34: TSpeedButton; SpeedButton35: TSpeedButton; SpeedButton36: TSpeedButton; SpeedButton37: TSpeedButton; SpeedButton50: TSpeedButton; SpeedButton51: TSpeedButton; SpeedButton52: TSpeedButton; SpeedButton53: TSpeedButton; SpeedButton66: TSpeedButton; SpeedButton67: TSpeedButton; GroupBox1: TGroupBox; Label4: TLabel; Timer1: TTimer; GroupBox2: TGroupBox; GroupBox7: TGroupBox; GroupBox8: TGroupBox; GroupBox9: TGroupBox; GroupBox10: TGroupBox; GroupBox11: TGroupBox; GroupBox14: TGroupBox; Panel1: TPanel; Panel2: TPanel; Panel3: TPanel; Panel4: TPanel; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; Panel5: TPanel; Label15: TLabel; Panel6: TPanel; Label16: TLabel; Bevel2: TBevel; GroupBox12: TGroupBox; Gauge1: TGauge; Label3: TLabel; Label6: TLabel; Label7: TLabel; Gauge2: TGauge; Gauge3: TGauge; Gauge4: TGauge; Gauge5: TGauge; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label17: TLabel; Label18: TLabel; Label19: TLabel; Label20: TLabel; Label21: TLabel; SpeedButton1: TSpeedButton; procedure FormCreate(Sender: TObject); procedure SpeedButton2Click(Sender: TObject); procedure SpeedButton3Click(Sender: TObject); procedure SpeedButton4Click(Sender: TObject); procedure SpeedButton18Click(Sender: TObject); procedure SpeedButton19Click(Sender: TObject); procedure SpeedButton20Click(Sender: TObject); procedure SpeedButton5Click(Sender: TObject); procedure SpeedButton9Click(Sender: TObject); procedure SpeedButton21Click(Sender: TObject); procedure SpeedButton25Click(Sender: TObject); procedure SpeedButton34Click(Sender: TObject); procedure SpeedButton35Click(Sender: TObject); procedure SpeedButton36Click(Sender: TObject); procedure SpeedButton37Click(Sender: TObject); procedure SpeedButton41Click(Sender: TObject); procedure SpeedButton50MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure SpeedButton50MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure SpeedButton51MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure SpeedButton51MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure SpeedButton52MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure SpeedButton52MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure SpeedButton53MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure SpeedButton53MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure SpeedButton57MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure SpeedButton66Click(Sender: TObject); procedure SpeedButton67Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; var Form1: TForm1; MDP : String; ReceivedString: String; VALEUR : Integer; TEMPERATURE : Real; QUANTUM : Real; TENSION : Real; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); // Paramètres par défaut au lancement de l'application. begin IdUDPClient1.Port:=5030; // Port par défaut. IdUDPClient1.Host:='192.168.0.9'; // Adresse IP locale par défaut. MDP:='ABCDEFGHIJKLMNOP'; // Mot de passe par défaut toujours composé de 16 caractères !!! IdUDPClient1.ReceiveTimeout:=1000; // Délais maxi d'une seconde pour que le périphérique à base d'ENC28J60 réponde. Timer1.Enabled:=False; // Désactivation du timer 1 au lancement du programme. Timer1.Interval:=500; // Intervalle de 500ms pour la Lecture des données présentes en entrées. if MessageDlg('Voulez-vous activer la communication Ethernet pour la lecture en boucle des données présentes sur les entrées de l''interface ?',mtInformation,[mbYes,mbNo],0)=mrYes then begin Timer1.Enabled:=True; // Active le timer 1 end else begin Timer1.Enabled:=False; // Desactive le timer 1 end; end; //************************** //************************** //** GESTION DES 4 RELAIS ** //************************** //************************** // //****************** //** COMMANDES ON ** //****************** procedure TForm1.SpeedButton2Click(Sender: TObject); // ON Relais 1 begin IdUDPClient1.Send(MDP+'S01N'); ReceivedString := IdUDPClient1.ReceiveString(); // L'interface est-elle présente sur le réseau ? if ReceivedString = '' then begin MessageDlg ('L''interface ne répond pas. Le programme va s''arrêter...', mtInformation,[mbOk],0); Application.Terminate; // Si l'interface ne répond pas à la requête, on quitte le programme (interface déconnectée du réseau). end; end; procedure TForm1.SpeedButton3Click(Sender: TObject); // ON Relais 2 begin IdUDPClient1.Send(MDP+'S02N'); ReceivedString := IdUDPClient1.ReceiveString(); // L'interface est-elle présente sur le réseau ? if ReceivedString = '' then begin MessageDlg ('L''interface ne répond pas. Le programme va s''arrêter...', mtInformation,[mbOk],0); Application.Terminate; // Si l'interface ne répond pas à la requête, on quitte le programme (interface déconnectée du réseau). end; end; procedure TForm1.SpeedButton4Click(Sender: TObject); // ON Relais 3 begin IdUDPClient1.Send(MDP+'S03N'); ReceivedString := IdUDPClient1.ReceiveString(); // L'interface est-elle présente sur le réseau ? if ReceivedString = '' then begin MessageDlg ('L''interface ne répond pas. Le programme va s''arrêter...', mtInformation,[mbOk],0); Application.Terminate; // Si l'interface ne répond pas à la requête, on quitte le programme (interface déconnectée du réseau). end; end; procedure TForm1.SpeedButton5Click(Sender: TObject); // ON Relais 4 begin IdUDPClient1.Send(MDP+'S04N'); ReceivedString := IdUDPClient1.ReceiveString(); // L'interface est-elle présente sur le réseau ? if ReceivedString = '' then begin MessageDlg ('L''interface ne répond pas. Le programme va s''arrêter...', mtInformation,[mbOk],0); Application.Terminate; // Si l'interface ne répond pas à la requête, on quitte le programme (interface déconnectée du réseau). end; end; procedure TForm1.SpeedButton9Click(Sender: TObject); begin end; //********************** //** FIN COMMANDES ON ** //********************** // // //******************* //** COMMANDES OFF ** //******************* procedure TForm1.SpeedButton18Click(Sender: TObject); // OFF Relais 1 begin IdUDPClient1.Send(MDP+'S01F'); ReceivedString := IdUDPClient1.ReceiveString(); // L'interface est-elle présente sur le réseau ? if ReceivedString = '' then begin MessageDlg ('L''interface ne répond pas. Le programme va s''arrêter...', mtInformation,[mbOk],0); Application.Terminate; // Si l'interface ne répond pas à la requête, on quitte le programme (interface déconnectée du réseau). end; end; procedure TForm1.SpeedButton19Click(Sender: TObject); // OFF Relais 2 begin IdUDPClient1.Send(MDP+'S02F'); ReceivedString := IdUDPClient1.ReceiveString(); // L'interface est-elle présente sur le réseau ? if ReceivedString = '' then begin MessageDlg ('L''interface ne répond pas. Le programme va s''arrêter...', mtInformation,[mbOk],0); Application.Terminate; // Si l'interface ne répond pas à la requête, on quitte le programme (interface déconnectée du réseau). end; end; procedure TForm1.SpeedButton20Click(Sender: TObject); // OFF Relais 3 begin IdUDPClient1.Send(MDP+'S03F'); ReceivedString := IdUDPClient1.ReceiveString(); // L'interface est-elle présente sur le réseau ? if ReceivedString = '' then begin MessageDlg ('L''interface ne répond pas. Le programme va s''arrêter...', mtInformation,[mbOk],0); Application.Terminate; // Si l'interface ne répond pas à la requête, on quitte le programme (interface déconnectée du réseau). end; end; procedure TForm1.SpeedButton21Click(Sender: TObject); // OFF Relais 4 begin IdUDPClient1.Send(MDP+'S04F'); ReceivedString := IdUDPClient1.ReceiveString(); // L'interface est-elle présente sur le réseau ? if ReceivedString = '' then begin MessageDlg ('L''interface ne répond pas. Le programme va s''arrêter...', mtInformation,[mbOk],0); Application.Terminate; // Si l'interface ne répond pas à la requête, on quitte le programme (interface déconnectée du réseau). end; end; procedure TForm1.SpeedButton25Click(Sender: TObject); begin end; //*********************** //** FIN COMMANDES OFF ** //*********************** // // //********************** //** COMMANDES TOGGLE ** //********************** procedure TForm1.SpeedButton34Click(Sender: TObject); // Toogle Relais 1 begin IdUDPClient1.Send(MDP+'S01T'); ReceivedString := IdUDPClient1.ReceiveString(); // L'interface est-elle présente sur le réseau ? if ReceivedString = '' then begin MessageDlg ('L''interface ne répond pas. Le programme va s''arrêter...', mtInformation,[mbOk],0); Application.Terminate; // Si l'interface ne répond pas à la requête, on quitte le programme (interface déconnectée du réseau). end; end; procedure TForm1.SpeedButton35Click(Sender: TObject); // Toogle Relais 2 begin IdUDPClient1.Send(MDP+'S02T'); ReceivedString := IdUDPClient1.ReceiveString(); // L'interface est-elle présente sur le réseau ? if ReceivedString = '' then begin MessageDlg ('L''interface ne répond pas. Le programme va s''arrêter...', mtInformation,[mbOk],0); Application.Terminate; // Si l'interface ne répond pas à la requête, on quitte le programme (interface déconnectée du réseau). end; end; procedure TForm1.SpeedButton36Click(Sender: TObject); // Toogle Relais 3 begin IdUDPClient1.Send(MDP+'S03T'); ReceivedString := IdUDPClient1.ReceiveString(); // L'interface est-elle présente sur le réseau ? if ReceivedString = '' then begin MessageDlg ('L''interface ne répond pas. Le programme va s''arrêter...', mtInformation,[mbOk],0); Application.Terminate; // Si l'interface ne répond pas à la requête, on quitte le programme (interface déconnectée du réseau). end; end; procedure TForm1.SpeedButton37Click(Sender: TObject); // Toogle Relais 4 begin IdUDPClient1.Send(MDP+'S04T'); ReceivedString := IdUDPClient1.ReceiveString(); // L'interface est-elle présente sur le réseau ? if ReceivedString = '' then begin MessageDlg ('L''interface ne répond pas. Le programme va s''arrêter...', mtInformation,[mbOk],0); Application.Terminate; // Si l'interface ne répond pas à la requête, on quitte le programme (interface déconnectée du réseau). end; end; procedure TForm1.SpeedButton41Click(Sender: TObject); begin end; //************************** //** FIN COMMANDES TOGGLE ** //************************** // // //*************************** //** COMMANDES MOMENTANEES ** //*************************** procedure TForm1.SpeedButton50MouseDown(Sender: TObject; // Relais 1 enfoncé Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin IdUDPClient1.Send(MDP+'S01N'); ReceivedString := IdUDPClient1.ReceiveString(); // L'interface est-elle présente sur le réseau ? if ReceivedString = '' then begin MessageDlg ('L''interface ne répond pas. Le programme va s''arrêter...', mtInformation,[mbOk],0); Application.Terminate; // Si l'interface ne répond pas à la requête, on quitte le programme (interface déconnectée du réseau). end; end; procedure TForm1.SpeedButton50MouseUp(Sender: TObject; // Relais 1 relaché Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin IdUDPClient1.Send(MDP+'S01F'); ReceivedString := IdUDPClient1.ReceiveString(); // L'interface est-elle présente sur le réseau ? if ReceivedString = '' then begin MessageDlg ('L''interface ne répond pas. Le programme va s''arrêter...', mtInformation,[mbOk],0); Application.Terminate; // Si l'interface ne répond pas à la requête, on quitte le programme (interface déconnectée du réseau). end; end; procedure TForm1.SpeedButton51MouseDown(Sender: TObject; // Relais 2 enfoncé Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin IdUDPClient1.Send(MDP+'S02N'); ReceivedString := IdUDPClient1.ReceiveString(); // L'interface est-elle présente sur le réseau ? if ReceivedString = '' then begin MessageDlg ('L''interface ne répond pas. Le programme va s''arrêter...', mtInformation,[mbOk],0); Application.Terminate; // Si l'interface ne répond pas à la requête, on quitte le programme (interface déconnectée du réseau). end; end; procedure TForm1.SpeedButton51MouseUp(Sender: TObject; // Relais 2 relaché Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin IdUDPClient1.Send(MDP+'S02F'); ReceivedString := IdUDPClient1.ReceiveString(); // L'interface est-elle présente sur le réseau ? if ReceivedString = '' then begin MessageDlg ('L''interface ne répond pas. Le programme va s''arrêter...', mtInformation,[mbOk],0); Application.Terminate; // Si l'interface ne répond pas à la requête, on quitte le programme (interface déconnectée du réseau). end; end; procedure TForm1.SpeedButton52MouseDown(Sender: TObject; // Relais 3 enfoncé Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin IdUDPClient1.Send(MDP+'S03N'); ReceivedString := IdUDPClient1.ReceiveString(); // L'interface est-elle présente sur le réseau ? if ReceivedString = '' then begin MessageDlg ('L''interface ne répond pas. Le programme va s''arrêter...', mtInformation,[mbOk],0); Application.Terminate; // Si l'interface ne répond pas à la requête, on quitte le programme (interface déconnectée du réseau). end; end; procedure TForm1.SpeedButton52MouseUp(Sender: TObject; // Relais 3 relaché Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin IdUDPClient1.Send(MDP+'S03F'); ReceivedString := IdUDPClient1.ReceiveString(); // L'interface est-elle présente sur le réseau ? if ReceivedString = '' then begin MessageDlg ('L''interface ne répond pas. Le programme va s''arrêter...', mtInformation,[mbOk],0); Application.Terminate; // Si l'interface ne répond pas à la requête, on quitte le programme (interface déconnectée du réseau). end; end; procedure TForm1.SpeedButton53MouseDown(Sender: TObject; // Relais 4 enfoncé Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin IdUDPClient1.Send(MDP+'S04N'); ReceivedString := IdUDPClient1.ReceiveString(); // L'interface est-elle présente sur le réseau ? if ReceivedString = '' then begin MessageDlg ('L''interface ne répond pas. Le programme va s''arrêter...', mtInformation,[mbOk],0); Application.Terminate; // Si l'interface ne répond pas à la requête, on quitte le programme (interface déconnectée du réseau). end; end; procedure TForm1.SpeedButton53MouseUp(Sender: TObject; // Relais 4 relaché Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin IdUDPClient1.Send(MDP+'S04F'); ReceivedString := IdUDPClient1.ReceiveString(); // L'interface est-elle présente sur le réseau ? if ReceivedString = '' then begin MessageDlg ('L''interface ne répond pas. Le programme va s''arrêter...', mtInformation,[mbOk],0); Application.Terminate; // Si l'interface ne répond pas à la requête, on quitte le programme (interface déconnectée du réseau). end; end; procedure TForm1.SpeedButton57MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin end; //******************************* //** FIN COMMANDES MOMENTANEES ** //******************************* // // //************************ //** COMMANDES AVANCEES ** //************************ procedure TForm1.SpeedButton66Click(Sender: TObject); // Tous les relais sont actifs begin IdUDPClient1.Send(MDP+'N$'); ReceivedString := IdUDPClient1.ReceiveString(); // L'interface est-elle présente sur le réseau ? if ReceivedString = '' then begin MessageDlg ('L''interface ne répond pas. Le programme va s''arrêter...', mtInformation,[mbOk],0); Application.Terminate; // Si l'interface ne répond pas à la requête, on quitte le programme (interface déconnectée du réseau). end; end; procedure TForm1.SpeedButton67Click(Sender: TObject); // Toutes les relais sont inactifs begin IdUDPClient1.Send(MDP+'F$'); ReceivedString := IdUDPClient1.ReceiveString(); // L'interface est-elle présente sur le réseau ? if ReceivedString = '' then begin MessageDlg ('L''interface ne répond pas. Le programme va s''arrêter...', mtInformation,[mbOk],0); Application.Terminate; // Si l'interface ne répond pas à la requête, on quitte le programme (interface déconnectée du réseau). end; end; //**************************** //** FIN COMMANDES AVANCEES ** //**************************** //******************************** //******************************** //** FIN : GESTION DES 4 RELAIS ** //******************************** //******************************** //************************************************************************************************************************* //** Timer1. Lecture en boucle de la chaine de caractères renvoyés par le PIC et contenant toutes les données en ENTREES ** //************************************************************************************************************************* procedure TForm1.Timer1Timer(Sender: TObject); // Lire l'octet présent sur les entrées E1 à E8. begin IdUDPClient1.Send(MDP+'INPUT'); // Envoie la commande au format ASCII 'IN' permettant de récupérer l'octet présent sur E1 à E8 ReceivedString := IdUDPClient1.ReceiveString(); if ReceivedString ='' then // Si l'interface ne répond pas, on arrête le programme. begin Timer1.Enabled:=False; // Arrêt du Timer 1 MessageDlg ('L''interface ne répond pas. Le programme va s''arrêter...', mtInformation,[mbOk],0); Application.Terminate; // Si l'interface ne répond pas à la requête, on quitte le programme (interface déconnectée du réseau). end else begin //** Gestion des entrées IND0 à IND3 ** // IND0 if ReceivedString[1]='f' then Panel1.Color:=clRed; // Affiche un carré rouge pour off. if ReceivedString[1]='o' then Panel1.Color:=clLime; // Affiche un carré vert pour on. // IND1 if ReceivedString[2]='f' then Panel2.Color:=clRed; // Affiche un carré rouge pour off. if ReceivedString[2]='o' then Panel2.Color:=clLime; // Affiche un carré vert pour on. //IND2 if ReceivedString[3]='f' then Panel3.Color:=clRed; // Affiche un carré rouge pour off. if ReceivedString[3]='o' then Panel3.Color:=clLime; // Affiche un carré vert pour on. //IND3 if ReceivedString[4]='f' then Panel4.Color:=clRed; // Affiche un carré rouge pour off. if ReceivedString[4]='o' then Panel4.Color:=clLime; // Affiche un carré vert pour on. //** FIN: Gestion des entrées IND0 à IND3 ** //** Mise en formes des valeurs analogiques présentent sur les 5 entrées INA0, INA1, INA2, INA3, INA4 ** QUANTUM:=5 / 1024; // Détermine le Quantum du CAN 10 bits intégré au PIC VALEUR:=(StrToInt(ReceivedString[5])*10000)+(StrToInt(ReceivedString[6])*1000)+(StrToInt(ReceivedString[7])*100)+(StrToInt(ReceivedString[8])*10)+StrToInt(ReceivedString[9]); Label6.Caption:='Valeur décimale: '+IntToStr(VALEUR); GAUGE1.Progress:=VALEUR; // Affecte à la gauge1 la valeur mesurée sur l'entrée INA0. TENSION:=QUANTUM * VALEUR; Label17.Caption:='Tension sur INA0= '+FloatToStrF(TENSION,TFloatFormat(ffFixed),10,3)+' Volts'; // Pour n'afficher que 3 chiffres après la virgule. 10= Précision et 3= 3 chiffres après la virgule. VALEUR:=(StrToInt(ReceivedString[11])*10000)+(StrToInt(ReceivedString[12])*1000)+(StrToInt(ReceivedString[13])*100)+(StrToInt(ReceivedString[14])*10)+StrToInt(ReceivedString[15]); Label7.Caption:='Valeur décimale: '+IntToStr(VALEUR); GAUGE2.Progress:=VALEUR; // Affecte à la gauge1 la valeur mesurée sur l'entrée INA1. TENSION:=QUANTUM * VALEUR; Label18.Caption:='Tension sur INA1= '+FloatToStrF(TENSION,TFloatFormat(ffFixed),10,3)+' Volts'; // Pour n'afficher que 3 chiffres après la virgule. 10= Précision et 3= 3 chiffres après la virgule. VALEUR:=(StrToInt(ReceivedString[17])*10000)+(StrToInt(ReceivedString[18])*1000)+(StrToInt(ReceivedString[19])*100)+(StrToInt(ReceivedString[20])*10)+StrToInt(ReceivedString[21]); Label8.Caption:='Valeur décimale: '+IntToStr(VALEUR); GAUGE3.Progress:=VALEUR; // Affecte à la gauge1 la valeur mesurée sur l'entrée INA2. TENSION:=QUANTUM * VALEUR; Label19.Caption:='Tension sur INA2= '+FloatToStrF(TENSION,TFloatFormat(ffFixed),10,3)+' Volts'; // Pour n'afficher que 3 chiffres après la virgule. 10= Précision et 3= 3 chiffres après la virgule. VALEUR:=(StrToInt(ReceivedString[23])*10000)+(StrToInt(ReceivedString[24])*1000)+(StrToInt(ReceivedString[25])*100)+(StrToInt(ReceivedString[26])*10)+StrToInt(ReceivedString[27]); Label9.Caption:='Valeur décimale: '+IntToStr(VALEUR); GAUGE4.Progress:=VALEUR; // Affecte à la gauge1 la valeur mesurée sur l'entrée INA3. TENSION:=QUANTUM * VALEUR; Label20.Caption:='Tension sur INA3= '+FloatToStrF(TENSION,TFloatFormat(ffFixed),10,3)+' Volts'; // Pour n'afficher que 3 chiffres après la virgule. 10= Précision et 3= 3 chiffres après la virgule. VALEUR:=(StrToInt(ReceivedString[29])*10000)+(StrToInt(ReceivedString[30])*1000)+(StrToInt(ReceivedString[31])*100)+(StrToInt(ReceivedString[32])*10)+StrToInt(ReceivedString[33]); Label10.Caption:='Valeur décimale: '+IntToStr(VALEUR); GAUGE5.Progress:=VALEUR; // Affecte à la gauge1 la valeur mesurée sur l'entrée INA4. TENSION:=QUANTUM * VALEUR; Label21.Caption:='Tension sur INA4= '+FloatToStrF(TENSION,TFloatFormat(ffFixed),10,3)+' Volts'; // Pour n'afficher que 3 chiffres après la virgule. 10= Précision et 3= 3 chiffres après la virgule. //** FIN: Mise en formes des valeurs analogiques présentent sur les 5 entrées INA0, INA1, INA2, INA3, INA4 ** //** Mise en forme de la chaine de caractères pour l'affichage de la température du capteur DS18B20 ** //** Pour une valeur reçue = -000125 transcrire la température comme -12,5°C. //** Pour une valeur reçue = +000259 transcrire la température comme +25,9°C. VALEUR:=(StrToInt(ReceivedString[35])*100000)+(StrToInt(ReceivedString[36])*10000)+(StrToInt(ReceivedString[37])*1000)+(StrToInt(ReceivedString[38])*100)+(StrToInt(ReceivedString[39])*10)+StrToInt(ReceivedString[40]); TEMPERATURE:=VALEUR / 10; if ReceivedString[34]='+' then begin Label4.Caption:='+'+FloatToStr(TEMPERATURE)+'°C'; // Pour les températures positives end; if ReceivedString[34]='-' then begin Label4.Caption:='-'+FloatToStr(TEMPERATURE)+'°C'; // Pour les températures négatives end; //** FIN: Mise en forme de la chaine de caractères pour l'affichage de la température du capteur DS18B20 ** end; end; //*********************************************************************** //** FIN: Lecture en boucle de l'octet présent sur les entrées E1 à E4 ** //*********************************************************************** //** Bouton "Activation en boucle de la lecture des entrées de l'interface" ** procedure TForm1.SpeedButton1Click(Sender: TObject); begin Timer1.Enabled:=True; // Active le timer 1 end; //**************************************************************************** end.