void unSemaforo() { if ((millis() - tiempo) < tiempoVerdeA) { digitalWrite(Q[0], LOW); digitalWrite(Q[1], LOW); digitalWrite(Q[2], HIGH); digitalWrite(Q[3], HIGH); digitalWrite(Q[4], LOW); digitalWrite(Q[5], LOW); digitalWrite(Q[6], HIGH); digitalWrite(Q[8], LOW); proceso = 1; tpoA = 1 + (tiempoVerdeA - millis() + tiempo) / 1000; tpoB = 1 + (tiempoVerdeA + tiempoAmbarA - millis() + tiempo) / 1000; } else if ((millis() - tiempo) < tiempoVerdeA + tiempoAmbarA) { digitalWrite(Q[0], LOW); digitalWrite(Q[1], HIGH); digitalWrite(Q[2], LOW); digitalWrite(Q[3], HIGH); digitalWrite(Q[4], LOW); digitalWrite(Q[5], LOW); digitalWrite(Q[6], HIGH); digitalWrite(Q[8], LOW); proceso = 2; tpoA = 1 + (tiempoVerdeA + tiempoAmbarA - millis() + tiempo) / 1000; tpoB = 1 + (tiempoVerdeA + tiempoAmbarA - millis() + tiempo) / 1000; } else if ((millis() - tiempo) < tiempoVerdeA + tiempoAmbarA + tiempoRojoA) { digitalWrite(Q[0], HIGH); digitalWrite(Q[1], LOW); digitalWrite(Q[2], LOW); digitalWrite(Q[3], LOW); digitalWrite(Q[4], LOW); digitalWrite(Q[5], HIGH); digitalWrite(Q[6], LOW); digitalWrite(Q[8], HIGH); proceso = 3; tpoA = 1 + (tiempoVerdeA + 2*tiempoAmbarA + tiempoRojoA - millis() + tiempo) / 1000; tpoB = 1 + (tiempoVerdeA + tiempoAmbarA + tiempoRojoA - millis() + tiempo) / 1000; } else if ((millis() - tiempo) < tiempoVerdeA + tiempoAmbarA + tiempoRojoA + tiempoAmbarA) { digitalWrite(Q[0], HIGH); digitalWrite(Q[1], LOW); digitalWrite(Q[2], LOW); digitalWrite(Q[3], LOW); digitalWrite(Q[4], HIGH); digitalWrite(Q[5], LOW); digitalWrite(Q[6], LOW); // digitalWrite(Q[8], HIGH); parpadeo(Q[8]); proceso = 4; tpoA = 1 + (tiempoVerdeA + 2*tiempoAmbarA + tiempoRojoA - millis() + tiempo) / 1000; tpoB = 1 + (tiempoVerdeA + 2*tiempoAmbarA + tiempoRojoA - millis() + tiempo) / 1000; } else tiempo = millis(); } void parpadeo(int pin) { if (millis() - tiempoParpadeo < tiempoAlto) { digitalWrite(pin, HIGH); } else if (millis() - tiempoParpadeo < tiempoAlto + tiempoBajo) { digitalWrite(pin, LOW); } else tiempoParpadeo = millis(); } void dibujarSemaforo() { u8g.setFont(u8g_font_u8glib_4r); u8g.drawStr90(55, 0, "SEMAFORO A"); u8g.drawStr90(120, 0, "SEMAFORO B"); u8g.setFont(u8g_font_6x10); u8g.setFontPosTop(); u8g.drawFrame(63, 0, 2, 64); u8g.drawStr(5, 6, "R"); u8g.drawStr(5, 27, "A"); u8g.drawStr(5, 48, "V"); u8g.drawFrame(13, 0, 25, 64); u8g.drawCircle(25, 10, 9); u8g.drawCircle(25, 31, 9); u8g.drawCircle(25, 52, 9); u8g.drawStr(70, 6, "R"); u8g.drawStr(70, 27, "A"); u8g.drawStr(70, 48, "V"); u8g.drawFrame(78, 0, 25, 64); u8g.drawCircle(90, 10, 9); u8g.drawCircle(90, 31, 9); u8g.drawCircle(90, 52, 9); switch (proceso) { case 1: u8g.drawDisc(25, 52, 9); u8g.drawDisc(90, 10, 9); u8g.setPrintPos(42, 48); u8g.print(String(tpoA)); u8g.setPrintPos(110, 6); u8g.print(String(tpoB)); break; case 2: u8g.drawDisc(25, 31, 9); u8g.drawDisc(90, 10, 9); u8g.setPrintPos(42, 28); u8g.print(String(tpoA)); u8g.setPrintPos(110, 6); u8g.print(String(tpoB)); break; case 3: u8g.drawDisc(25, 10, 9); u8g.drawDisc(90, 52, 9); u8g.setPrintPos(42, 6); u8g.print(String(tpoA)); u8g.setPrintPos(110, 48); u8g.print(String(tpoB)); break; case 4: u8g.drawDisc(25, 10, 9); u8g.drawDisc(90, 31, 9); u8g.setPrintPos(42, 6); u8g.print(String(tpoA)); u8g.setPrintPos(110, 28); u8g.print(String(tpoB)); break; } }