In general, pot citi starea unui buton si stiu ca a fost apasat sau nu, dar pentru anumite aplicatii e bine ca sa nu se schimbe ceva daca am apasat din greseala butonul, ci doar daca apas un timp destul de lung, de exemplu 3 secunde.
Am realizat repede un montaj care are un buton fara retinere (pe breadboard sunt 2 butoane, dar ma folosesc doar de unul) si 2 leduri, fiecare inseriate cu cate o rezistenta de 220ohmi fiecare, pentru limitare curent prin ele si prin pinii microcontrolerului de pe placa.
Un led galben indica faptul ca butonul este apasat (aprindere stroboscopica, doar pentru efect placut), iar ledul rosu se aprinde doar daca butnul a fost apasat suficient de mult (3 secunde).
Schema este foarte simpla:
Din program (pushtime1button.ino) pinul alocat butonului este in starea HIGH, deoarece am activat rezistenta interna de pull-up (de cca 10kOhmi).
Pentru a fi mai usor de inteles ce am scris mai sus, va recomand vizionarea unuia din cele 2 filmulete:
La solicitarea lui Mircea Craciun, am realizat un termostat, care mai are posibilitatea de a controla si umiditatea dintr-o incinta (higrostat). Senzorul pentru umiditate si temperatura este unul dedicat, AM2302 (cunoscut si ca DHT22 cand e montat pe un cablaj si are o rezistenta de 4k7 intre +5V si pinul de date).
Precizia acestui senzor este destul de buna, la temperatura de +0,5 grade Celsius in domensiul de -40..+80 grade Celsius si pentru umidtatea relativa +2%RH in domensiul de 0..100%. Schema de conectare este:
Dupa cum se observa, am reprezentat cele doua variante de senzor, montandu-se doar una din ele..
Am pus 2 led-uri pentru a avea o incatie, dar daca se inlocuiesc cu relee, ele pot comanda o centrala si un servomotor (sau electrovana) de eliminare umiditate, dupa cum sunt date comenzile din sketch-ul LCD1602_thermostat_humidity_ver1m0.ino.
Din celel 3 butoane fara retinere se regleaza temperatura dorita, intervalul acceptat de scadere a temperaturii odata depasite (histerezis), umiditatea si intervalul acceptat de scadere al umiditatii odata depasite.
- reglaj temperatura:
- reglaj interval acceptat de scadere a temperaturii odata depasita (histerezis)
- reglaj umiditate:
- reglaj interval acceptat de scadere a umiditatii odata depasite (histerezis)
In graficul de mai jos se cele 3 cazuri: temperatura scazuta (BELOW), temperatura optima (OK) si temperatura prea mare (OVER):
In timpul functionarii,pot fi mai multe stari (am simulat cateva):
- temperatura si umiditate in parametrii doriti (optim):
- temperatura scazuta si umiditate mai mica decat pragul admis:
- temperatura in parametrii, umiditate mai mica decat pragul admis (bun):
- temperatura in parametrii, umiditate prea mare:
- temperatura scazuta si umiditate prea mare:
- temperatura prea mare, umiditate crescuta:
Am facut si 2 filmulete, care prezinta mai bine modul de reglaj al parametrilor:
Pentru diverse sisteme de automatizare in care se doreste reglajul anumitor parametrii se folosesc meniuri mai simple sau mai complexe.
In articolul Tutorial: manage menu and LCD display with Arduino este prezentat un meniu controlat cu 4 butoane fara retinere (selectie, renuntare, inainte/dreapta inapoi/stanga) in care se foloseste o libraria libraria MenuBackend modificata. In acel material se folosesc 4 butoane fara retinere cu contact intre pinii de intrare si plus, iar pinii sunt conectati prin rezistente la masa.
iar meniul are 3 submeniuri, primul submeniu mai are 2 sub-submeniuri, al doilea submeniu are 3 sus-submeniuri, iar al treilea submeniu e fara sub-submeniuri.
Eu am modificat sketch-ul pentru a elimina rezistentele, folosindu-ma de cele interne, pe care le pun in 1 logic (HIGH), deci am contact catre masa, schema devenind:
si diverse faze se pot vedea in imaginile urmatoare:
- meniul principal
- primul submeniu
- al doilea submeniu
- al treilea submeniu
- sub-submeniurile de la submeniul 1:
- sub-submeniurile de la submeniul 2:
Dupa cum am vazut cum functioneaza, am rescris sketch-ul (3menu_3submenu_each_ver2m0.ino) sa am cate 3 sub-submeniuri la fiecare submeniu, iar asta se vede in filmuletele:
Fata de articolele anterioare, unde aveam reglaj complet la ceasul RTC cu DS1307 dintr-un encoder (folosindu-ma de informatiile de la http://andydoz.blogspot.com/) acum am 3 taste... Schema de conectare este similara, deoarece am pastrat conexiunile principale, punand chiat si tastele ca la encoder):
In modul obisnuit, pe ecranul apar ciclic informatii despre:
- ora:
- data:
- temperatura si umiditate:
Daca apas scurt pe tasta MENU/NEXT apare pe ecran ID-ul meu "niq_ro":
Daca apas lung (mai mult de 3 secunde) se intra in modul de reglaj:
// adapted sketch by niq_ro from http://arduinotehniq.blogspot.com// and http://nicuflorica.blogspot.ro// version 1.0 in 6.11.2014, Craiova - Romanaia// curent version in 12.1.2015// source for LEDControl: http://embedded-lab.com/blog/?p=6862
#include "LedControl.h"/* Now we need a LedControl to work with. ***** These pin numbers will probably not work with your hardware ***** pin 12 is connected to the DataIn pin 11 is connected to the CLK pin 10 is connected to LOAD We have only a single MAX72XX. */LedControl lc=LedControl(12,11,10,1);
// Example testing sketch for various DHT humidity/temperature sensors// Written by ladyada, public domain
#include "DHT.h"
#define DHTPIN A1 // what pin we're connected to A1// Uncomment whatever type you're using!
#define DHTTYPE DHT11 // DHT 11 //#define DHTTYPE DHT22 // DHT 22 (AM2302)//#define DHTTYPE DHT21 // DHT 21 (AM2301)// if is just sensor:// Connect pin 1 (on the left) of the sensor to +5V// Connect pin 2 of the sensor to whatever your DHTPIN is// Connect pin 4 (on the right) of the sensor to GROUND// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
DHT dht(DHTPIN, DHTTYPE);
// declaration for type of valueint t, h;
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib// original sketck from http://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/// add part with SQW=1Hz from http://tronixstuff.wordpress.com/2010/10/20/tutorial-arduino-and-the-i2c-bus/// Dawn & Dusk controller. http://andydoz.blogspot.ro/2014_08_01_archive.html// 16th August 2014 - (C) A.G.Doswell 2014
#include <Wire.h>
#include "RTClib.h"// from https://github.com/adafruit/RTClib
#include <LiquidCrystal.h>
//#include <Encoder.h> // from http://www.pjrc.com/teensy/td_libs_Encoder.htmlRTC_DS1307RTC; // Tells the RTC library that we're using a DS1307 RTC///Encoder knob(2, 3); //encoder connected to pins 2 and 3 (and ground)//the variables provide the holding values for the set clock routineint setyeartemp;
int setmonthtemp;
int setdaytemp;
int sethourstemp;
int setminstemp;
int setsecs = 0;
int maxday; // maximum number of days in the given monthint TimeOut = 10;
int TimeOutCounter;
// These variables are for the push button routineint buttonstate = 0; //flag to see if the button has been pressed, used internal on the subroutine onlyint pushlengthset = 3000; // value for a long push in mSint pushlength = pushlengthset; // set default pushlengthint pushstart = 0;// sets default push value for the button going lowint pushstop = 0;// sets the default value for when the button goes back highint knobval; // value for the rotation of the knobboolean buttonflag = false; // default value for the button flagbyte SW1 = 2; // switch for downbyte SW2 = 3; // switch for upvoidsetup()
{
// Initialize MAX7219 device
lc.shutdown(0,false); // Enable display
lc.setIntensity(0,3); // Set brightness level (0 is min, 15 is max)
lc.clearDisplay(0); // Clear display register // Initialize HTD sensor
dht.begin();
Wire.begin();
RTC.begin();
// if (! RTC.isrunning()) {//Serial.println("RTC is NOT running!");// following line sets the RTC to the date & time this sketch was compiledRTC.adjust(DateTime(__DATE__, __TIME__));
// }// part code from http://tronixstuff.wordpress.com/Wire.beginTransmission(0x68);
Wire.write(0x07); // move pointer to SQW address//Wire.write(0x10); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square waveWire.write(0x13); // sends 0x13 (hex) 00010011 (binary) to control register - turns on square wave at 32kHzWire.endTransmission();
// end part code from http://tronixstuff.wordpress.com/pinMode(A0,INPUT);//push button on encoder connected to A0 (and GND) or MENU/NEXTdigitalWrite(A0,HIGH); //Pull A0 highpinMode(SW1, INPUT); // N.O. push button switchpinMode(SW2, INPUT); // N.O. push button switchdigitalWrite(SW1, HIGH);
digitalWrite(SW2, HIGH);
/* Serial.begin(9600); Serial.println("test for niq_ro"); Serial.println("------------------");*/
}
voidloop()
{
// Reading temperature or humidity takes about 250 milliseconds!// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
h = dht.readHumidity();
// t = dht.readTemperature(); /* test part // test humidity valueh = 37;// test temperature valuet = 19;*///
lc.clearDisplay(0); // Clear display register for(int j=0; j<300; j++){
temperatura (t);
umiditate (h);
pushlength = pushlengthset;
pushlength = getpushlength ();
delay (10);
if (pushlength <pushlengthset) {
ShortPush ();
}
//This runs the setclock routine if the knob is pushed for a long timeif (pushlength >pushlengthset) {
lc.clearDisplay(0); // Clear display register DateTimenow = RTC.now();
setyeartemp=now.year(),DEC;
setmonthtemp=now.month(),DEC;
setdaytemp=now.day(),DEC;
sethourstemp=now.hour(),DEC;
setminstemp=now.minute(),DEC;
setclock();
pushlength = pushlengthset;
};
}
//delay(3000);
lc.clearDisplay(0); // Clear display register for(int j=0; j<300; j++){
DateTimenow = RTC.now();
int ora0 = now.hour();
int minut0 = now.minute();
int second0 = now.second();
/*// serial monitor Serial.print(now.hour(), DEC); Serial.print(":"); Serial.print(now.minute(), DEC); Serial.print(":"); Serial.print(now.second(), DEC); Serial.print(" -> "); Serial.print(ora1); Serial.println(":"); Serial.print(minut1); Serial.print(":"); Serial.print(second1); Serial.println("------------------");*/
ora (ora0, minut0, second0);
pushlength = pushlengthset;
pushlength = getpushlength ();
delay (10);
if (pushlength <pushlengthset) {
ShortPush ();
}
//This runs the setclock routine if the knob is pushed for a long timeif (pushlength >pushlengthset) {
lc.clearDisplay(0); // Clear display register DateTimenow = RTC.now();
setyeartemp=now.year(),DEC;
setmonthtemp=now.month(),DEC;
setdaytemp=now.day(),DEC;
sethourstemp=now.hour(),DEC;
setminstemp=now.minute(),DEC;
setclock();
pushlength = pushlengthset;
};
//delay (900);
}
t = dht.readTemperature(); // read data for temperature
lc.clearDisplay(0); // Clear display register for(int j=0; j<300; j++){
DateTimenow = RTC.now();
int ziua0 = now.day();
int luna0 = now.month();
int anul0 = now.year();
/*// serial monitor Serial.print(now.day(), DEC); Serial.print(":"); Serial.print(now.month(), DEC); Serial.print(":"); Serial.print(now.year(), DEC); Serial.print(" -> "); Serial.print(ziua0); Serial.println("."); Serial.print(luna0); Serial.print("."); Serial.print(anul0); Serial.println("------------------");*/
data (ziua0, luna0, anul0);
pushlength = pushlengthset;
pushlength = getpushlength ();
delay (10);
if (pushlength <pushlengthset) {
ShortPush ();
}
//This runs the setclock routine if the knob is pushed for a long timeif (pushlength >pushlengthset) {
lc.clearDisplay(0); // Clear display register DateTimenow = RTC.now();
setyeartemp=now.year(),DEC;
setmonthtemp=now.month(),DEC;
setdaytemp=now.day(),DEC;
sethourstemp=now.hour(),DEC;
setminstemp=now.minute(),DEC;
setclock();
pushlength = pushlengthset;
};
//delay (900);
}
}
void umiditate (int umidit)
{
int zu = int(umidit/10); // determin cifra zecilorint uu = umidit - 10*zu; // determin cifra unitatilor
lc.setDigit(0,2,zu, false); // afisez un 5 pe coloana 2
lc.setDigit(0,1,uu, false); // afisez un 0 pe coloana 1
lc.setRow(0,0,B0110111); // afisez litera "H"
}
void temperatura (int temper)
{
int zt = int(temper/10); // determin cifra zecilorint ut = temper - 10*zt; // determin cifra unitatilor
lc.setDigit(0,7,zt, false); // afisez un 5 pe coloana 7
lc.setDigit(0,6,ut, false); // afisez un 0 pe coloana 1
lc.setRow(0,5,B1100011); // afisez un semn de grad pe coloana 5
lc.setRow(0,4,B1001110); // afisez un C pe coloana 4
}
void ora (int ora1, int minut1, int second1)
{
// hourint zo = int(ora1/10); // determin cifra zecilorint uo = ora1 - 10*zo; // determin cifra unitatilorif (zo >= 1) lc.setDigit(0,7,zo, false); // afisez zecile de ore pe coloana 7 (in stanga)
lc.setDigit(0,6,uo, false); // afisez unitatile de ore pe coloana 6
lc.setRow(0,5,B0000001); // afisez o liniuta pe coloana 5// minutesint zm = int(minut1/10); // determin cifra zecilorint um = minut1 - 10*zm; // determin cifra unitatilor
lc.setDigit(0,4,zm, false); // afisez zecile de minute pe coloana 4
lc.setDigit(0,3,um, false); // afisez unitatile de minute pe coloana 3
lc.setRow(0,2,B0000001); // afisez o liniuta pe coloana 2// secondsint zs = int(second1/10); // determin cifra zecilorint us = second1 - 10*zs; // determin cifra unitatilor
lc.setDigit(0,1,zs, false); // afisez zecile de secunde pe coloana 1
lc.setDigit(0,0,us, false); // afisez unitatile de minute pe coloana 0 (dreapta)
}
void data (int ziua1, int luna1, int anul1)
{
// ziua (day)int zz = int(ziua1/10); // determin cifra zecilorint uz = ziua1 - 10*zz; // determin cifra unitatilorif (zz >= 1) lc.setDigit(0,7,zz, false); // afisez zecile de ore pe coloana 7 (in stanga)
lc.setDigit(0,6,uz, true); // afisez unitatile de ore pe coloana 6//lc.setRow(0,5,B0000001); // afisez o liniuta pe coloana 5// luna (mounth)int zl = int(luna1/10); // determin cifra zecilorint ul = luna1 - 10*zl; // determin cifra unitatilor
lc.setDigit(0,5,zl, false); // afisez zecile de minute pe coloana 5
lc.setDigit(0,4,ul, true); // afisez unitatile de minute pe coloana 4//lc.setRow(0,2,B0000001); // afisez o liniuta pe coloana 2// anul (year)int ma = int(anul1/1000); // determin cifra miilorint rsa = anul1 - 1000*ma; // determin restul sutelorint sa = int(rsa/100); // determin cifra sutelorint rza = rsa - 100*sa; // determin restul zecilorint za = int(rza/10); // determin cifra zecilorint ua = rza - 10*za; // determin cifra anilor
lc.setDigit(0,3,ma, false); // afisez zecile de secunde pe coloana 3
lc.setDigit(0,2,sa, false); // afisez unitatile de minute pe coloana 2
lc.setDigit(0,1,za, false); // afisez zecile de secunde pe coloana 1
lc.setDigit(0,0,ua, false); // afisez unitatile de minute pe coloana 0 (dreapta)
}
//sets the clockvoid setclock (){
setyear ();
lc.clearDisplay(0); // Clear display register
setmonth ();
lc.clearDisplay(0); // Clear display register
setday ();
lc.clearDisplay(0); // Clear display register
sethours ();
lc.clearDisplay(0); // Clear display register
setmins ();
lc.clearDisplay(0); // Clear display register RTC.adjust(DateTime(setyeartemp,setmonthtemp,setdaytemp,sethourstemp,setminstemp,setsecs));
delay (1000);
}
// subroutine to return the length of the button push.int getpushlength () {
buttonstate = digitalRead(A0);
if(buttonstate == LOW && buttonflag==false) {
pushstart = millis();
buttonflag = true;
};
if (buttonstate == HIGH && buttonflag==true) {
pushstop = millis ();
pushlength = pushstop - pushstart;
buttonflag = false;
};
return pushlength;
}
// The following subroutines set the individual clock parametersint setyear () {
//lcd.clear();//lc.clearDisplay(0); // Clear display register // lcd.print ("Set Year");
lc.setRow(0,7,B0111011); // afisez litera "y" pe coloane 7 (in stanga de tot)
lc.setRow(0,6,B1101111); // afisez litera "e" pe coloane 6
lc.setRow(0,5,B1111101); // afisez litera "a" pe coloane 5//lc.setRow(0,4,B0000101); // afisez litera "r" pe coloane 4
lc.setRow(0,4,B10000101); // afisez litera "r" cu punct jos
pushlength = pushlengthset;
pushlength = getpushlength ();
if (pushlength != pushlengthset) {
return setyeartemp;
}
//lc.clearDisplay(0); // Clear display registerif (!digitalRead(SW1)) { //bit of software de-bounce
knobval = -1;
delay(150);
setyeartemp=setyeartemp + knobval;
if (setyeartemp < 2014) { //Year can't be older than currently, it's not a time machine.
setyeartemp = 2014;
}
}
if (!digitalRead(SW2)) {
knobval = 1;
delay(150);
setyeartemp=setyeartemp + knobval;
if (setyeartemp < 2014) { //Year can't be older than currently, it's not a time machine.
setyeartemp = 2014;
}
}
// setyeartemp=setyeartemp + knobval;// if (setyeartemp < 2014) { //Year can't be older than currently, it's not a time machine.// setyeartemp = 2014;// }// lcd.print (setyeartemp);int zua = setyeartemp - 2000; // aflu ultimele 2 cifre din anint za = zua / 10; // aflu cifra zecilor din anint ua = zua - 10*za; // aflu cifra unitatilor din an
lc.setDigit(0,3,2, false); // afisez cifra "2" din an pe coloana 3
lc.setDigit(0,2,0, false); // afisez cifra "0" din an pe coloana 2
lc.setDigit(0,1,za, false); // afisez cifra zecilor din an pe coloana 1
lc.setDigit(0,0,ua, false); // afisez cifra unitatilor din an pe coloana 0 (dreapta de tot)
setyear();
// delay(150);
}
int setmonth () {
//lcd.clear();//lcd.print ("Set Month");
lc.setRow(0,7,B0110111); // afisez litera "H" (in loc de "m") pe coloane 7 (in stanga de tot)//lc.setRow(0,7,B1001111); // afisez litera "E" (in loc de "m") pe coloane 7 (in stanga de tot)
lc.setRow(0,6,B0011101); // afisez litera "o" pe coloane 6
lc.setRow(0,5,B0010101); // afisez litera "n" pe coloane 5
lc.setRow(0,4,B0001111); // afisez litera "t" pe coloane 4
lc.setRow(0,3,B0010111); // afisez litera "h" pe coloane 3
pushlength = pushlengthset;
pushlength = getpushlength ();
if (pushlength != pushlengthset) {
return setmonthtemp;
}
// lcd.setCursor (0,1);if (!digitalRead(SW1)) { //bit of software de-bounce
knobval = -1;
delay(150);
setmonthtemp=setmonthtemp + knobval;
if (setmonthtemp < 1) {// month must be between 1 and 12
setmonthtemp = 1;
}
}
if (!digitalRead(SW2)) {
knobval = 1;
delay(150);
setmonthtemp=setmonthtemp + knobval;
if (setmonthtemp > 12) {
setmonthtemp=12;
}
}
// lcd.print (setmonthtemp);// lcd.print(" ");int zl = setmonthtemp / 10; // aflu cifra zecilor din lunaint ul = setmonthtemp - 10*zl; // aflu cifra unitatilor din luna
lc.setDigit(0,1,zl, false); // afisez cifra zecilor din luna pe coloana 1
lc.setDigit(0,0,ul, false); // afisez cifra unitatilor din luna pe coloana 0 (dreapta de tot)
setmonth();
}
int setday () {
if (setmonthtemp == 4 || setmonthtemp == 6 || setmonthtemp == 9 || setmonthtemp == 11) { //30 days hath September, April June and November
maxday = 30;
}
else {
maxday = 31; //... all the others have 31
}
if (setmonthtemp ==2 && setyeartemp % 4 ==0) { //... Except February alone, and that has 28 days clear, and 29 in a leap year.
maxday = 29;
}
if (setmonthtemp ==2 && setyeartemp % 4 !=0) {
maxday = 28;
}
//lcd.clear(); // lcd.print ("Set Day");
lc.setRow(0,7,B0111101); // afisez litera "d" pe coloane 7
lc.setRow(0,6,B1111101); // afisez litera "a" pe coloane 6
lc.setRow(0,5,B0111011); // afisez litera "y" pe coloane 5
pushlength = pushlengthset;
pushlength = getpushlength ();
if (pushlength != pushlengthset) {
return setdaytemp;
}
// lcd.setCursor (0,1);if (!digitalRead(SW1)) { //bit of software de-bounce
knobval = -1;
delay(150);
setdaytemp=setdaytemp+ knobval;
if (setdaytemp < 1) {
setdaytemp = 1;
}
}
if (!digitalRead(SW2)) {
knobval = 1;
delay(150);
setdaytemp=setdaytemp+ knobval;
if (setdaytemp > maxday) {
setdaytemp = maxday;
}
}
// lcd.print (setdaytemp);// lcd.print(" "); int zz = setdaytemp / 10; // aflu cifra zecilor din ziint uz = setdaytemp - 10*zz; // aflu cifra unitatilor din zi
lc.setDigit(0,1,zz, false); // afisez cifra zecilor din zi pe coloana 1
lc.setDigit(0,0,uz, false); // afisez cifra unitatilor din zi pe coloana 0 (dreapta de tot)
setday();
}
int sethours () {
//lcd.clear();// lcd.setCursor (0,0);// lcd.print ("Set Hours");
lc.setRow(0,7,B0010111); // afisez litera "h" pe coloane 7
lc.setRow(0,6,B0011101); // afisez litera "o" pe coloane 6
lc.setRow(0,5,B0011100); // afisez litera "u" pe coloane 5
lc.setRow(0,4,B0000101); // afisez litera "r" pe coloane 4
pushlength = pushlengthset;
pushlength = getpushlength ();
if (pushlength != pushlengthset) {
return sethourstemp;
}
// lcd.setCursor (0,1);if (!digitalRead(SW1)) { //bit of software de-bounce
knobval = -1;
delay(150);
sethourstemp=sethourstemp + knobval;
if (sethourstemp < 0) {
sethourstemp = 0;
}
}
if (!digitalRead(SW2)) {
knobval = 1;
delay(150);
sethourstemp=sethourstemp + knobval;
if (sethourstemp > 23) {
sethourstemp=23;
}
}
// lcd.print (sethourstemp);// lcd.print(" "); int zo = sethourstemp / 10; // aflu cifra zecilor de oreint uo = sethourstemp - 10*zo; // aflu cifra unitatilor de ore
lc.setDigit(0,1,zo, false); // afisez cifra zecilor de ora pe coloana 1
lc.setDigit(0,0,uo, false); // afisez cifra unitatilor de ora pe coloana 0 (dreapta de tot)
sethours();
}
int setmins () {
//lcd.clear();// lcd.setCursor (0,0);// lcd.print ("Set Mins");
lc.setRow(0,7,B0110111); // afisez litera "H" (in loc de "m") pe coloane 7 (in stanga de tot)//lc.setRow(0,7,B1001111); // afisez litera "E" (in loc de "m") pe coloane 7 (in stanga de tot)
lc.setRow(0,6,B0010000); // afisez litera "i" pe coloane 6
lc.setRow(0,5,B0010101); // afisez litera "n" pe coloane 5
lc.setRow(0,4,B0011100); // afisez litera "u" pe coloane 4
lc.setRow(0,3,B0001111); // afisez litera "t" pe coloane 3//lc.setChar(0,2,'e',true);
lc.setRow(0,2,B11101111); // afisez litera "e" cu punct jos
pushlength = pushlengthset;
pushlength = getpushlength ();
if (pushlength != pushlengthset) {
return setminstemp;
}
// lcd.setCursor (0,1);if (!digitalRead(SW1)) { //bit of software de-bounce
knobval = -1;
delay(150);
setminstemp=setminstemp + knobval;
if (setminstemp < 0) {
setminstemp = 0;
}
}
if (!digitalRead(SW2)) {
knobval = 1;
delay(150);
setminstemp=setminstemp + knobval;
if (setminstemp > 59) {
setminstemp=59;
}
}
// lcd.print (setminstemp);// lcd.print(" ");int zm = setminstemp / 10; // aflu cifra zecilor de minuteint um = setminstemp - 10*zm; // aflu cifra unitatilor de minute
lc.setDigit(0,1,zm, false); // afisez cifra zecilor de minute pe coloana 1
lc.setDigit(0,0,um, false); // afisez cifra unitatilor de minute pe coloana 0 (dreapta de tot)
setmins();
}
void ShortPush () {
//This displays show something
lc.clearDisplay(0); // Clear display registerfor (long Counter = 0; Counter < 10 ; Counter ++) { //returns to the main loop if it's been run 604 times // lcd.setCursor (2,0);// lcd.print ("Hi, niq_ro!");
lc.setRow(0,6,B1100010); // afisez litera "n" pe coloane 6
lc.setRow(0,5,B0100000); // afisez litera "i" pe coloane 5
lc.setRow(0,4,B1110011); // afisez litera "q" pe coloane 4
lc.setRow(0,3,B0000001); // afisez semnul "-" pe coloane 3
lc.setRow(0,2,B1000010); // afisez litera "r" pe coloane 2
lc.setRow(0,1,B1100011); // afisez litera "o" pe coloane 1delay(200);
}
lc.clearDisplay(0); // Clear display register
}