Introduction: Semáforo Inteligente

En el siguiente documento se aborda la iniciativa para la creación de un Sistema Inteligente de Semaforización y Señalización para las ciudades, apoyados del sistema arduino se pretende lograr un gran alcance de innovación tecnológica que permita mejorar la administración de los sistemas de control y redes semafóricas, automatizando los procesos de controles de tiempo, buscando centralizar la operación de los mismos.

Step 1: Materiales Para Este Proyecto

Step 2: Arduino Uno

Step 3: 4 Matrices Led RGB 8x8

Step 4: Jumpers Macho-macho, Macho-hembra Y Hembra-hembra

Step 5: Board O Placa, Para Diseño De Circuitos.

Step 6: Madera De Balzo Para La Infraestructura

Step 7: Pines Macho Y Hembra

Step 8: Cautín

Step 9: Soldadura De Estaño

Step 10: Pomada Para Soldar.

Step 11: Tomas De Energía.

Step 12: Extensión De Energía Que Tenga 4 Tomas, Para Adaptador De 5 Voltios.

Step 13: Acrílico Transparente

Step 14: Sensores

- Sensor de Temperatura y Humedad

- Sensor de Tiempo Ref: DS1302

Step 15: PROCEDAMOS a INSTALAR

1.

Se soldó cada matriz en la board que se diseñó, pines machos y hembras para que al conectar las matrices en la board estas tengan siempre la misma posición y no haya ningún error de conexión, se soldó en la board pines hembras para las entradas tipo macho en la Matriz y pinos machos para las Salidas hembra de la Matriz, lo que facilita su conexión, esto hace que se pueda conectar cualquiera de las matrices en el circuito sin importar su orden. En la board que se diseño se realizaron las diferentes conexiones de entradas y salidas de datos para las conexiones de las matrices.

2.

En la placa se soldaron los jumper que le van a generar la energía de las matrices, GND, Energía y Datos, donde van a estar interconectadas la una de La otra. Una de las matrices (Madre) es la que emite señal a las otras, independientemente de que cada una tenga sus respectivas Conexiones. Esta matriz (Madre) es la que se va a conectar al Arduino Uno, donde recibe toda su energía y el código de programación, para que de esta manera se visualice en las matrices los Mensajes. Las otras matrices se conectan Mediante los Jumper a los tomas de energía, lo que también va a estar soldado, para poder que cuando se conecte el cable de los 4 tomas le transmitan energía, uno de los tomas Irá al Arduino y con el cargador de 5 voltios se le transmite la energia a todo el circuito.

Step 16: Código De Programación

Código 1: Control de semáforo y señalización

<p>/* Clase de Sensores trabajo realizado por Maria Alejandra Bermúdez O<br>y Juan David Bermúdez O. Universidad de Medellín, Noviembre de 2016*/
 </p><p>//Librerias para el control de leds de manera independiente
//Se usan para la función de cambio del semáforo o control de semáforo
#include <Adafruit_NeoPixel.h></p><p>#ifndef __AVR__
#include <avr/power.h></p><p>#endif
#define PIN  3
//Fin inclusión librerias del semáforo</p><p>// Se define la cantidad de leds en la matrix a controlar
#define NUMPIXELS      256</p><p>//Se crea la variable llamada pixels con sus condiciones basadas en las librerias para el manejo indpendientes de los leds, señales de los semáforos
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);</p><p>int delayval = 10000; // Variable con un tiempo de espera de ejecución
int i=0;//Variable global para uso en cualquier ciclo</p><p>//Inicio del hardware
void setup() 
{
  //Inicialización del hardwre de la matrix en la variable pixels, por defecto apagado
  pixels.begin();
}</p><p>//Inicio de control de los cambios de luz en el semáforo y construcción de imagenes.
//Función que enciende la luz roja en toda la matrix de manera estática
void rojo()
{
  for(i=0;i<256;i++)
  {
    pixels.setPixelColor(i, pixels.Color(1,0,0)); // Establece el color en RGB.
  }
  pixels.show(); // Envía el cambio de estado al hardware y enciende los leds
}</p><p>//Función para cambio de color intermedio
void amarillo()
{
  for(i=0;i<256;i++)
  {
    pixels.setPixelColor(i, pixels.Color(10,5,0)); // Establece el color amarillo
    pixels.show(); // Envía la actualización de color a la matrix
  }</p><p>}</p><p>//Función del semáforo en estado verde para continuidad
