Go Down

Topic: [SOLUCIONADO] Una función (Read 875 times) previous topic - next topic

peptro

Oct 17, 2011, 05:57 am Last Edit: Oct 29, 2011, 04:00 pm by peptro Reason: 1
Hola a todos,
Tengo un problema, para mi grande problema, ya que soy una patata programando….
Tengo un programa, basado en Windows y necesito "coger" los datos que envía por Usb.
Lo datos que envía son estos:
chr(255) startbyte
chr(1) slave id
chr(1) output
chr(crc) a crc8 of slave id and output
Me gustaría poder leer estos datos (esencialmente salve id y output), asignarlos a unas variables para después poder… digamos enviarlos a los pine de arduino.
Mi problema es que no se como hacerlo, me he ido leyendo y probando muchos códigos, pero no lo he conseguido
Os agradecería una ayuda.
Gracias de antemano.

SrDonGato

no esperes que te vayamos a ayudar haciendote el código ...

Quote
que soy una patata programando….


Aprende, no hay otra manera.

entra en el primer post Consejos para hacer un correcto uso de los foros

http://arduino.cc/forum/index.php/topic,71446.0.html

y por

http://arduino.cc/playground/Es/Es

Sergegsx

mira mi firma.

ademas, pon el código con el que estes trabajando y que todavia no te funciona

peptro

Hola Sergegsx
el código con el que estoy trabajando es
int ledPin = 12;
char* val = "0";

void setup()
{
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}

void loop(){
if ( Serial.available()>0){

val[0]=Serial.read();
val[1]=Serial.read();
val[2]=Serial.read();
val[3]=Serial.read();
int a = atoi(val);
Serial.println(a);
digitalWrite(12,a);
}
}

pero....

Jacinto54

Desde Windows, simplemente leyendo el puerto serie virtual, deberia de ser trivial en cualquier lenguaje, Pascal, C, etc.

peptro

Hola, os explico lo que quiero hacer.
Tengo un programa, PyroIgnitionControl_V1.3.1; es un programa para "piromusicales".
Con este programa se "carga" un motivo  musical, se le añaden salidas y tiempos y al iniciar el Show envía, por medio de "PyroTronic.dll" estos datos (esto son relativo a la salida1 del box 1)
chr(255) startbyte
chr(1) slave id
chr(1) output
chr(crc) a crc8 of slave id and output
Lo que querría hacer es recoger estos datos y usarlo para decir a arduino, cuando el box  es igual a 1 y output es  igual a 1, envía la señal a pin x de arduino1; cuando el box  es igual  2 y output es  igual a 1, envía la señal a pin x de arduino2.
Creo que así es un poco más claro lo que quiero hacer.
Un saludo

Jacinto54

Pues ningun problema !!, lees los datos, y envias las conclusiones a los Arduinos por los diferentes puertos, los Arduinos los leen (en los ejemplos del apartado de comunicaciones se ve como recibe el Arduino) y acabaremos.

Tomas las decisiones con if o switch y tema cerrado!!!

Jacinto54

Doy por supuesto que estas usando "PyroTronic.dll" y que utilizando alguna de sus funciones consigues copia de los datos que se estan transmitiendo o estan disponibles.

peptro


Pues ningun problema !!, lees los datos, y envias las conclusiones a los Arduinos por los diferentes puertos,

es lo que no se hacer... :smiley-red:

flico

Que ilu, con lo que me gusta a mi la pirotecnia. Tengo que decir que llevo polvora en mi sangre, pero literal porque me queme con una carcasa hace muchos años.
Bueno como veo que has empezado con el codigo voy ayudarte un poco, como dice el @SrDongato hay gente que le tiene mucha cara y quiere que le hagan el programa.
Veo que la estructura de la trama es
chr(255) startbyte
chr(1) slave id
chr(1) output
chr(crc) a crc8 of slave id and output

Lo mas importante es controlar el CRC, asi sabemos que el mensaje ha llegado bien y no tiene ningun error.

Mirate el proyecto de jpmzometa, hay muchas cosas que sirven para lo que quieres hacer inclusive el control del checksum.
http://sites.google.com/site/jpmzometa/arduino-mbrt

Te dejo también otro CRC

Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

curro92

Hola peptro,

Mejor que declares un val con lugar suficiente para la cadena que vayas a meterle (los 4 bytes más el cero final):

char val[5];

val[0]=Serial.read();
val[1]=Serial.read();
val[2]=Serial.read();
val[3]=Serial.read();

// Y al final le pones el carácter 0
val[4]= '\0' ;

int a = atoi(val);


Jacinto54

Para peptro

  A ver que me aclare, que no sabes hacer???

  Usar la DLL?  obtener los datos que envia tu programa? enviarlos al Arduino???

  Porque no se si te estoy respondiendo a lo que preguntas.

peptro


Para peptro

  A ver que me aclare, que no sabes hacer???

  Usar la DLL?  obtener los datos que envia tu programa? enviarlos al Arduino???

  Porque no se si te estoy respondiendo a lo que preguntas.

Hola Jacint54
Con arduino quiero leer los datos que envia un programa. los dato que envia este programa son
chr(255) startbyte
chr(1) slave id
chr(1) output
chr(crc) a crc8 of slave id and output
y después quiero usarlo usarlo para decir a arduino, cuando el box  es igual a 1 y output es  igual a 1, envía la señal a pin x de arduino1; cuando el box  es igual  2 y output es  igual a 1, envía la señal a pin x de arduino2.

SrDonGato

debes ..


leer del puerto serrie --> en los ejemplos del IDE puedes ver como se hace

leer 3 bytes  a partir del byte que sea igual a 255

hacer varios If con esos datos y segun valga 1 o 0 activar una salida o no


imagino que tendras que hacer alguna cuenta con el ultimo bye CRC para saber si has recibido todo bien.

esto no tiene complicacion

repito, no te vamos a hacer el codigo

Jacinto54

Si desde Arduino quieres leer lo que envia el programa, es lo que te dice DonGato, hay ejemplos en el propio IDE, es lo que te comentaba, una serie de IFs o un SWITCH, y adelante, es trivial y no reviste mayor complejidad.

Go Up