Mi sketch funciona en UNO pero no en MEGA

Buenas a tod@s, tengo el problema que el siguente codigo, funciona perfectamente en mi placa Arduino UNO pero no lo hace en la MEGA tal como indico en el titulo.

Estoy haciendo un pequeño robot conformado por un arduino MEGA, el clásico chasis 4WD de metacrilato, una shield para 4 motores DC mas dos servos, un modulo de matrices LED 8x8 de cuatro elementos + dos de un elemento (boca y ojos del robot) y modulo bluetooth HC-06, alimentado con una bateria LiPo de aeromodelismo (regulada a 5V, 3.6V y 9V)
Através del bluetooth recibe las ordenes enviadas por una aplicacion desde el PC.

Para probar cada parte, programé primero sólo la parte de tracción (motores+ shield) en arduino UNO (con alimentacion LiPo), que funciona bien;
en segundo lugar programé la parte de las matrices LED tambien en arduino UNO (sin shield y alimentado por USB), que funciona perfecto;

Como me encontré con el problema que la shield ocupa demasiados pines (y con la idea de usar algunos sensores y servos en un futuro cercano) pensé en usar arduino MEGA.

Conectando todo igual en MEGA (incluyendo la shield), el sketch para probar la tración funciona bien.
Conectando todo igual en MEGA (excluyendo la shield), el sketch para probar las matrices LED no funciona.

El codigo (el sketch para probar las matrices LED) lo adjunto porque excede el tamaño máximo permitido. Si necesitan los schetch de las otras pruebas, fotos o mas infornación agradezco me la soliciten.

Agradezco cualquier idea :slight_smile:

FaceLED_v3.0.ino (23 KB)

Solo es intuición. Mira SoftwareSerial y mia ledcontrol y busca si comparte algun Timer, esa debe ser la razón.

Otra cosa que veo que debe comprometer tu funcionamientoe son los delay() eso con una rutiina multiplexada es un error.

para resolver eso tendras que crear una máquina de estados.

Muchas gracias por tu respuesta y tiempo :slight_smile:

Hace un rato, haciendo pruebas suprimí esta linea:

SoftwareSerial BT1(4,2); //RX, TX

y en adelante opero el bluetooth como Serial1. (conectado en el pin 18 y 19 de arduino MEGA)

con eso funcionó el sketch de expresión, pero para mi desespero:

-cuando uno ambos sketchs (tración y expresión) solo funciona la parte de expresión, los motores no se mueven.
-para continuar cuando conecto un servo (9G) a cualquiera de los conectores que vienen preparados en la shield, las matrices se apagan completamente.
-como los problemas eran pocos el regulador 7805 alcanza una temp muy elevada.
-para saltar por la ventana: como se agotaba la bateria LiPo, la puse a cargar y la encontré como un balón de rugbi. :astonished: :’(

dejo adjunto el sketch (tracción + expresión) por superar el tamaño permitido por si quieren echar un vistazo.

Lo de la maquina de estados, llevas razón Surbyte, los delay()s paran completamente la ejecución del programa, pero aun no se como hacerlo en este caso, me pondré a experimentar, los delay()s en principio son temporales, solo para ver las transiciones fluidas pero no a velocidad extrema, por eso algunos valores tan altos.

De nuevo gracias por su tiempo.

FaceLED_v4.0_MEGA.ino (27.4 KB)

Unas fotos por si ayudan:

Dos servos manejarán las cejas, un servo grande la rotacion del cuello. Podré un ultrasonico y alguna cosa mas... ahora le falta el "cuerpo" que es un bol plastico por eso etá apoyado sobre las ruedas...

Dime como alimentas todo lo extra al MEGA?

El regulador que se ve en la fotografia coloque un 7805 y dos LM317

tengo 3 voltajes:

LM317 -> 9V 7805 -> 5V LM317 -> 3.6V

La shield para los motores esta alimentada con 9V El bluetooth con 3.6V Arduino MEGA con 5V Matrices LED con 5V

todo eso sale de una LiPo 3s de 11V 1600mAh

Y el pobre 7805 alimenta MEGA y LEDs? Le pusiste disisipador?

:sweat_smile: se que lo voy a matar, pero pensé que como son pocos LED los que se encienden simultaneamente me arriegué, tengo el disipador preparado, pero como estoy en fase de pruebas aun no lo he fijado (tengo que aislar los LM317 y el 7805 mi disipador será compartido)

Bueno, mica o plastico conductor aislante, grasa y a ponerlo amigo, porque se te va a rostizar.

Ahora que recuerdo SoftwareSerial usa una interrupción en los pines que configuras asi que la descartamos.

Al igual que _Gromek tenia el mismo problema de comunicación. Estaba realizando un programa para la comunicación entre una PC y un Arduino MEGA con el uso del HC-06 por medio de comunicación serie, pero con el fin de facilitarme las cosas use un Arduino UNO. Todo me funciono bien en el Arduino UNO, pero al subir el mismo programa al Arduino MEGA este no recibía el mensaje desde la computadora y solo se quedaba ejecutando el loop para recibir caracteres. Lo que me funciono fue eliminar el "SoftwareSerial BT1(4,2)" y programar alguno de los Seriales que trae Arduino MEGA (Serial1, Serial,2 y Serial3) como lo menciona _Gromek.

Gracias por el consejo _Gromek!!!