Soy un novato total con Arduino, aunque me defiendo un poco con la programación.
Tengo un Nano clonico (chino) V3.0 ATMEGA328P-AU, en principio todo ha ido relativamente bien dada mi inexperiencia.
Vamos al lio, necesito que el Nano reciba datos desde mi PC a través de la conexión USB, para mostrarlos en un display de 7 segmentos. La idea del proyecto es que la información se envíe desde un programa en VBA, pero eso vendrá luego.
El dispositivo funciona correctamente, carga desde el IDE y ejecuta normalmente.
Desde el monitor serie, el sketch también funciona correctamente, pero no consigo que reciba datos desde el PC, cuando le envío cualquier información el Nano se reinicia.
Estoy haciendo pruebas desde la linea de comandos de win7, en el Pc aparece como com4, primero configurando con "mode com4: 9600" y sus variantes, luego con "echo 123>com4:" y tambien con "copy archivo.txt com4:". Lo he intentado también con programa putty, sin resultados.
Llevo varios días atascado y por más que busco no encuentro la solución.
¿Que estoy haciendo mal?
¿El Nano soporta entrada de datos por USB?
¿Alguna idea?
Gracias anticipadas.
Moderador: lee las normas del foro y observa como se visualizan las imágenes adjuntas usando las etiquetas correspondientes. Ahora lo he editado para que comprendas como debe hacerse.
Parece que es una cuestión más complicada de lo que pensaba.
He encontrado un truco puenteando con una resistencia 120 ohms entre Reset y 5V.
Alguien lo ha probado?
Me refiero que vuelve a ejecutar todo el proceso de inicio, como cuando se conecta la alimentación.
Ejecuta todo el programa que tiene cargado, primero la función Setup y luego la Loop.
Esto lo hace cada vez que le envío algo desde el PC, mientras que desde el monitor serie del IDE funciona correctamente, sin reinicios.
Tengo los dos a 9600 baudios, en el Arduino con "Serial.begin(9600);" en el Setup y en el PC con "mode com4: 9600,n,8,1".
El Arduino lo alimento por el USB, el display es TM1637 y lo alimento desde el Arduino, pin 5v y GND.
Utilizo los pines 2 y 3 para CLK y DIO respectivamente.
Probaré con una alimentación externa para el display.
Consulta: Le puedes cargar un programa cualquiera? Si puedes entoces funciona adecuadamente.
Prueba algun ejemplo de comunicaciones del IDE y si es iteractivo mejor, algo que por monitor serie le escribas y el responda, aunque sea repitiendo lo que has escrito.
Acá tienes un ejemplo del IDE que puede servirte
// pins for the LEDs:
const int redPin = 3;
const int greenPin = 5;
const int bluePin = 6;
void setup() {
// initialize serial:
Serial.begin(9600);
// make the pins outputs:
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
void loop() {
// if there's any serial available, read it:
while (Serial.available() > 0) {
// look for the next valid integer in the incoming serial stream:
int red = Serial.parseInt();
// do it again:
int green = Serial.parseInt();
// do it again:
int blue = Serial.parseInt();
// look for the newline. That's the end of your sentence:
if (Serial.read() == '\n') {
// constrain the values to 0 - 255 and invert
// if you're using a common-cathode LED, just use "constrain(color, 0, 255);"
red = 255 - constrain(red, 0, 255);
green = 255 - constrain(green, 0, 255);
blue = 255 - constrain(blue, 0, 255);
// fade the red, green, and blue legs of the LED:
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
// print the three numbers in one string as hexadecimal:
Serial.print(red, HEX);
Serial.print(green, HEX);
Serial.println(blue, HEX);
}
}
}
Envias 3 enteros serparados por espacios y al final un ENTER
Todo por monitor serie. El sketch los va a separar y devolverá los valores en HEXADECIMAL pero te probará si funciona o no.
Estos datos son enviados desde la PC al Arduino y de regreso a la PC de modo que si esto funciona cosa que no dudo ocurrirá, esta todo bien.
Gracias por el ejemplo, no era necesario y tampoco dispongo ahora de leds para pruebas, me estoy iniciando directamente con el display TM1637.
Cualquier programa que le cargo funciona, y el display responde correctamente cuando la comunicación es desde el monitor serie. Muestra segmentos independientes desde programa y números desde el monitor serie sin ningún problema.
Los problemas son con la comunicación serie con el PC cuando envío datos por el puerto com, pero no tengo ningún problema con la carga de programas.