|
Minichat
Feliz año dos meses tarde!!! Aqui el tiempo pasa mas lento Feliz año 2024. Me embargó la nostalgia al ver que aun existe el foro Feliz Navidad 2023 02/10/2023 Saludos chicos cuanto tiempo, El_ Nene cuanta razon 2023 Saludos! Iniciar sesión despues de 13 años, que recuerdos! y aún así algo te llama para volver a entrar saludos años t años que no entraba a esta pagina Acabo de empezar un nuevo proyecto, a ver si los demás os animais. cuanto tiempo!!! Buen año a todos! Hola Locos Saludos-28-oct-2022 Saludos-28-oct-2022 Aloha. 14/Sept/2022 No veo como enviar mensaje No veo como enviar mensaje Hola 2022!! Buenas Mundo!!! 31/12/21 Buenas tardes.... 25/11/21 Saludos!!! un buen dia para el que lea esto un buen dia para el que lea esto
|
|
Ver tema anterior :: Ver tema siguiente |
Autor |
Mensaje |
Meta modder
País: Sexo: Registrado: 20 enero 2008 Mensajes: 202 Ubicación: http://electronica-pic.blogspot.com
|
Publicado: Jue, 17 Ago 2017 1:57 pm Asunto: [TUTORIAL] Arduino Consola y puerto serie |
|
|
Tutorial Arduino Consola y puerto serie. Interfaz creado con diversos lenguajes como C#, C++ CLR y VB .net bajo Visual Studio Community que puedes controlar el puerto serie a Arduino encendiendo y apagando un Led, manejar el LCD y recibes mensajes hacia el ordenador o PC.
En este apartado mostramos el código fuente en C#, en el PDF se encuentra C#, C++ CLR y VB .net.
Código C#:
Código: | using System;
using System.IO.Ports;
using System.Text;
namespace Arduino_Consola_cs
{
class Program
{
static void Main(string[] args)
{
// Título de la ventana.
Console.Title = "Arduino Consola C#";
// Tamaño ventana consola.
Console.WindowWidth = 55; // X. Ancho.
Console.WindowHeight = 18; // Y. Alto.
// Cree un nuevo objeto SerialPort con la configuración predeterminada.
SerialPort Puerto_serie = new SerialPort("COM4");
Puerto_serie.BaudRate = 115200;
Puerto_serie.Parity = Parity.None;
Puerto_serie.StopBits = StopBits.One;
Puerto_serie.DataBits = 8;
Puerto_serie.Handshake = Handshake.None;
Puerto_serie.RtsEnable = true;
// Establecer los tiempos de espera de lectura / escritura.
Puerto_serie.ReadTimeout = 500; // Milisegundos.
Puerto_serie.WriteTimeout = 500;
// Detecta cualquier dato recibido.
Puerto_serie.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
Puerto_serie.Open(); // Abrir puerto.
ConsoleKey tecla;
Console.WriteLine("Pulse tecla 1 para encender y 2 para apagar:");
do
{
tecla = Console.ReadKey(true).Key; // Espera pulsación de teclas.
switch (tecla)
{
case ConsoleKey.D1: // Tecla 1 del teclado estandar.
case ConsoleKey.NumPad1: // Tecla 1 del número del pad.
byte[] miBuffer1 = Encoding.ASCII.GetBytes("Luz_ON"); // Codificación ASCII y guarda en la variable array tipo byte.
Puerto_serie.Write(miBuffer1, 0, miBuffer1.Length); // Envía los datos del buffer todo su contenido.
Console.WriteLine("Comando \"Luz_ON\" enviado."); // Muestra en pantalla comandos enviado.
break;
case ConsoleKey.D2:
case ConsoleKey.NumPad2:
byte[] miBuffer2 = Encoding.ASCII.GetBytes("Luz_OFF");
Puerto_serie.Write(miBuffer2, 0, miBuffer2.Length);
Console.WriteLine("Comando \"Luz_OFF\" enviado.");
break;
default:
Console.WriteLine("Tecla el 1, el 2 y Escape para salir.");
break;
}
} while (tecla != ConsoleKey.Escape); // Pulsa Escape para salir del menú.
Console.WriteLine("Presione cualquier tecla para terminar...");
Console.WriteLine();
Console.ReadKey(); // Espera pulsar una tecla cualquiera.
Puerto_serie.Close(); // Cierra el puerto serie.
}
// Detecta cualquier dato entrante.
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string entradaDatos = sp.ReadExisting(); // Almacena los datos recibidos en la variable tipo string.
Console.WriteLine("Dato recibido desde Arduino: " + entradaDatos); // Muestra en pantalla los datos recibidos.
}
}
} |
Código C# Avanzado:
Código: | using System;
using System.IO;
using System.IO.Ports;
using System.Text;
using System.Speech.Recognition; // No olvidar. Micro.
using System.Speech.Synthesis; // No olvidar. Altavoz.
namespace Arduino_Consola_Color_Voz_cs
{
class Program
{
static void Main(string[] args)
{
string COM = "";
// Título de la ventana.
Console.Title = "Arduino Consola color y voz C#";
// Tamaño ventana consola.
Console.WindowWidth = 55; // X. Ancho.
Console.WindowHeight = 18; // Y. Alto.
SerialPort Puerto_serie;
// Crear un nuevo objeto SerialPort con la configuración predeterminada.
Puerto_serie = new SerialPort();
// Configuración.
Console.Write(@"
Introduzca un número para seleccionar puerto COM.
Por ejemplo el 4, sería COM4.
Puerto: ");
COM = Console.ReadLine(); // Escribir el número del puerto.
Console.Clear();
Puerto_serie.PortName = "COM" + COM; // Número del puerto serie.
Puerto_serie.BaudRate = 115200; // Baudios.
Puerto_serie.Parity = Parity.None; // Paridad.
Puerto_serie.DataBits = 8; // Bits de datos.
Puerto_serie.StopBits = StopBits.Two; // Bits de parada.
Puerto_serie.Handshake = Handshake.None; // Control de flujo.
// Establecer la lectura / escritura de los tiempos de espera.
Puerto_serie.ReadTimeout = 500;
Puerto_serie.WriteTimeout = 500;
try
{
Puerto_serie.Open(); // Abrir el puerto serie.
}
catch (IOException)
{
Console.ForegroundColor = ConsoleColor.Red; // Texto en rojo.
Console.CursorVisible = false;
Console.SetCursorPosition(16, 6);
Console.WriteLine(@"El puerto " + Puerto_serie.PortName + @" no existe
o no lo encuentra.");
Console.ReadKey(); // Pulse cualquier tecla.
Environment.Exit(1); // Salir de la aplicación.
}
// Detecta cualquier dato recibido.
Puerto_serie.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
ConsoleKey tecla;
Console.WriteLine("Pulse tecla 1 para encender, 2 para apagar y \n" +
"Escape para salir. \n" +
"--------------------------------------------------------------\n");
do
{
tecla = Console.ReadKey(true).Key; // Espera pulsación de teclas.
// Inicializar una nueva instancia de SpeechSynthesizer.
using (SpeechSynthesizer altavoz = new SpeechSynthesizer())
{
// Configure la salida de audio.
altavoz.SetOutputToDefaultAudioDevice();
// Velocidad de la voz.
altavoz.Rate = -2; // Valores entre -10 a 10.
// Volumen de la voz.
altavoz.Volume = 100; // Valores entre 0 y 100.
switch (tecla)
{
case ConsoleKey.D1: // Tecla 1 del teclado estandar.
case ConsoleKey.NumPad1: // Tecla 1 del número del pad.
byte[] miBuffer1 = Encoding.ASCII.GetBytes("Luz_ON"); // Codificación ASCII y guarda en la variable array tipo byte.
Puerto_serie.Write(miBuffer1, 0, miBuffer1.Length); // Envía los datos del buffer todo su contenido.
Console.ForegroundColor = ConsoleColor.Gray;
Console.Write("Comando"); // Muestra en pantalla comandos enviado.
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(" \"Luz_ON\" ");
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("enviado.");
Console.ForegroundColor = ConsoleColor.Gray;
altavoz.Speak("Luz encendida.");
break;
case ConsoleKey.D2:
case ConsoleKey.NumPad2:
byte[] miBuffer2 = Encoding.ASCII.GetBytes("Luz_OFF");
Puerto_serie.Write(miBuffer2, 0, miBuffer2.Length);
Console.ForegroundColor = ConsoleColor.Gray;
Console.Write("Comando"); // Muestra en pantalla comandos enviado.
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(" \"Luz_OFF\" ");
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("enviado.");
Console.ForegroundColor = ConsoleColor.Gray;
altavoz.Speak("Luz apagada.");
break;
case ConsoleKey.Escape:
Console.WriteLine("Saliendo...");
altavoz.Speak("Saliendo.");
break;
default:
Console.WriteLine("Tecla el 1, el 2 y Escape para salir.");
break;
}
}
} while (tecla != ConsoleKey.Escape); // Pulsa Escape para salir del menú.
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine();
Console.WriteLine("╔═════════════════════════════════════════════════════╗");
Console.WriteLine("║ Electrónica PIC metaconta@gmail.com ║");
Console.WriteLine("║ ║");
Console.WriteLine("║ Ángel Acaymo M. G. ║");
Console.WriteLine("╚═════════════════════════════════════════════════════╝");
Console.WriteLine();
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("Pulse cualquier tecla para salir...");
Console.WriteLine();
Console.ReadKey(); // Espera pulsar una tecla cualquiera.
Puerto_serie.Close(); // Cierra el puerto serie.
}
// Detecta cualquier dato entrante.
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string entradaDatos = sp.ReadExisting(); // Almacena los datos recibidos en la variable tipo string.
Console.ForegroundColor = ConsoleColor.Gray;
Console.Write("Dato recibido desde Arduino: "); // Muestra en pantalla los datos recibidos.
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(entradaDatos + "\n");
Console.ForegroundColor = ConsoleColor.Gray;
}
// Maneje el evento SpeechRecognized.
static void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
Console.WriteLine("Texto reconocido: " + e.Result.Text);
string palabras = e.Result.Text;
}
}
} |
Código de Aruino:
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. |
|
Volver arriba |
|
|
|
|
Este sitio no se hace responsable de ningún daño que cause en su ordenador con la información que en el se expone.Todos los productos y marcas están registrados por sus respectivos propietarios. Prohibida la reproducción total o parcial de los textos e imagenes de esta web sin el consentimiento expreso de su autor. Hardcore-Modding.com 2001-2019 Los comentarios son propiedad de sus autores (ya sean anonimos o registrados). Portal basado en NukeET, RSS
Página Generada en: 0,326 segundos
π |