Como dije antes, quiero empezar desde el suelo, así que será al principio tipo consola algo parecido a esto:
Con Visual studioi Community 2017, NetBeans y vete a saber cual más se puede programar en Python. No se cual es el compilador real o oficial de Python para Windwos. Sea de consola y gráfica o visual.
This page does not exist yet. You can create a new empty page, or use one of the page templates. Before creating the page, please check if a similar page already exists.
Si es posible quiero hacer las dos tipos de interfaz. Primero modo consola y luego gráfica. ¿Es complicado?
Quiero hacer un experimento de Encender un Led y apagarlo con el lenguaje Python y Arduino. Nunca lo he hecho con este lenguaje y hace tiempo que no lo toco.
He hecho hacer encender y apagar un Led con Delphi y Aruino. Puedes ver el tutorial para que te hagas una idea de que va.
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.
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
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.
// 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 = ""; }
Hace un tiempo, hice un tutorial controlando Arduino y puerto serie en C++ con C++ Builder Starter entre otros compiladores.
Ahora ya de unos meses de descanso sobre programación, quiero retomar hacer algo similar pero con Windows Form y el lenguaje Delphi.
Primera parte: La idea es, añadir dos botones desde el formulario, que al pulsar un botón envíe carácteres por el puerto serie. Esto hace encender un Led o apagarlo.
Segunda parte: Cuando acabe la primera parte, seguimos en que por el puerto serie entras letras o carácteres para leer.
La interfaz Windows Form en Delphi Tokio 10.2 hay que enviar caracteres al puerto serie y que sea capaz de recibir datos también. Les dejo un ejemplo de una plantilla.
Los tutoriales que he encontrado son muy antiguos y con Delphi 7, no me interesa. Si encuentra algo para esta época, mejor, nos podemos ayudar.