Hola de nuevo:
He hecho este programa. Arduino ulsa un botón y este programa de C# lo descodifica como dijeron arriba. Como puedes ver, el archivo viene desde Arduino por el puerto serie/USB.
¿Existe la manera de usar la descodificación de la foto?
C#:
Saludos.
He hecho este programa. Arduino ulsa un botón y este programa de C# lo descodifica como dijeron arriba. Como puedes ver, el archivo viene desde Arduino por el puerto serie/USB.
¿Existe la manera de usar la descodificación de la foto?
C#:
Código (csharp) [Seleccionar]
using System;
using System.Text;
using System.IO.Ports;
using System.IO;
using System.Diagnostics;
using System.Threading;
namespace Recibir_archivo_desde_Arduino_consola_06
{
class Program
{
static int cantidadBytes;
static StringBuilder sb = new StringBuilder();
static void Main(string[] args)
{
string COM = "";
// Tamaño ventana consola.
Console.WindowWidth = 55; // X. Ancho.
Console.WindowHeight = 18; // Y. Alto.
Console.Title = "Recoger foto desde Arduino y crearlo en el disco duro"; // Título de la ventana.
// Crear un nuevo objeto SerialPort con la configuración predeterminada.
SerialPort 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. 115200.
Puerto_serie.Parity = Parity.None; // Paridad.
Puerto_serie.DataBits = 8; // Bits de datos.
Puerto_serie.StopBits = StopBits.One; // Bits de parada.
Puerto_serie.Handshake = Handshake.None; // Control de flujo.
// Establecer la lectura / escritura de los tiempos de espera.
Puerto_serie.ReadTimeout = -1; // 500.
Puerto_serie.WriteTimeout = -1; // 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 para salir.
}
catch (UnauthorizedAccessException e)
{
Console.WriteLine(e);
}
Puerto_serie.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
Console.WriteLine("Esperando datos desde Arduino... \n");
Console.ReadKey();
Puerto_serie.Close(); // Cerrar puerto.
}
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
try
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
string[] data = indata.Split('A');
cantidadBytes = int.Parse(data[0]);
switch (data[1].ToString())
{
case "1":
Console.WriteLine("Tamaño: " + cantidadBytes + " Bytes.");
Console.WriteLine("Foto: " + data[1] + ". Tipo de archivo: JPG");
break;
case "2":
Console.WriteLine("Tamaño: " + cantidadBytes + " Bytes.");
Console.WriteLine("Foto: " + data[1] + ". Tipo de archivo: PNG.");
break;
default:
Console.WriteLine("Cosas raras en 'data': " + data.ToString()); // Por si hal algún error.
break;
}
int contador = 0;
byte[] datosArray = new byte[cantidadBytes];
//byte[] miBuffer = Encoding.ASCII.GetBytes("OK1");
//sp.Write(miBuffer, 0, miBuffer.Length); // Envía OK1 a Arduino.
switch (indata)
{
case "17729A1":
Thread.Sleep(100); // Retardo.
byte[] miBuffer = Encoding.ASCII.GetBytes("OK1"); // Codificación ASCII.
sp.Write(miBuffer, 0, miBuffer.Length); // Envía OK1 al puerto serie.
break;
case "2065A2":
Thread.Sleep(100); // Retardo.
byte[] miBuffer2 = Encoding.ASCII.GetBytes("OK2"); // Codificación ASCII.
sp.Write(miBuffer2, 0, miBuffer2.Length); // Envía OK2 al puerto serie.
break;
default:
Console.WriteLine("Cosas raras en 'indata': " + indata.ToString()); // Por si hal algún error.
break;
}
while (true)
{
contador += sp.Read(datosArray, contador, datosArray.Length - contador);
Console.SetCursorPosition(10, 6);
Console.Write("Datos recibidos: {0}", contador + " Bytes.");
Console.WriteLine(" ");
if ((contador == cantidadBytes) && (contador == 17729))
{
Mensaje1();
File.WriteAllBytes("fotón.jpg", datosArray); // Crear archivo en el disco duro.
Mensaje2();
Process.Start("fotón.jpg"); // Ejecutar visualizador de imágenes.
Mensaje3();
break; // Garantiza que el ciclo termine.
}
if ((contador == cantidadBytes) && (contador == 2065))
{
Mensaje1();
File.WriteAllBytes("fotón.png", datosArray); // Crear archivo en el disco duro.
Mensaje2();
Process.Start("fotón.png"); // Ejecutar visualizador de imágenes.
Mensaje3();
break; // Garantiza que el ciclo termine.
}
}
void Mensaje1()
{
Console.WriteLine();
Console.WriteLine("Creando archivo al disco duro...");
}
void Mensaje2()
{
Console.WriteLine();
Console.WriteLine("Archivo creado. Ejecutando imagen.");
}
void Mensaje3()
{
Console.WriteLine();
Console.WriteLine("Imagen ejecutada.");
Console.WriteLine();
Console.WriteLine("Cabecera recibida: " + indata + "\n");
Console.ForegroundColor = ConsoleColor.Yellow; // Letras amarillas.
Console.WriteLine("FIN DE PROGRAMA.");
Console.ForegroundColor = ConsoleColor.Gray; // Letras grises otra vez.
}
}
catch (FormatException)
{
// System.FormatException: 'La cadena de entrada no tiene el formato correcto.'
}
}
}
}
Saludos.