#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI
// ' Box', 128x64px
const unsigned char bitmap__Box [] PROGMEM = {
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0
};
#define NEXT_BUTTON 6
#define OK_BUTTON 5
#define POT A0
#define led1 8
#define led2 9
#define Relay 10
int Tact = 0;
int Tdes = 0;
int button_NEXT_clicked = 0;
int button_OK_clicked = 0;
int item_next = 0;
int item_select = 0;
int item_select_1 = 0;
int item_select_2 = 0;
int menu_selector = 0;
int menu_voltimetro = 0;
int menu_bobinas_DIS = 0;
int menu_inyectores = 0;
int menu_detener_voltimetro = 0;
int menu_detener_bobinas_DIS = 0;
int menu_detener_inyectores = 0;
float valor_punta_voltimetro = 0;
float valor_voltaje = 0;
float valor_voltaje_act = 0;
float valor_voltaje_prom = 0;
char valor_voltaje_char[4];
float valor_potenciometro = 0;
float valor_rpm = 0;
float valor_rpm_act = 0;
float valor_rpm_prom = 0;
char valor_rpm_char[4];
int contador_actualizacion_volt = 0;
int contador_actualizacion_bob = 0;
int contador_actualizacion_iny = 0;
char menu_items_0[1] [20] = {
{"SELECCIONE MODO:"}
};
const int NUM_ITEMS = 3;
char menu_items_1[NUM_ITEMS] [20] = {
{"Voltimetro"},
{"Prob. Bobinas (DIS)"},
{"Prob. Inyectores"}
};
const int NUM_ITEMS_1 = 1;
char menu_items_2[NUM_ITEMS_1] [20] = {
{"Atras"}
};
void setup(void) {
u8g.setFont(u8g_font_unifont);
u8g.setColorIndex(1);
pinMode(NEXT_BUTTON, INPUT_PULLUP);
pinMode(OK_BUTTON, INPUT_PULLUP);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(Relay, OUTPUT);
}
void loop(void) {
if (digitalRead(OK_BUTTON) == HIGH && button_OK_clicked == 1) { // unclick
button_OK_clicked = 0;
}
if(digitalRead(NEXT_BUTTON) == LOW && menu_selector == 0 && button_NEXT_clicked == 0){
button_NEXT_clicked = 1;
item_select = item_select - 1;
if(item_select < 0){
item_select = NUM_ITEMS - 1;
}
}
if(digitalRead(NEXT_BUTTON) == LOW && menu_selector == 11 && button_NEXT_clicked == 0){
button_NEXT_clicked = 1;
item_select_1 = item_select_1 - 1;
if(item_select_1 < 0){
item_select_1 = NUM_ITEMS_1 - 1;
}
}
if(digitalRead(NEXT_BUTTON) == LOW && menu_selector == 12 && button_NEXT_clicked == 0){
button_NEXT_clicked = 1;
item_select_2 = item_select_2 - 1;
if(item_select_2 < 0){
item_select_2 = NUM_ITEMS_1 - 1;
}
}
if ((digitalRead(NEXT_BUTTON) == HIGH) && (button_NEXT_clicked == 1)) { // unclick
button_NEXT_clicked = 0;
}
item_next = item_select + 1;
if(item_next >= NUM_ITEMS_1){item_next = 0;}
//al menu automatico
if(digitalRead(OK_BUTTON) == LOW && item_select == 0 && button_OK_clicked == 0){
button_OK_clicked = 1;
menu_selector = 11;
item_select = 10;
menu_voltimetro = menu_voltimetro + 1;
}
//al menu manual
if(digitalRead(OK_BUTTON) == LOW && item_select == 1 && button_OK_clicked == 0){
button_OK_clicked = 1;
menu_selector = 12;
item_select = 10;
menu_bobinas_DIS = menu_bobinas_DIS + 1;
}
//al menu inyectores
if(digitalRead(OK_BUTTON) == LOW && item_select == 2 && button_OK_clicked == 0){
button_OK_clicked = 1;
menu_selector = 13;
item_select = 10;
menu_inyectores = menu_inyectores + 1;
}
//al presionar detener automatico
if(digitalRead(OK_BUTTON) == LOW && menu_detener_voltimetro >= 3 && button_OK_clicked == 0){
button_OK_clicked = 1;
menu_voltimetro = 0;
menu_bobinas_DIS = 0;
menu_inyectores = 0;
menu_selector = 0;
item_select = 0;
item_select_1 = 0;
}
//al presionar detener manual
if(digitalRead(OK_BUTTON) == LOW && menu_detener_bobinas_DIS >= 3 && button_OK_clicked == 0){
button_OK_clicked = 1;
menu_voltimetro = 0;
menu_bobinas_DIS = 0;
menu_inyectores = 0;
menu_selector = 0;
item_select = 0;
item_select_1 = 0;
}
//al presionar detener inyectores
if(digitalRead(OK_BUTTON) == LOW && menu_detener_inyectores >= 3 && button_OK_clicked == 0){
button_OK_clicked = 1;
menu_voltimetro = 0;
menu_bobinas_DIS = 0;
menu_inyectores = 0;
menu_selector = 0;
item_select = 0;
item_select_1 = 0;
}
u8g.firstPage();
do {
if (menu_selector == 0){
u8g.drawBitmapP(0, 32, 128/8, 16, bitmap__Box);
u8g.setFont(u8g_font_6x13);
u8g.drawStr(16, 12, menu_items_0[0]);
digitalWrite(Relay,LOW);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
switch (item_select)
{ case 0:
// Modo seleccionado:
u8g.setFont(u8g_font_6x13);
u8g.drawStr(16, 28, menu_items_1[2]);//Prob. Inyectores
// Modo siguiente:
u8g.setFont(u8g_font_6x13);
u8g.drawStr(31, 44, menu_items_1[0]);//Voltimetro
u8g.setFont(u8g_font_6x13);
u8g.drawStr(9, 60, menu_items_1[1]);//Prob. Bobinas DIS
break;
case 1:
// Modo seleccionado:
u8g.setFont(u8g_font_6x13);
u8g.drawStr(31, 28, menu_items_1[0]);//Voltimetro
// Modo siguiente:
u8g.setFont(u8g_font_6x13);
u8g.drawStr(9, 44, menu_items_1[1]);//Prob. Bobinas DIS
u8g.setFont(u8g_font_6x13);
u8g.drawStr(16, 60, menu_items_1[2]);//Prob. Inyectores
break;
case 2:
// Modo seleccionado:
u8g.setFont(u8g_font_6x13);
u8g.drawStr(9, 28, menu_items_1[1]);//Prob. Bobinas DIS
// Modo siguiente:
u8g.setFont(u8g_font_6x13);
u8g.drawStr(16, 44, menu_items_1[2]);//Prob. Inyectores
u8g.setFont(u8g_font_6x13);
u8g.drawStr(31, 60, menu_items_1[0]);//Voltimetro
break;
}
}
//Menu voltimetro:
if(menu_selector == 11){
u8g.drawBitmapP(0, 48, 128/8, 16, bitmap__Box);
u8g.setFont(u8g_font_6x13);
u8g.drawStr(32, 12, menu_items_1[0]);
u8g.drawStr(89, 38, "VOLTS");
menu_detener_voltimetro = 3;
digitalWrite(Relay,HIGH);
analogReference(EXTERNAL);
valor_punta_voltimetro = analogRead(A1);
valor_voltaje = (valor_punta_voltimetro*16)/1023;
valor_voltaje_act = valor_voltaje + valor_voltaje_act;
contador_actualizacion_volt++;
if(contador_actualizacion_volt==100){
valor_voltaje_prom = valor_voltaje_act/100;
valor_voltaje_act = 0;
contador_actualizacion_volt=0;
}
dtostrf(valor_voltaje_prom,4,2,valor_voltaje_char);
u8g.setFont(u8g_font_10x20);
u8g.drawStr(35, 38, valor_voltaje_char);
switch (item_select_1)
{ case 0:
// Modo seleccionado:
u8g.setFont(u8g_font_6x13);
u8g.drawStr(48, 60, menu_items_2[0]);//Atras
break;
}
}
//Menu probdor de bobinas DIS:
if(menu_selector == 12){
u8g.drawBitmapP(0, 48, 128/8, 16, bitmap__Box);
u8g.setFont(u8g_font_6x13);
u8g.drawStr(9, 12, menu_items_1[1]);
u8g.drawStr(95, 38, "RPM");
menu_detener_bobinas_DIS = 3;
analogReference(DEFAULT);
valor_potenciometro = map(analogRead(A0),0,1024,500,6000);
//valor_rpm = valor_potenciometro/1000;
Tact = 5.182 - (valor_potenciometro/2750);
Tdes = 21.364 - (valor_potenciometro/366.67);
digitalWrite(led1,HIGH);
delay(Tact);
digitalWrite(led1, LOW);
delay(Tdes);
valor_potenciometro=valor_potenciometro*100;
valor_rpm=valor_potenciometro/100;
valor_rpm_act = valor_rpm + valor_rpm_act;
contador_actualizacion_bob++;
if(contador_actualizacion_bob==10){
valor_rpm_prom = valor_rpm_act/10;
valor_rpm_act = 0;
contador_actualizacion_bob=0;
}
dtostrf(valor_rpm_prom,4,0,valor_rpm_char);
u8g.setFont(u8g_font_10x20);
u8g.drawStr(35, 38, valor_rpm_char);
switch (item_select_2)
{ case 0:
// Modo seleccionado:
u8g.setFont(u8g_font_6x13);
u8g.drawStr(48, 60, menu_items_2[0]);
break;
}
}
//Menu Probador de inyectores:
if(menu_selector == 13){
u8g.drawBitmapP(0, 48, 128/8, 16, bitmap__Box);
u8g.setFont(u8g_font_6x13);
u8g.drawStr(16, 12, menu_items_1[2]);
u8g.drawStr(95, 38, "RPM");
menu_detener_inyectores = 3;
analogReference(DEFAULT);
valor_potenciometro = map(analogRead(A0),0,1024,500,6000);
//valor_rpm = valor_potenciometro/1000;
Tact = 1.76 + (valor_potenciometro/770);
Tdes = 143.59 - (valor_potenciometro/43);
digitalWrite(led2, HIGH);
delay (Tact);
digitalWrite(led2, LOW);
delay (Tdes);
valor_potenciometro=valor_potenciometro*100;
valor_rpm=valor_potenciometro/100;
valor_rpm_act = valor_rpm + valor_rpm_act;
contador_actualizacion_iny++;
if(contador_actualizacion_iny==10){
valor_rpm_prom = valor_rpm_act/10;
valor_rpm_act = 0;
contador_actualizacion_iny=0;
}
dtostrf(valor_rpm_prom,4,0,valor_rpm_char);
u8g.setFont(u8g_font_10x20);
u8g.drawStr(35, 38, valor_rpm_char);
switch (item_select_2)
{ case 0:
// Modo seleccionado:
u8g.setFont(u8g_font_6x13);
u8g.drawStr(48, 60, menu_items_2[0]);
break;
}
}
}
while( u8g.nextPage() );
}