void verde()
{
  for(i=0;i<256;i++)
  {
    pixels.setPixelColor(i, pixels.Color(0,10,0)); // Establece el color verde en RGB  
  }
  /*Código que construye y muestra el sentido del carril en el semáforo
  Matriz de derecha a izquierda de 1 a 4
  Matriz 1
  Gráfica de giro a la derecha*/
  pixels.setPixelColor(3, pixels.Color(30,30,30));
  //Ciclos de construcción de la figura flecha a la derecha
  for (i=10;i<13;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=17;i<22;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=27;i<44;i=i+8)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=44;i<47;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  //Matriz 2
  //Continuidad de frente ciclos de construcción
   pixels.setPixelColor(74, pixels.Color(30,30,30));
   pixels.setPixelColor(114, pixels.Color(30,30,30));
  for (i=81;i<83;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=88;i<95;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=96;i<103;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=105;i<107;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }</p><p>  //Matriz 3
  //Continuidad de frente ciclos de construcción
   pixels.setPixelColor(138, pixels.Color(30,30,30));
   pixels.setPixelColor(178, pixels.Color(30,30,30));
  for (i=145;i<147;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=152;i<159;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=160;i<167;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=169;i<171;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
//Matriz 4
  //Giro a la izquierda, ciclos de construcción
   pixels.setPixelColor(251, pixels.Color(30,30,30));
   pixels.show();
  for (i=242;i<245;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=233;i<238;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=211;i<228;i=i+8)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=212;i<215;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  //Comando que ejecuta el cambio de estado (del hardware) en los leds de la matrix
  pixels.show();
  
}
//Función que apaga las luces del semaforo.
void apagadosemaforo()
{
  //Ciclo para el apagado
  for(i=0;i<256;i++)
  {
    pixels.setPixelColor(i, pixels.Color(0,0,0)); // Moderately bright green color.  
  }
  pixels.show(); // Envía la actualización de color a la matrix
}</p><p>//Función que cambio el semáforo a rojo titilando
void cambiosemafororojo()
{
    //Inicio del ciclo animado
    for (i;i<5;i++)
    {
      apagadosemaforo();//Invocación de la función apagado
      delay (100);
      rojo();//Invocación de la función encendido en luz roja
      delay (100);
      }
  }</p><p>//Función que cambio el semáforo a verde titilando
void cambiosemaforoverde()
{
    for (i;i<5;i++)
    {
      apagadosemaforo();//invocación de apagado
      delay (100);
      verde();//invocación del estado encendido en luz verde
      delay (100);
      }
  }</p><p>//Función que indica giro todo a la izquierda
void gizquierda()
{
  //Ciclo para el color verde de fondo en toda la matrix
  for(i=0;i<256;i++)
  {
    pixels.setPixelColor(i, pixels.Color(0,10,0)); // Establece el color verde en RGB  
  }
    //Construcción de la gráfica en la señal
    // matrix 1
    for(i=9;i<28;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=14;i<29;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=33;i<52;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=38;i<53;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
  // matrix 2
  for(i=73;i<92;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=78;i<93;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=97;i<116;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=102;i<117;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
   // matrix 3
   for(i=137;i<156;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=142;i<157;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=161;i<180;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=166;i<181;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
  //matrix 4
  for(i=201;i<220;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
      pixels.show();
       for(i=206;i<221;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=225;i<244;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=230;i<245;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       pixels.show();//Actualización del hardware en color de los leds
  }</p><p>//Función que indica giro a la derecha de todos los carriles
void gderecha()
{
  //Ciclo de llenado del fondo en color verde
  for(i=0;i<256;i++)
  {
    pixels.setPixelColor(i, pixels.Color(0,10,0)); // Establece el color verde en RGB  
  }
     //Construcción de las gráficas
    // matrix 1
    for(i=11;i<26;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=12;i<31;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=35;i<50;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=36;i<55;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
// matrix 2
  for(i=75;i<90;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=76;i<95;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=99;i<114;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=100;i<119;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
   // matrix 3
   for(i=139;i<154;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=140;i<159;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=163;i<178;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=164;i<183;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
  //matrix 4
  for(i=203;i<218;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=204;i<223;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=227;i<242;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=228;i<247;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       pixels.show();//Envío de la actualización del hardware en color
  }</p><p>//Función que indica que solo hay continuidad de frente en los de carriles solo de frente, cierre de giros izquierdo y derecho</p><p>void frente()
{
  //Llenado de la matriz en fondo verde
  for(i=0;i<256;i++)
  {
    pixels.setPixelColor(i, pixels.Color(0,10,0)); // Establece el color verde en RGB  
  }
  //Construcción de las graficas
  //Matrix 1
  pixels.setPixelColor(10, pixels.Color(30,30,30));
   pixels.setPixelColor(50, pixels.Color(30,30,30));
  for (i=17;i<19;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=24;i<31;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=32;i<39;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=41;i<43;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  
  //Matriz 2
   pixels.setPixelColor(74, pixels.Color(30,30,30));
   pixels.setPixelColor(114, pixels.Color(30,30,30));
  for (i=81;i<83;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=88;i<95;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=96;i<103;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=105;i<107;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  //Matriz 3
  //Continuidad de frente
   pixels.setPixelColor(138, pixels.Color(30,30,30));
   pixels.setPixelColor(178, pixels.Color(30,30,30));
  for (i=145;i<147;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }</p><p>  for (i=152;i<159;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
   
  for (i=160;i<167;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }</p><p>  for (i=169;i<171;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }</p><p>  //Matrix4
  pixels.setPixelColor(202, pixels.Color(30,30,30));
   pixels.setPixelColor(242, pixels.Color(30,30,30));
  for (i=209;i<211;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=216;i<223;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=224;i<231;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=233;i<235;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  pixels.show();//Actualización del hardware en el color de los leds
 
}</p><p>//Control de flujo solo con giros al lado izquierdo y derecho
void gizqgder()
{
  //Llenado de color verde todas las matrix
  for(i=0;i<256;i++)
  {
    pixels.setPixelColor(i, pixels.Color(0,10,0)); // Establece el color verde en RGB  
  }
    //Construcción de las gráficas
    //Giros a la derecha, matrix 1 y 2
    // matrix 1
    for(i=11;i<26;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=12;i<31;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=35;i<50;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=36;i<55;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
// matrix 2
  for(i=75;i<90;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=76;i<95;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=99;i<114;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=100;i<119;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
     
    //Giros izquierda, matrix 3 y 4
      // matrix 3
   for(i=137;i<156;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=142;i<157;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=161;i<180;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=166;i<181;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
  //matrix 4
  for(i=201;i<220;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=206;i<221;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=225;i<244;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=230;i<245;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       pixels.show();
}
//Ciclo que se ejecuta repetitivametne
void loop() 
{</p><p>  //Llamado de las funciones en el orden que se desea mostrar la secuencia en el semáforo
  //Control apagado del semaforo
  apagadosemaforo();
  delay(100);</p><p>  // Control para el flujo vehícular en verde.
  verde();
  delay(delayval);//Tiempo de espera
  cambiosemaforoverde();//Ejecución de cambio del semáforo</p><p>  //Control del semáforo en amarillo
  amarillo();
  delay (50);</p><p>  //Control del semáforo en rojo
  rojo();  
  delay(delayval);
  cambiosemafororojo();</p><p>  //control para mostrar cambio
  amarillo();
  delay(50);</p><p>  //Control de carriles definidos aplica cuando se cierran las otras vías del cruce
  //Continuidad solo a la izquierda
  gizquierda();
  delay(3000);</p><p>  //Control del semáforo en amarillo
  amarillo();
  delay (50);</p><p>  //Control del semáforo en rojo
  rojo();  
  delay(delayval);
  cambiosemafororojo();</p><p>  //Continuidad solo a la derecha
  gderecha();
  delay(3000);</p><p>  //Control del semáforo en amarillo
  amarillo();
  delay (50);</p><p>  //Control del semáforo en rojo
  rojo();  
  delay(delayval);
  cambiosemafororojo();</p><p>  //Continuidad solo de frente
  frente();
  delay(3000);</p><p>  //Control del semáforo en amarillo
  amarillo();
  delay (50);</p><p>  //Control del semáforo en rojo
  rojo();  
  delay(delayval);
  cambiosemafororojo();</p><p>  //Control del semáforo en giro izquierda y derecha
  gizqgder();
  delay(3000);</p><p>  //Control del semáforo en amarillo
  amarillo();
  delay (50);</p><p>  //Control del semáforo en rojo
  rojo();  
  delay(delayval);
  cambiosemafororojo();
}</p>

Código 2: Control de mensajes y sensores en el semáforo.

<p>/* Clase de Sensores trabajo realizado por Maria Alejandra Bermúdez O<br>y Juan David Bermúdez O. Universidad de Medellín, Noviembre de 2016*</p><p>/Inclusión de librerias necesarias para la matrix y los diferentes eventos
#include <Adafruit_GFX.h>// Libreria para el control de Texto (fuentes)en la Matrix</p><p>#include <Adafruit_NeoMatrix.h>//Texto</p><p>#include <Adafruit_NeoPixel.h>//Texto</p><p>#include <Adafruit_Sensor.h>// Sensor de Temperatura y humedad</p><p>#include <DHT.h>//Sensor de Temperatura y Humedad</p><p>#include <DHT_U.h>//Sensor de Temperatura y Humedad</p><p>#ifndef PSTR
 #define PSTR // Activación del arduino
#endif</p><p>//Inclusión librerias sensor de temperatura
#define DHTPIN 2 // Pin de comunicación con sensor
#define DHTTYPE DHT22 //Referencia de sensor usado
#define PIN 3 // Pin de comunicación con la matrix</p><p>//Inclusión librerias sensor de tiempo
#include <DS1302.h></p><p></p><p>//Inicialización del sensor de tiempo usara los pines de comunicación  
DS1302 rtc(4, 5, 6);//Pines de comunicación
Time t;//Variable de tiempo</p><p>DHT_Unified dht(DHTPIN, DHTTYPE);// Declaración de variable dht para el sensor de temperatura
uint32_t delayMS;//Variable para manejo de espera</p><p>//Comportamiento de los leds en la matrix bajo la libreria NeoMatrix.h construcción de la variable matrix
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(32, 8, PIN,
  NEO_MATRIX_TOP     + NEO_MATRIX_RIGHT +
  NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE,
  NEO_GRB            + NEO_KHZ800);</p><p>//Declaración de colores en la matrix se usaran solo el color rojo para anuncios
const uint16_t colors[] = {
//Establecimiento de color rojo en la variable matrix  
matrix.Color(255, 0, 0)};</p><p>//Inicio de variables para todo el aplicativo comportamiento global
void setup() 
{
  //Inicializacion de la matrix, brillo y color del texto a combinar
  matrix.begin();
  matrix.setTextWrap(false);
  matrix.setBrightness(30);
  matrix.setTextColor(colors[0]);</p><p>  //Sensor de Temperatura y Humedad
  dht.begin();
  sensor_t sensor;
  dht.temperature().getSensor(&sensor); 
  //Comunicación que sirve para tomar sincronización inicial de la fecha y hora desde un pc
  Serial.begin(9600);
}
// Fin inicialización de variables solo se ejecutan en la función setup()</p><p>//Declaración de variables para el control de posición y desplazamiento de los leds
int x    = matrix.width();//x toma la posición inicial del tamaño de la matrix</p><p>// Funciónes que controlan el textos
void texto() 
{
  // Impresión de mensaje de texto
  matrix.print(F(" Vel / Max 60 KMS "));
}</p><p>void texto1()
{
  matrix.print(F(" Conduzca con cuidado "));
}</p><p>void texto2()
{
  matrix.print(F(" NO maneje mientras toma "));
}</p><p>//Función que controla el sensor de temperatura
void clima()
{
  // Retraso entre la toma de muestras.
  delay(delayMS);
  // Obtener la temperatura e imprimir su valor en la matriz, se verifica si está  o no disponible el dato.
  sensors_event_t event; //Variable de captura de la información 
  dht.temperature().getEvent(&event);//Se toma la muestra de la temperatura del sensor.
  //Inicio del ciclo de verificación.
  if (isnan(event.temperature)) {
    matrix.print(F("No Clima"));//Significa que no está disponible la información.
  }
  else {
    matrix.print(F("Clima "));//Si está disponible entrega el valor para ser impreso en la matrix
    matrix.print((event.temperature));//Se captura el dato
    matrix.print(F(" C"));
  }
  // Obtener la humedad e imprimir su valor en la matriz, se verifica si esta  o no disponible el dato
  dht.humidity().getEvent(&event);//Se toma la muestra  de humedad del sensor.
  //Inicio del ciclo de verificación
  if (isnan(event.relative_humidity)) {
    matrix.print(F(" No Humedad"));//Si no está disponible imprime el mensaje No Humedad
  }
  else {
    matrix.print(F(" - Humedad "));
    matrix.print((event.relative_humidity));//En caso de estar disponible entrega el valor para ser impreso en la matrix.
    matrix.print(F("%"));
  }
}
//Función que permite controlar la fecha y hora mediante el sensor DS1302
void fecha()
{
  //Impresión de la fecha y la hora
  // Obtencion de datos de fecha hora sincronización automática con un pc
  t = rtc.getTime();
  //Impresión del día correspondiente a la fecha, mediante verificación
  matrix.print(F(" "));
  if (t.dow == 1) matrix.print(F("Lunes"));  // La variable t.dow (día de la semana) tendrá valor de 1 para dia lunes y 7 para domingo.
  if (t.dow == 2) matrix.print(F("Martes"));
  if (t.dow == 3) matrix.print(F("Miercoles"));
  if (t.dow == 4) matrix.print(F("Jueves"));
  if (t.dow == 5) matrix.print(F("Viernes"));
  if (t.dow == 6) matrix.print(F("Sabado"));
  if (t.dow == 7) matrix.print(F("Domingo"));
  matrix.print(F(" "));
  matrix.print((t.date));//Impresión del día
  matrix.print(F("/"));
  matrix.print((t.mon));//Impresión del mes
  matrix.print(F("/"));
  matrix.print((t.year));//Impresión del año</p><p>  matrix.print(F("   Hora:"));
  matrix.print((t.hour));//Impresión de hora
  matrix.print(F(":"));  // Minutos.
  matrix.print((t.min));//Impresión de minutos
  matrix.print(F(":"));  // Segundos.
  matrix.print((t.sec));//Impresión de hora</p><p>}</p><p>//Ejecución del programa ciclo repetitivo loop
void loop() 
{
  matrix.fillScreen(0);//Fondo de la matrix apagado
  matrix.setCursor(x, 0);//Posición del led inicial
  //Invocación de las funciones en el orden en que se desean mostrar
  texto();
  clima();
  fecha();
  texto1();
  texto2();
  /*Ciclo para el control de desplazamiento que permite mostrar la cantidad de los textos
    Se calcula la sumatoria de cada frase con espacios por la cantidad de les de una matrix
    Garantiza que el texto se muestre completo y se desplace de derecha a izquierda como una marquesina.*/
  if(--x < -838) 
  {
    x = matrix.width();
  }
  matrix.show();//Envía solicitud al hardware de la matrix que cambie de estado en los leds
  delay(30);//Velocidad con que pasan los mensajes
}</p>

Código 3: Integración código 1 y 2

<p>/* Clase de Sensores trabajo realizado por Maria Alejandra Bermúdez O<br>y Juan David Bermúdez O. Universidad de Medellín, Noviembre de 2016*</p><p>/Inclusión de librerias necesarias para la matrix y los diferentes eventos
#include <Adafruit_GFX.h>// Libreria para el control de Texto (fuentes)en la Matrix</p><p>#include <Adafruit_NeoMatrix.h>//Texto</p><p>#include <Adafruit_NeoPixel.h>//Texto y semáforo en sus estados</p><p>#include <Adafruit_Sensor.h>// Sensor de Temperatura y humedad</p><p>#include <DHT.h>//Sensor de Temperatura y Humedad</p><p>#include <DHT_U.h>//Sensor de Temperatura y Humedad</p><p>#ifndef PSTR
 #define PSTR // Activación del arduino
#endif</p><p>//Inclusión librerias sensor de temperatura
#define DHTPIN 2 // Pin de comunicación con sensor
#define DHTTYPE DHT22 //Referencia de sensor usado
#define PIN 3 // Pin de comunicación con la matrix</p><p>//Inclusión librerias sensor de tiempo
#include <DS1302.h></p><p>//Librerias para el control de leds de manera independiente
//Se usan para la función de cambio del semáforo o control de semáforo
#ifndef __AVR__
#include <avr/power.h></p><p>#endif
//Fin inclusión librerias del semáforo</p><p>// Se define la cantidad de leds en la matrix a controlar
#define NUMPIXELS      256</p><p>//Inicialización del sensor de tiempo usara los pines de comunicación  
DS1302 rtc(4, 5, 6);//Pines de comunicación
Time t;//Variable de tiempo</p><p>DHT_Unified dht(DHTPIN, DHTTYPE);// Declaración de variable dht para el sensor de temperatura
uint32_t delayMS;//Variable para manejo de espera</p><p>//Comportamiento de los leds en la matrix bajo la libreria NeoMatrix.h construcción de la variable matrix para el texto
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(32, 8, PIN,
  NEO_MATRIX_TOP     + NEO_MATRIX_RIGHT +
  NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE,
  NEO_GRB            + NEO_KHZ800);</p><p>//Declaración de colores en la matrix se usaran solo el color rojo para anuncios
const uint16_t colors[] = {
//Establecimiento de color rojo en la variable matrix  
matrix.Color(255, 0, 0)};</p><p>//Se crea la variable llamada pixels con sus condiciones basadas en las librerias para el manejo indpendientes de los leds, señales de los semáforos
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);</p><p>int delayval = 10000; // Variable con un tiempo de espera de ejecución
int i=0;//Variable global para uso en cualquier ciclo</p><p>//Inicio de variables para todo el aplicativo comportamiento global
void setup() 
{
  //Inicializacion de la matrix, brillo y color del texto a combinar
  matrix.begin();
  matrix.setTextWrap(false);
  matrix.setBrightness(30);
  matrix.setTextColor(colors[0]);</p><p>  //Sensor de Temperatura y Humedad
  dht.begin();
  sensor_t sensor;
  dht.temperature().getSensor(&sensor); 
  
  //Comunicación que sirve para tomar sincronización inicial de la fecha y hora desde un pc
  Serial.begin(9600);</p><p>   //Inicialización del hardware de la matrix en la variable pixels, por defecto apagado
  pixels.begin();  
}
// Fin inicialización de variables solo se ejecutan en la función setup()</p><p>//Declaración de variables para el control de posición y desplazamiento de los leds
int x    = matrix.width();//x toma la posición inicial del tamaño de la matrix</p><p>// Funciónes que controlan el textos
void texto() 
{
  // Impresión de mensaje de texto
  matrix.print(F(" Vel / Max 60 KMS "));
}</p><p>void texto1()
{
  matrix.print(F(" Conduzca con cuidado "));
}</p><p>void texto2()
{
  matrix.print(F(" NO maneje mientras toma "));
}</p><p>//Función que controla el sensor de temperatura
void clima()
{
  // Retraso entre la toma de muestras.
  delay(delayMS);
  // Obtener la temperatura e imprimir su valor en la matriz, se verifica si está  o no disponible el dato.
  sensors_event_t event; //Variable de captura de la información 
  dht.temperature().getEvent(&event);//Se toma la muestra de la temperatura del sensor.
  //Inicio del ciclo de verificación.
  if (isnan(event.temperature)) {
    matrix.print(F("No Clima"));//Significa que no está disponible la información.
  }
  else {
    matrix.print(F("Clima "));//Si está disponible entrega el valor para ser impreso en la matrix
    matrix.print((event.temperature));//Se captura el dato
    matrix.print(F(" C"));
  }
  // Obtener la humedad e imprimir su valor en la matriz, se verifica si esta  o no disponible el dato
  dht.humidity().getEvent(&event);//Se toma la muestra  de humedad del sensor.
  //Inicio del ciclo de verificación
  if (isnan(event.relative_humidity)) {
    matrix.print(F(" No Humedad"));//Si no está disponible imprime el mensaje No Humedad
  }
  else {
    matrix.print(F(" - Humedad "));
    matrix.print((event.relative_humidity));//En caso de estar disponible entrega el valor para ser impreso en la matrix.
    matrix.print(F("%"));
  }
}
//Función que permite controlar la fecha y hora mediante el sensor DS1302
void fecha()
{
  //Impresión de la fecha y la hora
  // Obtencion de datos de fecha hora sincronización automática con un pc
  t = rtc.getTime();
  //Impresión del día correspondiente a la fecha, mediante verificación
  matrix.print(F(" "));
  if (t.dow == 1) matrix.print(F("Lunes"));  // La variable t.dow (día de la semana) tendrá valor de 1 para dia lunes y 7 para domingo.
  if (t.dow == 2) matrix.print(F("Martes"));
  if (t.dow == 3) matrix.print(F("Miercoles"));
  if (t.dow == 4) matrix.print(F("Jueves"));
  if (t.dow == 5) matrix.print(F("Viernes"));
  if (t.dow == 6) matrix.print(F("Sabado"));
  if (t.dow == 7) matrix.print(F("Domingo"));
  matrix.print(F(" "));
  matrix.print((t.date));//Impresión del día
  matrix.print(F("/"));
  matrix.print((t.mon));//Impresión del mes
  matrix.print(F("/"));
  matrix.print((t.year));//Impresión del año</p><p>  matrix.print(F("   Hora:"));
  matrix.print((t.hour));//Impresión de hora
  matrix.print(F(":"));  // Minutos.
  matrix.print((t.min));//Impresión de minutos
  matrix.print(F(":"));  // Segundos.
  matrix.print((t.sec));//Impresión de hora</p><p>}</p><p>//Funciones del semáforo.
//Inicio de control de los cambios de luz en el semáforo y construcción de imagenes.
//Función que enciende la luz roja en toda la matrix de manera estática
void rojo()
{
  for(i=0;i<256;i++)
  {
    pixels.setPixelColor(i, pixels.Color(1,0,0)); // Establece el color en RGB.
  }
  pixels.show(); // Envía el cambio de estado al hardware y enciende los leds
}</p><p>//Función para cambio de color intermedio
void amarillo()
{
  for(i=0;i<256;i++)
  {
    pixels.setPixelColor(i, pixels.Color(10,5,0)); // Establece el color amarillo
    pixels.show(); // Envía la actualización de color a la matrix
  }</p><p>}</p><p>//Función del semáforo en estado verde para continuidad
void verde()
{
  for(i=0;i<256;i++)
  {
    pixels.setPixelColor(i, pixels.Color(0,10,0)); // Establece el color verde en RGB  
  }
  /*Código que construye y muestra el sentido del carril en el semáforo
  Matriz de derecha a izquierda de 1 a 4
  Matriz 1
  Gráfica de giro a la derecha*/
  pixels.setPixelColor(3, pixels.Color(30,30,30));
  //Ciclos de construcción de la figura flecha a la derecha
  for (i=10;i<13;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=17;i<22;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=27;i<44;i=i+8)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=44;i<47;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  //Matriz 2
  //Continuidad de frente ciclos de construcción
   pixels.setPixelColor(74, pixels.Color(30,30,30));
   pixels.setPixelColor(114, pixels.Color(30,30,30));
  for (i=81;i<83;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=88;i<95;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=96;i<103;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=105;i<107;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }</p><p>  //Matriz 3
  //Continuidad de frente ciclos de construcción
   pixels.setPixelColor(138, pixels.Color(30,30,30));
   pixels.setPixelColor(178, pixels.Color(30,30,30));
  for (i=145;i<147;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=152;i<159;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=160;i<167;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=169;i<171;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
//Matriz 4
  //Giro a la izquierda, ciclos de construcción
   pixels.setPixelColor(251, pixels.Color(30,30,30));
   pixels.show();
  for (i=242;i<245;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=233;i<238;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=211;i<228;i=i+8)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=212;i<215;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  //Comando que ejecuta el cambio de estado (del hardware) en los leds de la matrix
  pixels.show();
  
}
//Función que apaga las luces del semaforo.
void apagadosemaforo()
{
  //Ciclo para el apagado
  for(i=0;i<256;i++)
  {
    pixels.setPixelColor(i, pixels.Color(0,0,0)); // Moderately bright green color.  
  }
  pixels.show(); // Envía la actualización de color a la matrix
}</p><p>//Función que cambio el semáforo a rojo titilando
void cambiosemafororojo()
{
    //Inicio del ciclo animado
    for (i;i<5;i++)
    {
      apagadosemaforo();//Invocación de la función apagado
      delay (100);
      rojo();//Invocación de la función encendido en luz roja
      delay (100);
      }
  }</p><p>//Función que cambio el semáforo a verde titilando
void cambiosemaforoverde()
{
    for (i;i<5;i++)
    {
      apagadosemaforo();//invocación de apagado
      delay (100);
      verde();//invocación del estado encendido en luz verde
      delay (100);
      }
  }</p><p>//Función que indica giro todo a la izquierda
void gizquierda()
{
  //Ciclo para el color verde de fondo en toda la matrix
  for(i=0;i<256;i++)
  {
    pixels.setPixelColor(i, pixels.Color(0,10,0)); // Establece el color verde en RGB  
  }
    //Construcción de la gráfica en la señal
    // matrix 1
    for(i=9;i<28;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=14;i<29;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=33;i<52;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=38;i<53;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
  // matrix 2
  for(i=73;i<92;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=78;i<93;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=97;i<116;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=102;i<117;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
   // matrix 3
   for(i=137;i<156;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=142;i<157;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=161;i<180;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=166;i<181;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
  //matrix 4
  for(i=201;i<220;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
      pixels.show();
       for(i=206;i<221;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=225;i<244;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=230;i<245;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       pixels.show();//Actualización del hardware en color de los leds
  }</p><p>//Función que indica giro a la derecha de todos los carriles
void gderecha()
{
  //Ciclo de llenado del fondo en color verde
  for(i=0;i<256;i++)
  {
    pixels.setPixelColor(i, pixels.Color(0,10,0)); // Establece el color verde en RGB  
  }
     //Construcción de las gráficas
    // matrix 1
    for(i=11;i<26;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=12;i<31;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=35;i<50;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=36;i<55;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
// matrix 2
  for(i=75;i<90;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=76;i<95;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=99;i<114;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=100;i<119;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
   // matrix 3
   for(i=139;i<154;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=140;i<159;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=163;i<178;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=164;i<183;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
  //matrix 4
  for(i=203;i<218;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=204;i<223;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=227;i<242;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=228;i<247;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       pixels.show();//Envío de la actualización del hardware en color
  }</p><p>//Función que indica que solo hay continuidad de frente en los de carriles solo de frente, cierre de giros izquierdo y derecho</p><p>void frente()
{
  //Llenado de la matriz en fondo verde
  for(i=0;i<256;i++)
  {
    pixels.setPixelColor(i, pixels.Color(0,10,0)); // Establece el color verde en RGB  
  }
  //Construcción de las graficas
  //Matrix 1
  pixels.setPixelColor(10, pixels.Color(30,30,30));
   pixels.setPixelColor(50, pixels.Color(30,30,30));
  for (i=17;i<19;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=24;i<31;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=32;i<39;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=41;i<43;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  
  //Matriz 2
   pixels.setPixelColor(74, pixels.Color(30,30,30));
   pixels.setPixelColor(114, pixels.Color(30,30,30));
  for (i=81;i<83;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=88;i<95;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=96;i<103;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=105;i<107;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  //Matriz 3
  //Continuidad de frente
   pixels.setPixelColor(138, pixels.Color(30,30,30));
   pixels.setPixelColor(178, pixels.Color(30,30,30));
  for (i=145;i<147;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }</p><p>  for (i=152;i<159;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
   
  for (i=160;i<167;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }</p><p>  for (i=169;i<171;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }</p><p>  //Matrix4
  pixels.setPixelColor(202, pixels.Color(30,30,30));
   pixels.setPixelColor(242, pixels.Color(30,30,30));
  for (i=209;i<211;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=216;i<223;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=224;i<231;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  for (i=233;i<235;i++)
  {
    pixels.setPixelColor(i, pixels.Color(30,30,30));
  }
  pixels.show();//Actualización del hardware en el color de los leds
 
}</p><p>//Control de flujo solo con giros al lado izquierdo y derecho
void gizqgder()
{
  //Llenado de color verde todas las matrix
  for(i=0;i<256;i++)
  {
    pixels.setPixelColor(i, pixels.Color(0,10,0)); // Establece el color verde en RGB  
  }
    //Construcción de las gráficas
    //Giros a la derecha, matrix 1 y 2
    // matrix 1
    for(i=11;i<26;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=12;i<31;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=35;i<50;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=36;i<55;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
// matrix 2
  for(i=75;i<90;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=76;i<95;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=99;i<114;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=100;i<119;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
     
    //Giros izquierda, matrix 3 y 4
      // matrix 3
   for(i=137;i<156;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=142;i<157;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=161;i<180;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=166;i<181;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
  //matrix 4
  for(i=201;i<220;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=206;i<221;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=225;i<244;i=i+9)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       for(i=230;i<245;i=i+7)
    {
       pixels.setPixelColor(i, pixels.Color(30,30,30));
      }
       pixels.show();
}</p><p>//Ejecución del programa ciclo repetitivo loop
void loop() 
{
  
  //Llamado de las funciones en el orden que se desea mostrar la secuencia en el semáforo
  //Control apagado del semaforo
  apagadosemaforo();
  delay(100);</p><p>  // Control para el flujo vehícular en verde.
  verde();
  delay(delayval);//Tiempo de espera
  cambiosemaforoverde();//Ejecución de cambio del semáforo</p><p>  //Control del semáforo en amarillo
  amarillo();
  delay (50);</p><p>  //Control del semáforo en rojo
  rojo();  
  delay(delayval);
  cambiosemafororojo();</p><p>  //control para mostrar cambio
  amarillo();
  delay(50);</p><p>  //Control de carriles definidos aplica cuando se cierran las otras vías del cruce
  //Continuidad solo a la izquierda
  gizquierda();
  delay(3000);</p><p>  //Control del semáforo en amarillo
  amarillo();
  delay (50);</p><p>  //Control del semáforo en rojo
  rojo();  
  delay(delayval);
  cambiosemafororojo();</p><p>  //Continuidad solo a la derecha
  gderecha();
  delay(3000);</p><p>  //Control del semáforo en amarillo
  amarillo();
  delay (50);</p><p>  //Control del semáforo en rojo
  rojo();  
  delay(delayval);
  cambiosemafororojo();</p><p>  //Continuidad solo de frente
  frente();
  delay(3000);</p><p>  //Control del semáforo en amarillo
  amarillo();
  delay (50);</p><p>  //Control del semáforo en rojo
  rojo();  
  delay(delayval);
  cambiosemafororojo();</p><p>  //Control del semáforo en giro izquierda y derecha
  gizqgder();
  delay(3000);</p><p>  //Control del semáforo en amarillo
  amarillo();
  delay (50);</p><p>  //Control del semáforo en rojo
  rojo();  
  delay(delayval);
  cambiosemafororojo();
  
  //Inicio de textos cuando el semáforo esta en rojo.
  matrix.fillScreen(0);//Fondo de la matrix apagado
  matrix.setCursor(x, 0);//Posición del led inicial
  //Invocación de las funciones en el orden en que se desean mostrar
  texto();
  clima();
  fecha();
  texto1();
  texto2();
  /*Ciclo para el control de desplazamiento que permite mostrar la cantidad de los textos
    Se calcula la sumatoria de cada frase con espacios por la cantidad de les de una matrix
    Garantiza que el texto se muestre completo y se desplace de derecha a izquierda como una marquesina.*/
  if(--x < -838) 
  {
    x = matrix.width();
  }
  matrix.show();//Envía solicitud al hardware de la matrix que cambie de estado en los leds
  delay(30);//Velocidad con que pasan los mensajes
  
}</p>

Aclaración: Al ejecutar la integración del código en uno solo se genera inconvenientes de ejecución en el void loop() entre las librerias Adafruite Neomatrix y Adafruit Neopixel, este inconveniente radica en que se inician a ejecutar todas las funciones al mismo tiempo en el void loop() lo cual no permitía ejecutar las funciones una por una con su respectiva secuencia, uno de los factores determinantes es cuando se usa el comando delay(), para establecer tiempos de espera. se realizaron múltiples actividades para intentar controlar los eventos y cambios en el código, intentos de control con bucles y ciclos, ford, while, do while, case, break, etiquetas goto pero todos fueron infructuosos, se invirtieron mas de 60 horas de investigación y desarrollo en intentar solucionar el inconveniente pero no fue posible.

La libreria Adafruit Neomatrix con Adafruit GFX permite la ejecución de textos y creación de figuras en la matrix y la la liberia Adafruit Neopixel es la que permite controlar los leds de manera independiente.

La intención es que en momentos como el estado de semáforo en rojo se puedan mostrar a los ciudadanos información importante como la hora, la temperatura, la fecha, mensajes preventivos entre otras funciones como lecturas de redes sociales como twitter.

El código se deja en orden y es ejecutable solo que al llegar a los textos se genera una intermitencia en los leds mientras se muestra texto y al final no permite mostrar el resto del contenido.

Las matrix usadas se comprobó que no son las originales Adafruit, son genéricas y no se sabe si eso haya influido en el correcto funcionamiento.

Step 17: Video Semáforo Inteligente