Telecommande rc5 en c#

Description

bonjours tous le monde.
je tiens a remercier les membre programmeurs du site pour leurs efforts.

cette solution est une transformation d'une sources écrite en VB en C#.
puisque j'en avais besoin pour mon projet alors je 'ai récrie la sources en C#.net.

dans le zip il y a:
- la solution en c#.
- le dll (port.dll)
-le shéma de montage.

merci .
n'hésitez pas a donner des commentaire ,est pourquoi pas des suggestions.

Source / Exemple :


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace telcencCsharp
{
    public partial class Form1 : Form
    {
        public int Controle;
        public int ADDR;
        public int DAAT;
        
        public Form1()
        {
            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)
        {

            int i=pt.OPENCOM("COM1,1200,N,8,1"); // ouvrir le com1
   
             if(i != 0 ) // si ouverture avec sucée
             {
               pt.TXD (1) ;        
               pt.RTS (1) ;        
               pt.DTR (1) ;        

             }
            else 
            {    //sinon ouverture du com2   
                i = pt.OPENCOM("COM2,1200,N,8,1");   
                Option2.Checked = true;  
             
                if(i != 0) 
                {
                    pt.TXD (1);     
                    pt.RTS (1);      
                    pt.DTR (1); 
                }
                else 
                    MessageBox.Show ("COM1&2 Interface Erreur");
            }

             timer1.Enabled = true; // activer le timer 
       }

        private void Option1_Click(object sender, EventArgs e)
        {
           pt.CLOSECOM() ; // fermer le port ccom 1 ouvert         
                   
          int i = pt.OPENCOM("COM1,1200,N,8,1") ;  //ouvrir com1
      
        if( i!=0) 
        {
                  pt.TXD (1)  ;     
                  pt.RTS (1) ;     
                  pt.DTR (1) ; 
        }
        else
            MessageBox.Show ("COM1 Déja utilisé !!");
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
         RecvRC5( ); //Attendre code RC5 ou dérivé
// afficher les données lui depuis le port
         Console.WriteLine("Code = " + Controle.ToString());
         if (Controle != 99)
         {
//Si pas d'erreurs Afficher et traiter
 Text1.Text = "Ctr = " + Controle.ToString() + "    " + "Adr = " + ADDR.ToString() + "    " + "DAT = " + DAAT.ToString();
             MessageBox.Show(DAAT.ToString());
             
            if (DAAT == 3) //si touche 3
                 MessageBox.Show("hello 3");

             if (DAAT == 5)//si touche 5
                 MessageBox.Show("hello 5");
//Fermer l'application depuis la touche (Marche/arret) de votre télécommande
             if (DAAT == 12)
                 Close();
// vous pouvez ajouter des évènements si possible 
         }

        }

        private void Option2_Click(object sender, EventArgs e)
        {
            pt.CLOSECOM ();   //fermer le com 2  
// ouvrir le com 2                        
            int i = pt.OPENCOM("COM2,1200,N,8,1");         
            
          if (i != 0)
            {
 //si pas d'erreur
                pt.TXD(1);             
                pt.RTS (1);        
                pt.DTR (1);  
            }  
        else   
MessageBox.Show("COM2 Déja utilisé !!");

        }

        public void RecvRC5()
        {
            pt.TIMEINIT(); //Init Timer interne   
//Attendre un niveau bas,pendant 400ms             
            while(pt.TIMEREAD() < 400 && pt.RI() == 1) ;

//'Traitement des bits de startRC5
            pt.DELAYUS(296);  //capture bit a bit           
            pt.DELAYUS(888);  //bit de start         
            pt.DELAYUS(888); //bit de start         
            pt.DELAYUS(888);//bit de start
  
            Controle = RecvBit();//Recept du bit de "CONTROLE RC5"
            ADDR = 0;
//Recept du bloc de 6 bit de "ADRESSE RC5"
            for (int b = 1; b <= 5; b++)
            {
                pt.DELAYUS(888);//traitement de chaque bit
                ADDR = ADDR * 2;//retrouver valeur "ADDR"
                ADDR = ADDR + RecvBit();
            }

            DAAT = 0;
//Recept du bloc de 6 bit de "DONNEES RC5"
            for ( int c = 1; c<=6 ;c++)
            {             
                pt.DELAYUS(888);  //traitement de chaque bit                  
                DAAT = DAAT * 2;   // retrouver valeur "ADDR"             
                DAAT = DAAT + RecvBit();
            }
        }
       
        public int RecvBit() 
        {
            int ret = 0;
            pt.TIMEINITUS();   //Init Timer interne                     
            if (pt.RI() ==0)   
             {  // Lecture d'un bit sur RI avec controle erreur
                  pt.DELAYUS (888);
                     if (pt.RI() == 0)//Si Erreur Marquer Control
                       Controle = 99;
                               ret= 0;
                        
               }
  
            else       
                {                 
                      pt.DELAYUS (888);
                        if (pt.RI() == 1) //Si RI =1
                           Controle = 99;
                             ret= 1;
                    
                }
                return ret;
        }

        private void button1_Click(object sender, EventArgs e)
        {
           
               timer1.Enabled = true;//activer le timer 
            timer1.Start();
        }

      
  

    }
}

Conclusion :


merci. j'attends vos commentaires .

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.