Resultados 1 al 3 de 3

[TUTORIAL] Arduino Delphi 10.2 y Puerto serie

  1. #1 [TUTORIAL] Arduino Delphi 10.2 y Puerto serie 
    Iniciado
    Fecha de ingreso
    Jun 2007
    Mensajes
    19
    Descargas
    0
    Uploads
    0


    Tutorial Arduino Delphi 10.2 y Puerto serie. Interfaz creado con Delphi que puedes controlar el puerto serie a Arduino encendiendo y apagando un Led, manejar el LCD y recibes mensajes hacia el PC.

    El entorno Delphi con el lenguaje pascal sigue vigente en la actualidad y su uso en Arduino está creciendo cada vez más.



    Código fuente de Delphi:
    Código:
    unit Principal;
    
    interface
    
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, CPort;
    
    type
      TForm1 = class(TForm)
        Label_Titulo: TLabel;
        Label_Mensajes: TLabel;
        Button_ON: TButton;
        Button_OFF: TButton;
        Button_COM: TButton;
        Button_Abrir: TButton;
        Memo_Mensajes: TMemo;
        Button_Limpiar: TButton;
        ComPort1: TComPort;
        procedure Button_ONClick(Sender: TObject);
        procedure Button_OFFClick(Sender: TObject);
        procedure Button_COMClick(Sender: TObject);
        procedure Button_AbrirClick(Sender: TObject);
        procedure Button_LimpiarClick(Sender: TObject);
        procedure ComPort1AfterClose(Sender: TObject);
        procedure ComPort1AfterOpen(Sender: TObject);
        procedure ComPort1RxChar(Sender: TObject; Count: Integer);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.Button_AbrirClick(Sender: TObject);
    begin
      // Si el puerto está conectado.
      if ComPort1.Connected then
      begin
        ComPort1.Close; // Cierra el puerto.
    
        Button_COM.Enabled := True;
        Button_ON.Enabled := False;
        Button_OFF.Enabled := False;
      end
    
      else  // En caso contrario.
    
      begin
        ComPort1.Open;  // Abre el puerto.
    
        Button_COM.Enabled := False;
        Button_ON.Enabled := True;
        Button_OFF.Enabled := True;
      end;
    end;
    
    procedure TForm1.Button_COMClick(Sender: TObject);
    begin
    ComPort1.ShowSetupDialog; // Abre la configuración del puerto.
    end;
    
    procedure TForm1.Button_LimpiarClick(Sender: TObject);
    begin
    Memo_Mensajes.Clear();  // Limpia los mensajes del Memo.
    end;
    
    procedure TForm1.Button_OFFClick(Sender: TObject);
    begin
    ComPort1.WriteStr('Luz_OFF'); // Envía el comando "Luz_OFF" al puerto.
    end;
    
    procedure TForm1.Button_ONClick(Sender: TObject);
    begin
    ComPort1.WriteStr('Luz_ON');  // Envía el comando "Luz_ON" al puerto.
    end;
    
    procedure TForm1.ComPort1AfterClose(Sender: TObject);
    begin
        if Button_Abrir <> nil then
        Button_Abrir.Caption := 'Abrir';
    end;
    
    procedure TForm1.ComPort1AfterOpen(Sender: TObject);
    begin
       Button_Abrir.Caption := 'Cerrar';
    end;
    
    procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
    var
      Str: String;
    begin
      // Recibe mensajes desde Arduino.
      ComPort1.ReadStr(Str, Count);
    
      // Muestra los mensajes en pantalla.
      Memo_Mensajes.Lines.Add( Str );
    
      // Guarda los mensjes de Arduino en un archivo txt.
      Memo_Mensajes.Lines.SaveToFile('archivo.txt');
    end;
    
    end.


    Código de Arduino:
    Código:
    // ----- Electrónica PIC -----
    //
    // Ejercicio 2.
    //
    // Encendido y apagado del Led 13 mediante puerto serie con pantalla.
    // Es lo mismo que el Ejercicoi 1, pero usando el LCD Keypad Shield.
    
    #include
    
    // Inicializa la librería con sus pines indicados.
    // RS, RW, Enable, D4, D5, D6, D7.
    LiquidCrystal lcd(8, NULL, 9, 4, 5, 6, 7);
    // LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
    
    // Pin 10 para saber que es luz de fondo.
    const byte LuzFondo = 10;
    
    const byte Led = 13;   // Declaramos la variable pin del Led.
    char caracter;
    String comando;
    
    void setup()
    {
      pinMode(Led, OUTPUT);  // Inicializa el pin del LED como salida:
      Serial.begin(115200);     // Puerto serie 115200 baudios.
      lcd.begin(16, 2);         // Formato de pantalla.
      lcd.clear();      // Borra la pantalla y su posición superior izquierda.
      lcd.print("    Arduino     ");
      delay(1000);
    }
    
    void loop()
    {
      /*
        Voy leyendo carácter a carácter lo que se recibe por el canal serie
        (mientras llegue algún dato allí), y los voy concatenando uno tras otro
        en una cadena. En la práctica, si usamos el "Serial monitor" el bucle while
        acabará cuando pulsamos Enter. El delay es conveniente para no saturar el
        canal serie y que la concatenación se haga de forma ordenada.
      */
      while (Serial.available() > 0)
      {
        caracter = Serial.read();
        comando.concat(caracter);
        delay(10);
      }
    
      /*
        Una vez ya tengo la cadena "acabada", compruebo su valor y hago que
        la placa Arduino reacciones según sea este. Aquí podríamos hacer lo
        que quisiéramos: si el comando es "tal", enciende un Led, si es cual,
        mueve un motor... y así.
      */
    
      // Si los carácteres es recibido y verdadero.
      if (comando.equals("Luz_ON") == true)
      {
        digitalWrite(Led, HIGH); // Enciende el Led 13.
        Serial.write("ON - Led encendido.");    // Envía este mensaje al PC.
        lcd.setCursor(0, 1);
        lcd.print("Luz ON.         "); // Mostrar en el LCD.
      }
    
    
      if (comando.equals("Luz_OFF") == true)
      {
        digitalWrite(Led, LOW); // Apaga el Led 13.
        Serial.write("OFF - Led apagado. ");  // Envía este mensaje al PC.
        lcd.setCursor(0, 1);
        lcd.print("Luz OFF.        "); // Mostrar en el LCD.
      }
    
      // Limpiamos la cadena para volver a recibir el siguiente comando.
      comando = "";
    }


    Ver vídeo.

    Ver visor.

    Un cordial saludo.
    Última edición por Meta; 26-07-2017 a las 13:00
    Citar  
     

  2. #2  
    Co-Admin HackHispano.com Avatar de clarinetista
    Fecha de ingreso
    Jan 2004
    Ubicación
    HackHispano/SM
    Mensajes
    7.773
    Descargas
    31
    Uploads
    8
    Gracias por compartirlo
    Citar  
     

  3. #3  
    Iniciado
    Fecha de ingreso
    Jun 2007
    Mensajes
    19
    Descargas
    0
    Uploads
    0
    De nada.
    Citar  
     

Temas similares

  1. [TUTORIAL] Arduino C++ y Puerto serie
    Por Meta en el foro PROGRAMACION DESKTOP
    Respuestas: 0
    Último mensaje: 31-03-2017, 02:39
  2. [TUTORIAL] Interfaz Java, Visual Basic 6 y Arduino
    Por Meta en el foro PROGRAMACION DESKTOP
    Respuestas: 0
    Último mensaje: 24-12-2015, 02:21
  3. puerto serie en windows 7
    Por suso2 en el foro WINDOWS
    Respuestas: 2
    Último mensaje: 18-01-2012, 10:43
  4. Puerto serie en Linux
    Por smaug_ en el foro GENERAL
    Respuestas: 3
    Último mensaje: 20-06-2007, 15:29
  5. Adaptador de USB a puerto serie.
    Por juanma.m.d en el foro HARDWARE
    Respuestas: 5
    Último mensaje: 16-05-2005, 15:05

Marcadores

Marcadores