¿Cómo se hace un array de C# a Arduino?

Hola:

La abreviación de este no me funciona.
Código:
prog_uchar rawData[] ={
@cosmefulanito04
Son cosas que pasan con Arduino, de todas maneras quiero poner imagen mucho más grande para probar.
He probado con una imagen jpg comprimido a mala calidad. Al compilar Arduino IDE me dice esto y funciona.

El Sketch usa 31788 bytes (98%) del espacio de almacenamiento de programa. El máximo es 32256 bytes.
Las variables Globales usan 206 bytes (10%) de la memoria dinámica, dejando 1842 bytes para las variables locales. El máximo es 2048 bytes.

Desde este mismo instante voy hacer el programa de C# en consola para que me recoja la información que da Arduino hacia el PC, lo guarde en el disco duro y lo puedan ver.

Sigo con ello.
 
Hola:

Por lo que parece, no hay que preocuparse para nada los 64 bytes del buffer, para nada, ya lo tengo comprobado.

Ya puedo enviar datos al puerto serie, en el Monitor Serial de Arduino IDE muestra los datos al recibir pero se ven raro y se queda ahí.

Ahora estoy trabajando en C# para recibir los datos, guardarlo en memoria y pasarlo en el disco duro. En C# estoy liado porque Arduino envía los datos en binario que se muestra en HEX, y ahí tengo que saber como interpretarlos para generar el archivo, entonces se generaría corrupto.

Si todo esto funciona de maravilla,haré otro programa que lo indique todo en el LCD 16x2 de Arduino. Para mi, la guinda del paste.

Saludos.
 
Igual por más que sea arduino y toda la bola... programar en C# en un uC.... mmmmm :rolleyes:

Ya creo que esto lo discutimos en su momento, hay que buscar un equilibrio acorde, ni reinventar la rueda con assembler para tener que estar pendiente de absolutamente todo, ni usar un lenguaje de tan alto nivel que no te permita saber que pasa con el hardware.

Insisto con esto, te recomiendo que uses C, es el lenguaje para un uC, tenés el control de todo sin necesidad de estar pendiente de todo lo que sucede.

Incluso un C++ puede ser interesante, aunque para mí no vale la pena en uC, con C te alcanza y sobra, porque el proyecto que podrías tener en un uC no creo que pueda ser tan grande como para beneficiarse con la orientación a objetos.

Ojo, tanto C# como Java en una PC o en una micro computadora (raspberry u otros), son excelentes herramientas.

Así y todo si conseguís tu objetivo, no importa lo que uses, siempre y cuando des con la solución que te resulto más sencilla.
 
Hola:

No he comentado en ningún momento programar C# para los microcontroladores, para eso prefiero asm y C/C++.

He escrito anteriormente C de Arduino IDE para enviar datos por el puerto serie y C# en el PC para recoger datos. Ahora espero haberme explicado mejor. ;)

Arduino es el aparatito y C# para la interfaz del PC, en este caso para hacer pruebas en modo consola que es lo que estoy trabajando en este momento.

C# para microcontroladores no está optimizado y quita mucho memoria, incluido trabajar para Android, chupa mucho recursos, mejor C con asm si hace falta y se acabó. ;)

Precisamente me está dando guerra C# por el tema de capturar datos.

Aruino IDE precticamente este ejemplo me vale.
Código:
// Enviar tramas de byte al puerto serie.

int estadoBoton = 0; // Guardará el estado del botón HIGH o LOW.
int anteriorBoton = 0;
char caracter;
String comando;
int flagMensaje = 0;

// Esta trama de bytes corto en realidad es extremadamente largo, en este caso es como ejemplo.
PROGMEM const unsigned char rawData[] = {
  0xFF, 0xD8, 0xFF, 0xE1, 0x00, 0x18, 0x45, 0x78, 0x69, 0x66, 0x00, 0x00
};

void setup()
{
  pinMode(13, OUTPUT); // Donde está el Led 13.
  pinMode(8, INPUT); // Entrada digital donde está el pulsador.
  Serial.begin(115200);
}

void enviarImagen() {
  for (unsigned int i = 0; i < sizeof(rawData); i++)
    Serial.write(pgm_read_byte(&rawData[i]));
}

void loop()
{
  estadoBoton = digitalRead(8); // Leer entrada digital número 8.

  // Si el pulsador está pulsado, se enciende el Led 13 y
  // envía comando HIGH por el puerto serie.

  if (estadoBoton != anteriorBoton) // Comprueba si ha habido un cambio en el estado del botón.
  {
    flagMensaje = 0;                // Resetea la bandera a 0.
    anteriorBoton = estadoBoton;    // Guarda el estado actual del botón.
  }

  if (estadoBoton == HIGH && flagMensaje == 0) // Comprueba que el botón esté pulsado y que no se haya enviado el mensaje.
  {
    digitalWrite(13, HIGH);
    //Serial.write("ON");
    enviarImagen(); // Enviar imagen o foto hacia el puerto serie al PC.
    delay(50);

    if (flagMensaje == 0) // Si se envío el mensaje aumenta la variable a 1 para no enviarlo la próxima vez.
      flagMensaje++;
  }

  // De lo contrario, Led 13 epagado y envía LOW al puerto serie.
  else if (flagMensaje == 0) // Si el botón no está presionado y aún no se envía el mensaje.
  {
    digitalWrite(13, LOW);
    //Serial.write("OFF");
    delay(50);

    if (flagMensaje == 0) // Si se envió el mensaje aumenta la variable en 1 para no enviarla la próxima vez.
      flagMensaje++;
  }
}
Cuando acabe, enviaré ejemplos para que los prueben.

Saludos.
 
Última edición:
Hola:

Por fin acabé el programa. Les dejo la descarga el código de Arduino y el programa C# modo consola.
Los que lo hayan probado, puedes subir aquí la imagen que tiene escondido Arduino.

Descarga

Saludos.
 

Adjuntos

  • Programa_v1.zip
    44.7 KB · Visitas: 4
Hola:

Sigo con pruebas, ahora lee con modo consola y Windows Form C#, más adelante lo haré con Visual Basic .net, VB 6, Java. Hablo deuna interfazpara capturar datos del puerto serie.

puerto-serie-c-1697514.png


Sigo peleándome con WPFC# SilverLigth.
992270


Les dejo el proyecto y código fuente de Arduino. Dentro hay una foto, compilan el código fuente de Arduino y con estas aplicaciones que hice captura los datos, es una foto. Espero colaboradores, y si lo logran que es fácil, puedes subir la imagen aquí. El pulsador es el botón pin 2 de Arduino UNO.

Descarga

Saludos.
 
Atrás
Arriba