Agosto 21, 2017, 04:04:57 pm

Autor Tema: [TUTORIAL] Arduino Delphi 10.2 y Puerto serie  (Leído 1005 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Meta

  • Me das tu IP?
  • *
  • Mensajes: 26
    • Ver Perfil
[TUTORIAL] Arduino Delphi 10.2 y Puerto serie
« en: Julio 18, 2017, 12:07:59 pm »


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: You are not allowed to view links. Register or Login
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: You are not allowed to view links. Register or Login
// ----- 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 = "";
}



You are not allowed to view links. Register or Login.

You are not allowed to view links. Register or Login.

You are not allowed to view links. Register or Login.

Un cordial saludo.


xx
Arduino, Delphi y puerto serie

Iniciado por Meta

0 Respuestas
1010 Vistas
Último mensaje Marzo 25, 2017, 05:08:53 am
por Meta
xx
[TUTORIAL] Arduino C++ y Puerto serie

Iniciado por Meta

0 Respuestas
475 Vistas
Último mensaje Marzo 31, 2017, 09:22:13 am
por Meta
xx
manejar puerto serie desde c++

Iniciado por krakc

4 Respuestas
5512 Vistas
Último mensaje ſeptiembre 27, 2007, 08:38:45 am
por paolitz
xx
Manual Puerto serie con PIC16F84A bajo VC++ y VB

Iniciado por Meta

3 Respuestas
1383 Vistas
Último mensaje Marzo 14, 2009, 11:25:12 am
por alexmanycool
question
Puerto Serie leer caracteres y datos

Iniciado por pepepaco

0 Respuestas
658 Vistas
Último mensaje Abril 03, 2014, 07:14:35 pm
por pepepaco
xx
duda sobre el puerto serie desde java

Iniciado por ptemillos

5 Respuestas
2830 Vistas
Último mensaje Enero 27, 2010, 12:23:40 pm
por cemasmas
xx
Enviar string al puerto serie desde xhtml y java

Iniciado por Meta

0 Respuestas
574 Vistas
Último mensaje Julio 09, 2016, 05:25:24 am
por Meta
xx
Buen tutorial para ocultar server usando delphi o avfuker o lo mas senzillo?

Iniciado por fitixen

1 Respuestas
1062 Vistas
Último mensaje Abril 18, 2012, 09:06:29 am
por usuaria_101
question
Arduino

Iniciado por EveryOne

0 Respuestas
486 Vistas
Último mensaje Noviembre 23, 2015, 01:08:09 pm
por EveryOne
question
Arduino se programa en C ??

Iniciado por Dash_h

15 Respuestas
5537 Vistas
Último mensaje Agosto 07, 2010, 11:10:40 am
por .xAk.