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, Spin; type TForm1 = class(TForm) IdUDPClient1: TIdUDPClient; Memo2: TMemo; GroupBox2: TGroupBox; GroupBox1: TGroupBox; SpinEdit1: TSpinEdit; SpinEdit2: TSpinEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; SpinEdit3: TSpinEdit; Button1: TButton; GroupBox3: TGroupBox; Button2: TButton; Label4: TLabel; Label5: TLabel; SpinEdit4: TSpinEdit; SpinEdit5: TSpinEdit; Label6: TLabel; SpinEdit6: TSpinEdit; Label7: TLabel; SpinEdit7: TSpinEdit; Label8: TLabel; SpinEdit8: TSpinEdit; GroupBox4: TGroupBox; Button3: TButton; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Label13: TLabel; SpinEdit9: TSpinEdit; SpinEdit10: TSpinEdit; SpinEdit11: TSpinEdit; SpinEdit12: TSpinEdit; SpinEdit13: TSpinEdit; GroupBox5: TGroupBox; Label14: TLabel; SpinEdit14: TSpinEdit; Label15: TLabel; SpinEdit15: TSpinEdit; Label16: TLabel; SpinEdit16: TSpinEdit; Label17: TLabel; SpinEdit17: TSpinEdit; Label18: TLabel; SpinEdit18: TSpinEdit; Button4: TButton; GroupBox6: TGroupBox; Button5: TButton; Label19: TLabel; SpinEdit19: TSpinEdit; Label20: TLabel; SpinEdit20: TSpinEdit; Label21: TLabel; SpinEdit21: TSpinEdit; Label22: TLabel; SpinEdit22: TSpinEdit; GroupBox7: TGroupBox; Button6: TButton; Label23: TLabel; SpinEdit23: TSpinEdit; Label24: TLabel; SpinEdit24: TSpinEdit; Label25: TLabel; SpinEdit25: TSpinEdit; Label26: TLabel; SpinEdit26: TSpinEdit; GroupBox8: TGroupBox; Button7: TButton; Label27: TLabel; SpinEdit27: TSpinEdit; Label28: TLabel; SpinEdit28: TSpinEdit; Label29: TLabel; SpinEdit29: TSpinEdit; Edit1: TEdit; Label30: TLabel; Panel1: TPanel; Button8: TButton; GroupBox9: TGroupBox; Button9: TButton; GroupBox10: TGroupBox; Button10: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button8Click(Sender: TObject); procedure Button9Click(Sender: TObject); procedure Button10Click(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; var Form1: TForm1; MDP : String; x : String; y : String; x1 : String; y1 : String; x2 : String; y2 : String; c : String; n : String; r : String; implementation const RECIEVETIMEOUT=5000; // Temps de non réponse maxi donné pour recevoir une réponse du ENC28J60 de 5 secondes. // URl : http://www.developpez.net/forums/d648698/environnements-developpement/delphi/web-reseau/indy-communication-udp/ {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin IdUDPClient1.Port:=5030; // Port IdUDPClient1.Host:='192.168.0.9'; // Adresse IP MDP:='ABCDEFGHIJKLMNOP'; // Mot de passe par défaut composé de 16 caractères alpha-numériques. Doit toujours contenir 16 caractères obligatoirement !!! IdUDPClient1.ReceiveTimeout:=RECIEVETIMEOUT; // Temps maximum donné au programme en cas de non réponse du ENC28J60. Memo2.Clear; // Efface le contenu de Memo 2 Edit1.Text:=''; // Efface le contenu de Edit1. SpinEdit3.Value :=1; // Affichage par défaut du Point SpinEdit8.Value :=1; // Affichage par défaut de la ligne SpinEdit13.Value :=1; // Affichage par défaut du rectangle vide SpinEdit18.Value :=1; // Affichage par défaut du rectangle plein SpinEdit22.Value :=1; // Affichage par défaut du cercle vide SpinEdit26.Value :=1; // Affichage par défaut du cercle plein SpinEdit29.Value :=1; // Affichage par défaut du texte end; //*********************************************************** //*********************************************************** //** Procedures de transfert des données du PC vers le PIC ** //*********************************************************** //*********************************************************** //********************* //* Afficher un point * //********************* procedure TForm1.Button1Click(Sender: TObject); var ReceivedString: String; begin x:=IntToStr(SpinEdit1.Value); // Valeur de X comprise entre 0 et 127 y:=IntToStr(SpinEdit2.Value); // Valeur de Y comprise entre 0 et 63 c:=IntToStr(SpinEdit3.Value); // Valeur de l'affichage comprise entre 0 et 2 IdUDPClient1.Send(MDP+'P'+x+'Z'+y+'Y'+c+'$'); // Envoie le mot de passe MDP + commande. ReceivedString := IdUDPClient1.ReceiveString(); // Reçoit le message en retour du ENC28J60 if ReceivedString = '' then // A-t-on reçu aucun message du ENC28J60 ? begin Memo2.Lines.Add('Pas de réponse du ENC28C60 après un temps d''attente ' + IntToStr(IdUDPClient1.ReceiveTimeout) + ' millsecondes.') end else begin Memo2.Clear; // Efface le contenu de Memo 2 Memo2.Lines.Add(ReceivedString); // Affiche le message envoyé par le ENC28J60 end; end; //*********************** //* Afficher une droite * //*********************** procedure TForm1.Button2Click(Sender: TObject); var ReceivedString: String; begin x1:=IntToStr(SpinEdit4.Value); // Valeur de X comprise entre 0 et 127 y1:=IntToStr(SpinEdit5.Value); // Valeur de Y comprise entre 0 et 63 x2:=IntToStr(SpinEdit6.Value); // Valeur de X comprise entre 0 et 127 y2:=IntToStr(SpinEdit7.Value); // Valeur de Y comprise entre 0 et 63 c:=IntToStr(SpinEdit8.Value); // Valeur de l'affichage comprise entre 0 et 2 IdUDPClient1.Send(MDP+'L'+x1+'Z'+y1+'Y'+x2+'X'+y2+'W'+c+'$'); // Envoie le mot de passe MDP + commande. ReceivedString := IdUDPClient1.ReceiveString(); // Reçoit le message en retour du ENC28J60 if ReceivedString = '' then // A-t-on reçu aucun message du ENC28J60 ? begin Memo2.Lines.Add('Pas de réponse du ENC28C60 après un temps d''attente ' + IntToStr(IdUDPClient1.ReceiveTimeout) + ' millsecondes.') end else begin Memo2.Clear; // Efface le contenu de Memo 2 Memo2.Lines.Add(ReceivedString); // Affiche le message envoyé par le ENC28J60 end; end; //****************************** //* Afficher le rectangle vide * //****************************** procedure TForm1.Button3Click(Sender: TObject); var ReceivedString: String; begin x1:=IntToStr(SpinEdit9.Value); // Valeur de X comprise entre 0 et 127 y1:=IntToStr(SpinEdit10.Value); // Valeur de Y comprise entre 0 et 63 x2:=IntToStr(SpinEdit11.Value); // Valeur de X comprise entre 0 et 127 y2:=IntToStr(SpinEdit12.Value); // Valeur de Y comprise entre 0 et 63 c:=IntToStr(SpinEdit13.Value); // Valeur de l'affichage comprise entre 0 et 2 IdUDPClient1.Send(MDP+'R'+x1+'Z'+y1+'Y'+x2+'X'+y2+'W'+c+'$'); // Envoie le mot de passe MDP + commande. ReceivedString := IdUDPClient1.ReceiveString(); // Reçoit le message en retour du ENC28J60 if ReceivedString = '' then // A-t-on reçu aucun message du ENC28J60 ? begin Memo2.Lines.Add('Pas de réponse du ENC28C60 après un temps d''attente ' + IntToStr(IdUDPClient1.ReceiveTimeout) + ' millsecondes.') end else begin Memo2.Clear; // Efface le contenu de Memo 2 Memo2.Lines.Add(ReceivedString); // Affiche le message envoyé par le ENC28J60 end; end; //******************************* //* Afficher le rectangle plein * //******************************* procedure TForm1.Button4Click(Sender: TObject); var ReceivedString: String; begin x1:=IntToStr(SpinEdit14.Value); // Valeur de X comprise entre 0 et 127 y1:=IntToStr(SpinEdit15.Value); // Valeur de Y comprise entre 0 et 63 x2:=IntToStr(SpinEdit16.Value); // Valeur de X comprise entre 0 et 127 y2:=IntToStr(SpinEdit17.Value); // Valeur de Y comprise entre 0 et 63 c:=IntToStr(SpinEdit18.Value); // Valeur de l'affichage comprise entre 0 et 2 IdUDPClient1.Send(MDP+'B'+x1+'Z'+y1+'Y'+x2+'X'+y2+'W'+c+'$'); // Envoie le mot de passe MDP + commande. ReceivedString := IdUDPClient1.ReceiveString(); // Reçoit le message en retour du ENC28J60 if ReceivedString = '' then // A-t-on reçu aucun message du ENC28J60 ? begin Memo2.Lines.Add('Pas de réponse du ENC28C60 après un temps d''attente ' + IntToStr(IdUDPClient1.ReceiveTimeout) + ' millsecondes.') end else begin Memo2.Clear; // Efface le contenu de Memo 2 Memo2.Lines.Add(ReceivedString); // Affiche le message envoyé par le ENC28J60 end; end; //*************************** //* Afficher le cercle vide * //*************************** procedure TForm1.Button5Click(Sender: TObject); var ReceivedString: String; begin x:=IntToStr(SpinEdit19.Value); // Valeur de X comprise entre 0 et 127 y:=IntToStr(SpinEdit20.Value); // Valeur de Y comprise entre 0 et 63 r:=IntToStr(SpinEdit21.Value); // Valeur de r comprise entre 0 et 127 c:=IntToStr(SpinEdit22.Value); // Valeur de l'affichage comprise entre 0 et 2 IdUDPClient1.Send(MDP+'C'+x+'Z'+y+'Y'+r+'X'+c+'$'); // Envoie le mot de passe MDP + commande. ReceivedString := IdUDPClient1.ReceiveString(); // Reçoit le message en retour du ENC28J60 if ReceivedString = '' then // A-t-on reçu aucun message du ENC28J60 ? begin Memo2.Lines.Add('Pas de réponse du ENC28C60 après un temps d''attente ' + IntToStr(IdUDPClient1.ReceiveTimeout) + ' millsecondes.') end else begin Memo2.Clear; // Efface le contenu de Memo 2 Memo2.Lines.Add(ReceivedString); // Affiche le message envoyé par le ENC28J60 end; end; //*************************** //* Afficher le cercle plein* //*************************** procedure TForm1.Button6Click(Sender: TObject); var ReceivedString: String; begin x:=IntToStr(SpinEdit23.Value); // Valeur de X comprise entre 0 et 127 y:=IntToStr(SpinEdit24.Value); // Valeur de Y comprise entre 0 et 63 r:=IntToStr(SpinEdit25.Value); // Valeur de r comprise entre 0 et 127 c:=IntToStr(SpinEdit26.Value); // Valeur de l'affichage comprise entre 0 et 2 IdUDPClient1.Send(MDP+'F'+x+'Z'+y+'Y'+r+'X'+c+'$'); // Envoie le mot de passe MDP + commande. ReceivedString := IdUDPClient1.ReceiveString(); // Reçoit le message en retour du ENC28J60 if ReceivedString = '' then // A-t-on reçu aucun message du ENC28J60 ? begin Memo2.Lines.Add('Pas de réponse du ENC28C60 après un temps d''attente ' + IntToStr(IdUDPClient1.ReceiveTimeout) + ' millsecondes.') end else begin Memo2.Clear; // Efface le contenu de Memo 2 Memo2.Lines.Add(ReceivedString); // Affiche le message envoyé par le ENC28J60 end; end; //*********************** //* Paramètres du texte * //*********************** procedure TForm1.Button7Click(Sender: TObject); var ReceivedString: String; begin x:=IntToStr(SpinEdit27.Value); // Valeur de X comprise entre 0 et 127 n:=IntToStr(SpinEdit28.Value); // Valeur de n comprise entre 0 et 7 c:=IntToStr(SpinEdit29.Value); // Valeur de l'affichage comprise entre 0 et 2 IdUDPClient1.Send(MDP+'T'+x+'Z'+n+'Y'+c+'$'); // Envoie le mot de passe MDP + commande. ReceivedString := IdUDPClient1.ReceiveString(); // Reçoit le message en retour du ENC28J60 if ReceivedString = '' then // A-t-on reçu aucun message du ENC28J60 ? begin Memo2.Lines.Add('Pas de réponse du ENC28C60 après un temps d''attente ' + IntToStr(IdUDPClient1.ReceiveTimeout) + ' millsecondes.') end else begin Memo2.Clear; // Efface le contenu de Memo 2 Memo2.Lines.Add(ReceivedString); // Affiche le message envoyé par le ENC28J60 end; end; //********************** //* Transfert du texte * //********************** procedure TForm1.Button8Click(Sender: TObject); var ReceivedString: String; begin IdUDPClient1.Send(MDP+'Q'+edit1.Text); // Envoie le mot de passe MDP + Commande + TEXTE pour LCD ReceivedString := IdUDPClient1.ReceiveString(); // Reçoit le message en retour du ENC28J60 if ReceivedString = '' then // A-t-on reçu aucun message du ENC28J60 ? begin Memo2.Lines.Add('Pas de réponse du ENC28C60 après un temps d''attente ' + IntToStr(IdUDPClient1.ReceiveTimeout) + ' millsecondes.') end else begin Memo2.Clear; // Efface le contenu de Memo 2 Memo2.Lines.Add(ReceivedString); // Affiche le message envoyé par le ENC28J60 end; end; //****************** //* Effacer le LCD * //****************** procedure TForm1.Button9Click(Sender: TObject); var ReceivedString: String; begin IdUDPClient1.Send(MDP+'A'); // Envoie le mot de passe MDP + Commande ReceivedString := IdUDPClient1.ReceiveString(); // Reçoit le message en retour du ENC28J60 if ReceivedString = '' then // A-t-on reçu aucun message du ENC28J60 ? begin Memo2.Lines.Add('Pas de réponse du ENC28C60 après un temps d''attente ' + IntToStr(IdUDPClient1.ReceiveTimeout) + ' millsecondes.') end else begin Memo2.Clear; // Efface le contenu de Memo 2 Memo2.Lines.Add(ReceivedString); // Affiche le message envoyé par le ENC28J60 end; end; //************************** //* Retro-éclairage ON/OFF * //************************** procedure TForm1.Button10Click(Sender: TObject); var ReceivedString: String; begin IdUDPClient1.Send(MDP+'N'); // Envoie le mot de passe MDP + Commande ReceivedString := IdUDPClient1.ReceiveString(); // Reçoit le message en retour du ENC28J60 if ReceivedString = '' then // A-t-on reçu aucun message du ENC28J60 ? begin Memo2.Lines.Add('Pas de réponse du ENC28C60 après un temps d''attente ' + IntToStr(IdUDPClient1.ReceiveTimeout) + ' millsecondes.') end else begin Memo2.Clear; // Efface le contenu de Memo 2 Memo2.Lines.Add(ReceivedString); // Affiche le message envoyé par le ENC28J60 end; end; end.