#include "pitches.h"
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0 | U8G_I2C_OPT_NO_ACK | U8G_I2C_OPT_FAST); // Fast I2C / TWI
#define SPEAKER_PIN 8
//const int buttonTones[] = {NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5};
const int buttonTones[] = {NOTE_C5, NOTE_A4, NOTE_C5, NOTE_A4, NOTE_C5, NOTE_A4, NOTE_C5, NOTE_C5};
int progress = 0;
int potpin = 0; // analog pin used to connect the potentiometer
float minsec = 1; // min DobaZehleni
float maxsec = 7; // max DobaZehleni
float DobaZehleni;
int tlacitko = 0;
unsigned long myTime;
unsigned long sysTime;
float digiTime;
/*
Fontname: DSEG14 Classic
Copyright:
Capital A Height: 0, '1' Height: 35
Calculated Max Values w=25 h=40 x=20 y= 1 dx=29 dy= 0 ascent=38 len=160
Font Bounding box w=33 h=39 x= 0 y=-2
Calculated Min Values x= 0 y=-2 dx= 0 dy= 0
Pure Font ascent =35 descent= 0
X Font ascent =35 descent= 0
Max Font ascent =38 descent=-2
*/
const u8g_fntpgm_uint8_t DSEG14_40[1388] U8G_FONT_SECTION("DSEG14_40") = {
0,33,39,0,254,35,0,0,0,0,43,58,0,38,255,35,
0,19,33,99,29,5,2,0,64,0,0,224,0,0,224,0,
0,224,0,0,224,0,0,224,0,0,224,0,0,224,0,0,
224,0,0,224,0,0,224,0,0,64,0,0,64,0,0,64,
0,0,64,0,127,31,192,255,191,224,127,31,192,0,64,0,
0,64,0,0,64,0,0,64,0,0,224,0,0,224,0,0,
224,0,0,224,0,0,224,0,0,224,0,0,224,0,0,224,
0,0,224,0,0,224,0,0,64,0,5,13,13,29,8,3,
8,24,56,48,112,112,96,224,224,192,192,128,128,19,3,9,
29,5,17,127,31,192,255,191,224,127,31,192,2,3,3,2,
0,255,192,192,192,13,31,62,29,8,3,0,8,0,8,0,
24,0,24,0,56,0,56,0,48,0,112,0,112,0,96,0,
224,0,192,0,128,0,0,0,0,0,0,0,0,0,0,8,
0,24,0,56,0,48,0,112,0,112,0,96,0,224,0,224,
0,192,0,192,0,128,0,128,0,21,39,117,29,4,255,63,
255,224,63,223,224,223,143,216,224,0,56,224,0,184,224,0,
184,224,1,184,224,1,184,224,3,184,224,3,184,224,3,56,
224,7,56,224,7,56,224,6,56,224,14,56,224,12,56,224,
8,56,192,0,24,128,0,8,0,0,0,128,0,8,192,0,
24,224,128,56,225,128,56,227,128,56,227,0,56,231,0,56,
231,0,56,230,0,56,238,0,56,238,0,56,236,0,56,236,
0,56,232,0,56,232,0,56,224,0,56,223,143,216,63,223,
224,63,255,224,3,35,35,29,22,1,96,224,224,224,224,224,
224,224,224,224,224,224,224,224,224,96,32,0,32,96,224,224,
224,224,224,224,224,224,224,224,224,224,224,224,96,21,39,117,
29,4,255,63,255,224,63,223,224,31,143,216,0,0,56,0,
0,56,0,0,56,0,0,56,0,0,56,0,0,56,0,0,
56,0,0,56,0,0,56,0,0,56,0,0,56,0,0,56,
0,0,56,0,0,56,0,0,24,63,143,232,127,223,240,191,
143,224,192,0,0,224,0,0,224,0,0,224,0,0,224,0,
0,224,0,0,224,0,0,224,0,0,224,0,0,224,0,0,
224,0,0,224,0,0,224,0,0,224,0,0,224,0,0,223,
143,192,63,223,224,63,255,224,20,39,117,29,5,255,127,255,
192,127,191,192,63,31,176,0,0,112,0,0,112,0,0,112,
0,0,112,0,0,112,0,0,112,0,0,112,0,0,112,0,
0,112,0,0,112,0,0,112,0,0,112,0,0,112,0,0,
112,0,0,48,127,31,208,255,191,224,127,31,208,0,0,48,
0,0,112,0,0,112,0,0,112,0,0,112,0,0,112,0,
0,112,0,0,112,0,0,112,0,0,112,0,0,112,0,0,
112,0,0,112,0,0,112,0,0,112,63,31,176,127,191,192,
127,255,192,21,35,105,29,4,1,192,0,24,224,0,56,224,
0,56,224,0,56,224,0,56,224,0,56,224,0,56,224,0,
56,224,0,56,224,0,56,224,0,56,224,0,56,224,0,56,
224,0,56,224,0,56,192,0,24,191,143,232,127,223,240,63,
143,232,0,0,24,0,0,56,0,0,56,0,0,56,0,0,
56,0,0,56,0,0,56,0,0,56,0,0,56,0,0,56,
0,0,56,0,0,56,0,0,56,0,0,56,0,0,56,0,
0,24,21,39,117,29,4,255,63,255,224,63,223,224,223,143,
192,224,0,0,224,0,0,224,0,0,224,0,0,224,0,0,
224,0,0,224,0,0,224,0,0,224,0,0,224,0,0,224,
0,0,224,0,0,224,0,0,224,0,0,192,0,0,191,143,
224,127,223,240,63,143,232,0,0,24,0,0,56,0,0,56,
0,0,56,0,0,56,0,0,56,0,0,56,0,0,56,0,
0,56,0,0,56,0,0,56,0,0,56,0,0,56,0,0,
56,0,0,56,31,143,216,63,223,224,63,255,224,21,39,117,
29,4,255,63,255,224,63,223,224,223,143,192,224,0,0,224,
0,0,224,0,0,224,0,0,224,0,0,224,0,0,224,0,
0,224,0,0,224,0,0,224,0,0,224,0,0,224,0,0,
224,0,0,224,0,0,192,0,0,191,143,224,127,223,240,191,
143,232,192,0,24,224,0,56,224,0,56,224,0,56,224,0,
56,224,0,56,224,0,56,224,0,56,224,0,56,224,0,56,
224,0,56,224,0,56,224,0,56,224,0,56,224,0,56,223,
143,216,63,223,224,63,255,224,21,37,111,29,4,1,63,255,
224,63,223,224,223,143,216,224,0,56,224,0,56,224,0,56,
224,0,56,224,0,56,224,0,56,224,0,56,224,0,56,224,
0,56,224,0,56,224,0,56,224,0,56,224,0,56,224,0,
56,192,0,24,128,0,8,0,0,0,0,0,8,0,0,24,
0,0,56,0,0,56,0,0,56,0,0,56,0,0,56,0,
0,56,0,0,56,0,0,56,0,0,56,0,0,56,0,0,
56,0,0,56,0,0,56,0,0,56,0,0,24,21,39,117,
29,4,255,63,255,224,63,223,224,223,143,216,224,0,56,224,
0,56,224,0,56,224,0,56,224,0,56,224,0,56,224,0,
56,224,0,56,224,0,56,224,0,56,224,0,56,224,0,56,
224,0,56,224,0,56,192,0,24,191,143,232,127,223,240,191,
143,232,192,0,24,224,0,56,224,0,56,224,0,56,224,0,
56,224,0,56,224,0,56,224,0,56,224,0,56,224,0,56,
224,0,56,224,0,56,224,0,56,224,0,56,224,0,56,223,
143,216,63,223,224,63,255,224,21,39,117,29,4,255,63,255,
224,63,223,224,223,143,216,224,0,56,224,0,56,224,0,56,
224,0,56,224,0,56,224,0,56,224,0,56,224,0,56,224,
0,56,224,0,56,224,0,56,224,0,56,224,0,56,224,0,
56,192,0,24,191,143,232,127,223,240,63,143,232,0,0,24,
0,0,56,0,0,56,0,0,56,0,0,56,0,0,56,0,
0,56,0,0,56,0,0,56,0,0,56,0,0,56,0,0,
56,0,0,56,0,0,56,0,0,56,31,143,216,63,223,224,
63,255,224,2,19,19,2,0,8,192,192,192,0,0,0,0,
0,0,0,0,0,0,0,0,0,192,192,192};
// 'car_image', 56x15px
const unsigned char bitmap_car_image [] PROGMEM = {
0xc0, 0x40, 0x00, 0x00, 0x00, 0x02, 0x03, 0xc0, 0x8f, 0xff, 0xff, 0xff, 0xf1, 0x03, 0xe0, 0x70,
0x00, 0x00, 0x00, 0x0e, 0x07, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xc0, 0xff, 0x00, 0x00,
0x00, 0xff, 0x03, 0xc0, 0x00, 0x05, 0x75, 0xc0, 0x00, 0x03, 0x47, 0xf8, 0x05, 0x51, 0x40, 0x1f,
0xe2, 0x47, 0xfc, 0x05, 0x65, 0x80, 0x3f, 0xe2, 0x40, 0x78, 0x06, 0x45, 0x40, 0x1e, 0x02, 0x30,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1e, 0x01, 0xff, 0xff, 0xff, 0x80, 0x78, 0x07, 0xe2, 0x00,
0x00, 0x00, 0x47, 0xe0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xbf, 0xff, 0xff, 0xff,
0xfd, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x06, 0x00
};
/*const unsigned char bitmap_stC [] PROGMEM = {
0x38, 0x00, 0x7c, 0x1f, 0xc6, 0x3f, 0xc6, 0x70, 0xc6, 0x60, 0x7c, 0x60, 0x38, 0x60, 0x00, 0x60,
0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x70, 0x00, 0x3f
};*/
// 'stC2', 32x32px
const unsigned char bitmap_stC2 [] PROGMEM = {
0x38, 0x00, 0x00, 0x00, 0x7c, 0x1f, 0xc0, 0x00, 0xc6, 0x3f, 0xe0, 0x00, 0xc6, 0x70, 0x60, 0x00,
0xc6, 0x60, 0x00, 0x00, 0x7c, 0x60, 0x00, 0x00, 0x38, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00,
0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00,
0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x70, 0x60, 0x00, 0x00, 0x3f, 0xe0, 0x00,
0x00, 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xf8, 0x00, 0x0f, 0xff, 0xfe, 0x00,
0x1c, 0x00, 0x07, 0x80, 0x18, 0x00, 0x01, 0xe0, 0x30, 0x00, 0x00, 0x70, 0x30, 0x00, 0x00, 0x38,
0x30, 0x00, 0x00, 0x1c, 0x31, 0x80, 0x01, 0x84, 0x3b, 0x4f, 0xf3, 0x5c, 0x36, 0x6f, 0xf6, 0x6c,
0x02, 0xc0, 0x02, 0xc0, 0x01, 0x80, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const unsigned char bitmap_stC3 [] PROGMEM = {
0x3c, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x03, 0xf8, 0x00, 0x00, 0xc3, 0x0f, 0xfe, 0x00, 0x00, 0xc3,
0x0e, 0x07, 0x00, 0x00, 0xc3, 0x1c, 0x03, 0x00, 0x00, 0xc3, 0x18, 0x00, 0x00, 0x00, 0x7e, 0x18,
0x00, 0x00, 0x00, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00,
0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x03, 0x00, 0x00, 0x00, 0x0e, 0x07, 0x00, 0x00, 0x00,
0x0f, 0xfe, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0x80, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x1f, 0x00, 0x00,
0xfc, 0x00, 0x3c, 0x00, 0x00, 0x1f, 0x00, 0x38, 0x00, 0x00, 0x07, 0xc0, 0x30, 0x00, 0x00, 0x01,
0xf0, 0x70, 0x00, 0x00, 0x00, 0x78, 0x70, 0x00, 0x00, 0x00, 0x1c, 0x60, 0x00, 0x00, 0x00, 0x0e,
0x60, 0xe0, 0x00, 0x07, 0x06, 0x61, 0xf0, 0x00, 0x0f, 0x86, 0x7b, 0xbb, 0xff, 0xdd, 0xde, 0x3b,
0x1b, 0xff, 0xd8, 0xdc, 0x03, 0xb8, 0x00, 0x1d, 0xc0, 0x01, 0xf0, 0x00, 0x0f, 0x80, 0x00, 0xe0,
0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'car2_40x60', 40x64px
const unsigned char bitmap_car2_40x60 [] PROGMEM = {
0x00, 0x03, 0xff, 0xc0, 0x00, 0x00, 0x0f, 0xff, 0xf0, 0x00, 0x00, 0x1e, 0x00, 0x78, 0x00, 0x00,
0x39, 0x00, 0x9c, 0x00, 0x00, 0x33, 0x00, 0xcc, 0x00, 0x00, 0x66, 0x00, 0x66, 0x00, 0x00, 0x66,
0x00, 0x66, 0x00, 0x7c, 0x64, 0x00, 0x26, 0x3e, 0xfe, 0xcc, 0x00, 0x33, 0x7f, 0xee, 0xcc, 0x00,
0x33, 0x77, 0xc6, 0xc8, 0x00, 0x13, 0x63, 0xc6, 0xd8, 0x00, 0x1b, 0x63, 0xc6, 0xd0, 0xff, 0x0b,
0x63, 0xc6, 0xc3, 0xff, 0xc3, 0x63, 0xc6, 0xce, 0x00, 0x73, 0x63, 0xc6, 0xd8, 0x00, 0x1b, 0x63,
0xee, 0x18, 0x00, 0x18, 0x77, 0xfe, 0xd8, 0x00, 0x1b, 0x7f, 0x7c, 0xd8, 0x00, 0x1b, 0x3e, 0x00,
0xd8, 0xff, 0x1b, 0x00, 0x00, 0xcf, 0xff, 0xf3, 0x00, 0x00, 0xce, 0x00, 0x73, 0x00, 0x00, 0xc0,
0x00, 0x03, 0x00, 0x00, 0xc0, 0x00, 0x03, 0x00, 0x00, 0xce, 0x0f, 0x83, 0x00, 0x00, 0xdb, 0x3f,
0xe3, 0x00, 0x00, 0xd1, 0x38, 0x73, 0x00, 0x00, 0xdb, 0x70, 0x33, 0x00, 0x00, 0x0e, 0x60, 0x00,
0x00, 0x00, 0xc0, 0x60, 0x03, 0x00, 0x00, 0xc0, 0x60, 0x03, 0x00, 0x00, 0xc0, 0x60, 0x03, 0x00,
0x00, 0xc0, 0x60, 0x03, 0x00, 0x00, 0xc0, 0x60, 0x03, 0x00, 0x00, 0xc0, 0x60, 0x03, 0x00, 0x00,
0xc0, 0x60, 0x03, 0x00, 0x00, 0xc0, 0x60, 0x03, 0x00, 0x00, 0xc0, 0x70, 0x33, 0x00, 0x00, 0xc0,
0x38, 0x73, 0x00, 0x7c, 0xc0, 0x1f, 0xe3, 0x3e, 0xfe, 0x00, 0x0f, 0xc0, 0x7f, 0xee, 0xe0, 0x00,
0x07, 0x77, 0xc6, 0xfc, 0x00, 0x3f, 0x63, 0xc6, 0xdf, 0xff, 0xfb, 0x63, 0xc6, 0xc3, 0xff, 0xc3,
0x63, 0xc6, 0xc0, 0x00, 0x03, 0x63, 0xc6, 0xc0, 0x00, 0x03, 0x63, 0xc6, 0xc0, 0x00, 0x03, 0x63,
0xee, 0xc0, 0x00, 0x03, 0x77, 0xfe, 0xc0, 0x00, 0x03, 0x7f, 0x7c, 0xc0, 0x00, 0x03, 0x3e, 0x00,
0x60, 0x00, 0x06, 0x00, 0x00, 0x7f, 0xff, 0xfe, 0x00, 0x00, 0x3f, 0xff, 0xfc, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
void setup() {
pinMode(2, INPUT); //tlacitko
pinMode(12, OUTPUT); // red led
pinMode(11, OUTPUT); //green led
pinMode(SPEAKER_PIN, OUTPUT);
Serial.begin(115200);
Serial.println(F("Start zehlicka!"));
u8g.setFont(DSEG14_40);
u8g.setColorIndex(1);
}
void loop() {
//sysTime = millis();
DobaZehleni = analogRead(potpin);
// Print the temperature in Celsius in the Serial Monitor:
Serial.print("Pot.Val.: ");
Serial.print(DobaZehleni);
Serial.print(" - EndSwitch: ");
Serial.print(digitalRead(2));
Serial.print(" - myTime:");
Serial.println(myTime);
DobaZehleni = map (DobaZehleni, 0, 1023, minsec, maxsec*2); // cas zehlení *2
DobaZehleni = DobaZehleni /2; //tímto je to po půl sekundě: minsec až maxsec
//myTime = DobaZehleni*1000; // cas zehlení v millis
if (digitalRead(2)== 1){
odpocet();
}else{
digitalWrite(11, LOW);
}
/*
int pitch = 0;
for (uint8_t i = 0; i < 8; i++) {
pitch = buttonTones[i];
if (pitch) {
tone(SPEAKER_PIN, pitch);
} else {
noTone(SPEAKER_PIN);
}
delay(100);
}
*/
u8g.firstPage();
do {
u8g.setFont(u8g_font_unifont);
u8g.drawStr( 4, 12, "Cas zehleni:");
u8g.setPrintPos(100,12);
u8g.print(DobaZehleni,1 ); //zaokrouhleno na 0 desetinu
u8g.drawRFrame(0, 0, 128, 14,3);
u8g.setFont(u8g_font_helvB12);
//u8g.setFont(DSEG14_40);
u8g.setPrintPos(0-2+29,63);
u8g.drawStr( 5, 35, "Pripraveno pro");
u8g.drawStr( 25, 55, "ZEHLENI");
} while ( u8g.nextPage() );
}
void odpocet() {
sysTime = millis();
myTime = DobaZehleni*1000; // cas zehlení v millis
sysTime = sysTime + myTime;
Serial.println(myTime);
digitalWrite(12, HIGH); // RED LED
label:
if (sysTime > millis()){
digitalWrite(12, HIGH); // RED LED
u8g.firstPage();
do {
u8g.setFont(u8g_font_unifont);
u8g.drawStr( 4, 12, "Cas zehleni:");
u8g.setPrintPos(100,12);
u8g.print(DobaZehleni,1 ); //zaokrouhleno na 0 desetinu
u8g.drawRFrame(0, 0, 128, 14,3);
u8g.setFont(DSEG14_40);
u8g.setPrintPos(20,63);
//digiTime = ((sysTime-millis())/1000)+1;
float digiTime = sysTime-millis();
//u8g.print(digiTime,0 ); //zaokrouhleno na 0 desetinu
Serial.print("digiTime:");
Serial.print(digiTime);
Serial.print(" - myTime:");
Serial.println(((digiTime*2)/1000)/2);
//double cislo = ((digiTime*2)/1000)/2
u8g.print(((digiTime*2)/1000)/2,1 ); //zaokrouhleno na 1 desetinu
} while ( u8g.nextPage() );
float digiTime = 0;
goto label;
}else{
digitalWrite(12, LOW); // RED LED
digitalWrite(11, HIGH); // green LED
u8g.firstPage();
do {
u8g.setFont(u8g_font_unifont);
u8g.drawStr( 4, 12, "Cas zehleni:");
u8g.setPrintPos(100,12);
u8g.print(DobaZehleni,1 ); //zaokrouhleno na 0 desetinu
u8g.drawRFrame(0, 0, 128, 14,3);
u8g.setFont(u8g_font_helvB12);
u8g.drawStr( 20, 40, "Hotovo!");
} while ( u8g.nextPage() );
int pitch = 0;
for (uint8_t i = 0; i < 16; i++) {
pitch = buttonTones[i];
if (pitch) {
tone(SPEAKER_PIN, pitch);
} else {
noTone(SPEAKER_PIN);
}
delay(100);
}
noTone(SPEAKER_PIN);
delay(2000);
digitalWrite(11, LOW); // green LED
}
}
void zaokrouhli(double cislo) {
//double cislo = 12.345;
int celaCast = int(cislo);
double desetinnaCast = cislo - celaCast;
return desetinnaCast;
}