Daca am putut face cu microcontroleul ATtiny85 un termometru dublu cu afisare pe ecran alfanumeric LCD1602 prin intermediul unui registru de deplasare 74HC595, m-am gandit ca pot sa am si indicarea tensiunii bateriei unei masini si astfel sa am indicatii despre temperatura din exterior si cea din interior, asta daca pot folosi pinul fizic 1, RESET, dar si ADC0 (A0), dupa cum e prezentat pe site-ul http://www.pighixxx.com/
In cel mai rau caz, voi renunta la temperatura din interior... Schema gandita de mine deriva din cea a termometrului dublu la care am adaugat un divizor rezistiv cu raport de 1:4 (tensiune maxima de intrare de 20V), cum am facut la indicarul starii bateriei masinii cu led multicolor.
Trebuie sa schimb pictogramele, iar afisarea sa fie ceva de genul:
Pictogramele vor fi de genul:
- baterie:
- temperatura interior (masina):
- temperatura exterior (un copac):
Sketch-ul pe care l-am gandit si de care am fost multumit:
/*this sketch is adapted by niq_ro fromhttp://www.tehnic.go.rohttp://www.niqro.3x.rohttp://nicuflorica.blogspot.ro/http://arduinotehniq.blogspot.com/for made a dual thermometer & battery status for car with ATtiny85 as Arduino.. * 3-pin Arduino interface for HD44780 LCDs via 74HC595 Shift Register * by Rowan Simms code@rowansimms.com * License: Creative Commons - Attribution. * Full Documentation and Description: http://rowansimms.com/article.php/lcd-hookup-in-seconds * * This sketch allows Arduinos to use a shift register to control an LCD, allowing * a reduction in pins it requires from 6 to 3 while still retaining full control * including backlight on/off. * This requires the use of the LiquidCrystal595 library * available at: http://code.google.com/p/arduino-lcd-3pin/ */
#include <LiquidCrystal595.h> // include the library
LiquidCrystal595 lcd(0,1,2); // datapin, latchpin, clockpinbyte baterie1[8] = {
B00000,
B01100,
B11111,
B10000,
B10000,
B10000,
B10000,
B11111,
};
byte baterie2[8] = {
B00000,
B00110,
B11111,
B00001,
B00001,
B00001,
B00001,
B11111,
};
byte masina1[8] = {
B00111,
B01000,
B01111,
B10110,
B10000,
B11111,
B01100,
B01100
};
byte masina2[8] = {
B11100,
B00010,
B11110,
B01101,
B00001,
B11111,
B00110,
B00110
};
byte grad[8] = {
B01110,
B10001,
B10001,
B01110,
B00000,
B00000,
B00000,
};
byte pom1[8] = {
B00111,
B01000,
B10101,
B10010,
B10000,
B01111,
B00001,
B00001
};
byte pom2[8] = {
B11000,
B00110,
B10101,
B01001,
B00010,
B11100,
B10000,
B10000
};
// variables // variabile int t1, t2;
float t10, t20;
float t11, t21;
float t12, t22;
int temperaturePin1 = A0; // output from first LM335 is put at analog input no.0int temperaturePin2 = A3; // output from second LM335 is put at analog input no.1// cei 2 senzori de temperaturia LM335 sunt legati la pinii A0 si A1int divbaterie = A2; //the input pin for voltage dividerint u = 0; // variable to store the value coming from the sensorfloat k=4.90/5; // corection voltage (real voltage after 7805 output)float k1 = k; // real divider correctionfloat u1 = 0; // voltage on batteryfloat divizor = 0.25; // divider raportvoidsetup() {
lcd.begin(16,2); // 16 characters, 2 rows
lcd.createChar(0, grad);
lcd.createChar(1, baterie1);
lcd.createChar(2, baterie2);
lcd.createChar(3, masina1);
lcd.createChar(4, masina2);
lcd.createChar(5, pom1);
lcd.createChar(6, pom2);
lcd.clear(); // clear the screen
lcd.setCursor(2, 0); // put cursor at colon 2 and row 0 = left/up
lcd.print("ATtiny85 dual"); // print a text
lcd.setCursor(2, 1); // put cursor at colon 0 and row 0 = left/down
lcd.print("thermometer +"); // print a textdelay (3000);
lcd.clear(); // clear the screen
lcd.setCursor(0, 0); // put cursor at colon 2 and row 0 = left/up
lcd.print("+ battery status"); // print a text
lcd.setCursor(4, 1); // put cursor at colon 0 and row 0 = left/down
lcd.print("by niq_ro"); // print a textdelay (3000);
lcd.clear(); // clear the screen
}
voidloop() {
// Read and store Sensor Data
t11=0;
t21=0;
//lcd.clear(); // clear the screenfor (int x=1; x <= 5; x++)
{
// calculate the value
t1 = analogRead(temperaturePin1); // read value from temperature from first sensor (LM335);
t10 = 100.0*(k*5.0*t1/1023-2.980)+25.0;
t11 = t10 + t11;
t2 = analogRead(temperaturePin2); // read value from temperature from second sensor (LM335);
t20 = 100.0*(k*5.0*t2/1023-2.980)+25.0;
t21 = t20 + t21;
delay (500);
}
t12 = t11/5.0 -1.5 ; // average and corrected temperature
t22 = t21/5.0 -1.0; // average and corrected temperature
lcd.setCursor(0, 0);
lcd.write(byte(3));
lcd.write(byte(4));
lcd.print(":");
// lcd.print("t1="); if (t12<10) lcd.print(" ");
if (t12>0.0) lcd.print("+");
lcd.print(t12,1);
// lcd.write(0b11011111);
lcd.write(byte(0));
lcd.print("C ");
lcd.setCursor(0, 1);
// lcd.print("ext:");// lcd.print("t2=");
lcd.write(byte(5));
lcd.write(byte(6));
lcd.print(":");
if (t22<10) lcd.print(" ");
if (t22>0.0) lcd.print("+");
lcd.print(t22,1);
// lcd.write(0b11011111);
lcd.write(byte(0));
lcd.print("C ");
// read the value from the sensor:
u = analogRead(divbaterie);
u1 = k1*5.0*u/1023.0; // conver ADC in voltage value
u1 = u1/divizor+0.05;
lcd.setCursor(14, 0);
lcd.write(byte(1));
lcd.write(byte(2));
lcd.setCursor(11, 1);
if (u1<10) lcd.print(" ");
lcd.print(u1,1);
lcd.print("V");
}
Ca marime, el nu este foarte mare fata de cel care avea doar termometru dublu:
Am realizat montajul si am comparat cu un multimetru:
Dupa ce am reusit sa "aprind" cu un ATtiny85 un afisaj alfanumeric LCD1602 prin intermediul unui registru de deplasare 74HC595, am zis sa fac si ceva util cu el. Am incercat pentru inceput sa preiau informatiile de la un senzor de uniditate si tenmperatura DHT11, dar nu am am reusit, apoi am incercat cu senzori de temperatura DS18B20 si rezultat negativ, asa ca am folosit placuta mea cu 2 senzori analogici LM335, pe care i-am folosit in proiecte anterioare cu Arduino, unul fiind cel prezentat in articolul Termometru dublu cu LM335Z si un afisaj LCD cu 16 coloane si 2 randuri
Placuta cu cei 2 senzori LM335 are schema:
in care IC1 este senzorul de interior, care va fi conectat la A2 (pinul fizic 3 al lui ATtiny85), iar IC2 este senzorul de exterior, care va fi conectat la A3 (pinul fizic 2 al lui ATtiny85).
Schema de conectare a lui ATtiny85 la afisaj este cea din articolul anterior:
Montajul de test arata asa:
si are in partea din stanga jos un breadboad micut pe care se afla placa Arduino Nano, folosita la programare, si ATtiny85,
acolo se afla si placuta adaptoare pentru cei 2 senzori, apoi este bradboard-ul mai mare pe care se gaseste registrul de deplasare 74HC595, mai sus se vede transformatorul de retea cu stabilizatorul de tensiune cu LM317 reglat la 5V si afisajul alfanumeric..
De retinut: deoarece la senzorii analogici se compara tensiunea de pe intrare la care sunt conectati cu tensiunea de referinta si daca aceasta este tensiunea de 5V, la alimentarea din USB-ul unui calculator, din cauza consumului mare, citirile pot fi eronate, de aceea trebuie folosita o tensiune stabilizata de 5V.
- alimentare cu tensiune de 5V stabilizata:
- alimentare combinata (USB si stabilizator):
- alimentare doar din USB:
Ca si la testele anterioare cu DHT11 si DS18B20, la compilare pentru ATtiny85 la 1MHz, primeam un mesaj de eroare:
Dupa schimbarea placii la Arduino Uno, am constatat ca sketch-urile sunt mai mari de 4k si... am gasit pe net ca trebuie actualizat WinAVR-ul folosit de programul Arduino IDE... (toti pasii ce trebuie urmati sunt prezentati pe forumul Arduino in discutia http://forum.arduino.cc/index.php/topic,60649.0.html, eu nu am mai facut schimbari in fisierul avrdude.conf ).
Dupa aceasta, compilarea este fara erori:
Sketch-ul scris de mine este:
/*this sketch is adapted by niq_ro fromhttp://www.tehnic.go.rohttp://www.niqro.3x.rohttp://nicuflorica.blogspot.ro/http://arduinotehniq.blogspot.com/for made a dual thermometer with ATtiny85 as Arduino.. * 3-pin Arduino interface for HD44780 LCDs via 74HC595 Shift Register * by Rowan Simms code@rowansimms.com * License: Creative Commons - Attribution. * Full Documentation and Description: http://rowansimms.com/article.php/lcd-hookup-in-seconds * * This sketch allows Arduinos to use a shift register to control an LCD, allowing * a reduction in pins it requires from 6 to 3 while still retaining full control * including backlight on/off. * This requires the use of the LiquidCrystal595 library * available at: http://code.google.com/p/arduino-lcd-3pin/ */
#include <LiquidCrystal595.h> // include the library
LiquidCrystal595 lcd(0,1,2); // datapin, latchpin, clockpinbyte home13[8] = {
B00011,
B00100,
B01000,
B11111,
B01000,
B01000,
B01111,
};
byte home23[8] = {
B00000,
B10110,
B01110,
B11111,
B00100,
B00100,
B11100,
};
byte home33[8] = {
B00011,
B10110,
B01110,
B11111,
B00100,
B00100,
B11100,
};
byte home03[8] = {
B11111,
B00000,
B00000,
B11111,
B00000,
B00000,
B11111,
};
byte grad[8] = {
B01110,
B10001,
B10001,
B01110,
B00000,
B00000,
B00000,
};
// variables // variabile int t1, t2;
float t10, t20;
float t11, t21;
float t12, t22;
int temperaturePin1 = A2; // output from first LM335 is put at analog input no.0int temperaturePin2 = A3; // output from second LM335 is put at analog input no.1// cei 2 senzori de temperaturia LM335 sunt legati la pinii A0 si A1voidsetup() {
lcd.begin(16,2); // 16 characters, 2 rows
lcd.createChar(0, grad);
lcd.createChar(1, home13);
lcd.createChar(2, home23);
lcd.createChar(3, home33);
lcd.createChar(4, home03);
lcd.clear(); // clear the screen
lcd.setCursor(2, 0); // put cursor at colon 2 and row 0 = left/up
lcd.print("ATtiny85 dual"); // print a text
lcd.setCursor(1, 1); // put cursor at colon 0 and row 0 = left/down
lcd.print("thermometer 1.0"); // print a textdelay (3000);
lcd.clear(); // clear the screen
}
voidloop() {
// Read and store Sensor Data
t11=0;
t21=0;
//lcd.clear(); // clear the screenfor (int x=1; x <= 5; x++)
{
// calculate the value
t1 = analogRead(temperaturePin1); // read value from temperature from first sensor (LM335);
t10 = 100.0*(5.0*t1/1023-2.980)+25.0;
t11 = t10 + t11;
t2 = analogRead(temperaturePin2); // read value from temperature from second sensor (LM335);
t20 = 100.0*(5.0*t2/1023-2.980)+25.0;
t21 = t20 + t21;
delay (500);
}
t12 = t11/5.0 -1.5 ; // average and corrected temperature
t22 = t21/5.0 -1.0; // average and corrected temperature
lcd.setCursor(2, 0);
lcd.write(byte(1));
lcd.write(byte(4));
lcd.write(byte(3));
lcd.print(":");
// lcd.print("t1="); if (t12<10) lcd.print(" ");
if (t12>0.0) lcd.print("+");
lcd.print(t12,1);
// lcd.write(0b11011111);
lcd.write(byte(0));
lcd.print("C ");
lcd.setCursor(2, 1);
lcd.print("ext:");
// lcd.print("t2="); if (t22<10) lcd.print(" ");
if (t22>0.0) lcd.print("+");
lcd.print(t22,1);
// lcd.write(0b11011111);
lcd.write(byte(0));
lcd.print("C ");
delay(500);
lcd.setCursor(4, 0);
lcd.write(byte(2));
}
Avand partea de interfata realizata cu CD4050, am zis sa fac si cu acest afisaj termometrul dublu cu senzorii LM335, cum am facut si cu afisajul de Nokia 3410 si cu cel grafic monocrom cu ST7292, avand in vedere ca rezolutia este mult mai mare la afisajul color cu ILI9341, respectiv 320x240 (QVGA).
Pentru inceput am realizat schema:
si am incercat mai multe moduri de afisare, folosindu-ma de libraria grafica ucglib:
/*// original sketch by niq_ro from http://nicuflorica.blogspot.com for analog clock using ucglib library// version for 2.2" TFT with ILI9341 - 2014.07.18, Craiova - RomaniaUniversal uC Color Graphics Library Copyright (c) 2014, olikraus@gmail.com All rights reserved.*/
#include <SPI.h>
#include "Ucglib.h"// Ucglib_ILI9341_18x240x320_SWSPI ucg(/*sclk=*/ 13, /*data=*/ 11, /*cd=*/ 6 , /*cs=*/ 5, /*reset=*/ 4); //gordons
Ucglib_ILI9341_18x240x320_HWSPI ucg(/*cd=*/ 6 , /*cs=*/ 5, /*reset=*/ 4); // gordons/*http://gordonsprojects.blogspot.ro/2014/04/arduino-tft-serial-spi-22-ili9341.htmlD4 : RESETD5 : CSD6 : D/CD7 : LED (via 220 ohms resistor)D11 : MOSID12 : MISOD13 : SCKwith CD4050 adapter or 10k resistor, power supply and logical levels is 3.3V*/void subrutina(void) {
ucg.setRotate90();
// graphic commands to redraw the complete screen should be placed here // pictez un chenar
ucg.setColor(255, 255, 255); // culoare alba
ucg.drawFrame(0,0,320,240); //
ucg.setFont(ucg_font_courB24); // 20 pixel height
ucg.setColor(255, 0, 0); // culoare rosie
ucg.setPrintPos(50,30);
ucg.print("Termometru");
ucg.setColor(0, 255, 0); // culoare verde
ucg.setColor(0, 255, 0);
ucg.setColor(0, 0, 255); // culoare albastru
ucg.setPrintPos(20, 60);
ucg.print("dublu cu LM335");
ucg.setFont(ucg_font_fur17r); // 17 pixel height
ucg.setColor(255, 255, 0); // culoare galbena
ucg.setPrintPos(25,90);
ucg.print("ecran grafic 2,2'' (5,6cm)");
ucg.setFont(ucg_font_courB24); // 20 pixel height
ucg.setColor(0, 255, 255); // culoare bleo
ucg.setPrintPos(10,120);
ucg.print("QVGA cu ILI9341");
ucg.setColor(255, 0, 255); // culoare mov
ucg.setPrintPos(40,150);
ucg.print("versiune 1.2");
ucg.setFont(ucg_font_fur17r); // 17 pixel height
ucg.setColor(255, 255, 255); // culoare alb
ucg.setPrintPos(70,200);
ucg.print("realizat de niq_ro");
}
// variables // variabile int t1, t2;
float t10, t20;
float t11, t21;
float t12, t22;
int temperaturePin1 = A0; // output from first LM335 is put at analog input no.0int temperaturePin2 = A1; // output from second LM335 is put at analog input no.1// cei 2 senzori de temperaturia LM335 sunt legati la pinii A0 si A1voidsetup(void) {
delay(1000);
ucg.begin(UCG_FONT_MODE_TRANSPARENT);
//ucg.begin(UCG_FONT_MODE_SOLID);
ucg.clearScreen();
// ucg.clearScreen();
ucg.setFont(ucg_font_ncenR14r);
ucg.setColor(255, 0, 255);
ucg.setColor(1, 255, 0,0);
subrutina(); // unde e mesajul de intampinaredelay(5000);
ucg.clearScreen();
}
voidloop(void) {
ucg.setScale2x2();
// ucg.clearScreen(); // Read and store Sensor Data
t11=0;
t21=0;
for (int x=1; x <= 5; x++)
{
// calculate the value
t1 = analogRead(temperaturePin1); // read value from temperature from first sensor (LM335);
t10 = 100.0*(5.0*t1/1023-2.980)+25.0;
t11 = t10 + t11;
t2 = analogRead(temperaturePin2); // read value from temperature from second sensor (LM335);
t20 = 100.0*(5.0*t2/1023-2.980)+25.0;
t21 = t20 + t21;
delay (500);
}
t12 = t11/5.0 -2.0 ; // average and corrected temperature
t22 = t21/5.0 -1.0; // average and corrected temperature //-------------------------------------------------------
ucg.clearScreen();
// temp int
temperaturi(t12, 0);
//temperaturi(22.5, 0);// temp exterioara
temperaturi(t22, 60);
//temperaturi(29.5, 60);delay (2000);
} // final de program, se revine de la inceputvoid temperaturi(float t3, int igrec)
{
ucg.setFont(ucg_font_courB24); // 20 pixel height // ucg.clearScreen(); /*ucg.setColor(0, 0, 0); for (int qy = 39; qy < 60; qy++) { ucg.drawHLine(0, qy + igrec , 110);} */int r1 = random(100,255);
int g1 = random(100,255);
int b1 = random(100,255);
ucg.setColor(r1, g1, b1);
ucg.setPrintPos(10, 30 + igrec);
ucg.print("t :");
//ucg.setFont(ucg_font_fub42n); // 20 pixel height
ucg.setPrintPos(10, 60 + igrec);
if (t3 > 10.0) ucg.print("+");
elseif (t3>0.0) ucg.print(" +");
elseif (t3<0.0)
{
t3=-t3;
if (t3 > 10.0) ucg.print("-");
elseif (t3 > 0.0) ucg.print(" -");
}
if (t3==0.0) ucg.print(" ");
// ucg.print(t12,1);
ucg.print(t3,1);
// ucg.print("23.6");
ucg.print(" C");
ucg.setFont(ucg_font_fur17r); // 17 pixel height
ucg.setPrintPos(30, 35 + igrec);
if (igrec == 0) ucg.print("int");
else ucg.print("ext");
ucg.setPrintPos(115, 50 + igrec);
ucg.print("o");
}
Avand si o placa Arduino Mega ADK am conectat-o si pe ea, sperand ca se imbunatateste modul de afisare. Modul de conectare este putin diferit: ---------------------------- | Mega | Uno | TFT - ILI9341 | ---------------------------- | D22 | D4 | RESET | ---------------------------- | D24 | D5 | CS | ---------------------------- | D26 | D6 | D/C | ---------------------------- | D51 | D11 | MOSI | ---------------------------- | D50 | D12 | MISO | ---------------------------- | D52 | D13 | SCK | ---------------------------- LED-ul de fundal l-am alimentat printr-o rezistenta de 220 ohmi de la 5V.
Solutia ar fi o placa cu procesor mai rapid cum e Arduino Due, care lucreaza la 84MHz, fata de 16MHz la Arduino Uno si Mega. M-am gandit sa schimb modul de afisare, cu fonturi mai mici si o grafica:
Ca si in celelalte cazuri, trebuie alimentare separata, deoarece valorile masurate sunt comparate cu tensiunea de referinta, care este, in mod uzual, 5V, dar daca e consum mare, scate si la 4,8V... Sketch-ul folosit este:
/*// original sketch by niq_ro from http://nicuflorica.blogspot.com for analog clock using ucglib library// version for 2.2" TFT with ILI9341 - 2014.07.18, Craiova - RomaniaUniversal uC Color Graphics Libraryhttps://code.google.com/p/ucglib/ Copyright (c) 2014, olikraus@gmail.com All rights reserved.*/
#include <SPI.h>
#include "Ucglib.h"// Ucglib_ILI9341_18x240x320_SWSPI ucg(/*sclk=*/ 13, /*data=*/ 11, /*cd=*/ 6 , /*cs=*/ 5, /*reset=*/ 4); //gordons//Ucglib_ILI9341_18x240x320_SWSPI ucg(/*sclk=*/ 52, /*data=*/ 51, /*cd=*/ 26 , /*cs=*/ 24, /*reset=*/ 22); //at Mega//Ucglib_ILI9341_18x240x320_HWSPI ucg(/*cd=*/ 6 , /*cs=*/ 5, /*reset=*/ 4); // at Uno
Ucglib_ILI9341_18x240x320_HWSPI ucg(/*cd=*/ 26 , /*cs=*/ 24, /*reset=*/ 22); // at Mega/*http://gordonsprojects.blogspot.ro/2014/04/arduino-tft-serial-spi-22-ili9341.htmlMega | Uno | TFT - ILI9341----------------------D22 | D4 | RESETD24 | D5 | CSD26 | D6 | D/C ? | ? | LED (via 220 ohms resistor at 5V)D51 | D11 | MOSID50 | D12 | MISOD52 | D13 | SCK-----------------------------with CD4050 adapter or 10k resistor, power supply and logical levels is 3.3Vschematic: http://nicuflorica.blogspot.ro/2014/07/afisaj-grafic-color-qvga-de-22-cu.html*/void subrutina(void) {
ucg.setRotate90();
// graphic commands to redraw the complete screen should be placed here // pictez un chenar
ucg.setColor(255, 255, 255); // culoare alba
ucg.drawFrame(0,0,320,240); //
ucg.setFont(ucg_font_courB24); // 20 pixel height
ucg.setColor(255, 0, 0); // culoare rosie
ucg.setPrintPos(60,30);
ucg.print("Termometru");
ucg.setColor(0, 255, 0); // culoare verde
ucg.setColor(0, 255, 0);
ucg.setColor(0, 0, 255); // culoare albastru
ucg.setPrintPos(20, 60);
ucg.print("dublu cu LM335");
ucg.setFont(ucg_font_fur17r); // 17 pixel height
ucg.setColor(255, 255, 0); // culoare galbena
ucg.setPrintPos(25,90);
ucg.print("ecran grafic 2,2'' (5,6cm)");
ucg.setFont(ucg_font_courB24); // 20 pixel height
ucg.setColor(0, 255, 255); // culoare bleo
ucg.setPrintPos(10,120);
ucg.print("QVGA cu ILI9341");
ucg.setColor(255, 0, 255); // culoare mov
ucg.setPrintPos(40,150);
ucg.print("versiune 1.5");
ucg.setFont(ucg_font_fur17r); // 17 pixel height
ucg.setColor(255, 255, 255); // culoare alb
ucg.setPrintPos(60,200);
ucg.print("realizat de niq_ro");
}
// variables // variabile int t1, t2;
float t10, t20;
float t11, t21;
float t12, t22;
int temperaturePin1 = A0; // output from first LM335 is put at analog input no.0int temperaturePin2 = A1; // output from second LM335 is put at analog input no.1// cei 2 senzori de temperaturia LM335 sunt legati la pinii A0 si A1voidsetup(void) {
delay(1000);
ucg.begin(UCG_FONT_MODE_TRANSPARENT);
//ucg.begin(UCG_FONT_MODE_SOLID);
ucg.clearScreen();
// ucg.clearScreen();
ucg.setFont(ucg_font_ncenR14r);
ucg.setColor(255, 0, 255);
ucg.setColor(1, 255, 0,0);
subrutina(); // unde e mesajul de intampinaredelay(5000);
ucg.clearScreen();
}
voidloop(void) {
// ucg.setScale2x2();// ucg.clearScreen();// Read and store Sensor Data
t11=0;
t21=0;
for (int x=1; x <= 5; x++)
{
// calculate the value
t1 = analogRead(temperaturePin1); // read value from temperature from first sensor (LM335);
t10 = 100.0*(5.0*t1/1023-2.980)+25.0;
t11 = t10 + t11;
t2 = analogRead(temperaturePin2); // read value from temperature from second sensor (LM335);
t20 = 100.0*(5.0*t2/1023-2.980)+25.0;
t21 = t20 + t21;
delay (500);
}
t12 = t11/5.0 -2.0 ; // average and corrected temperature
t22 = t21/5.0 -1.0; // average and corrected temperature //-------------------------------------------------------//ucg.clearScreen(); // temp intint r = random(150,255);
int g = random(150,255);
int b = random(150,255);
temperaturi(t12, 20, 0); // temperature, x, y// termometre2(t12, 20);
termometre(t12, 20);
temperaturi(t22, 85, 160);
// termometre2(t22,250);
termometre(t22,250);
// temp exterioaradelay (2000);
} // final de program, se revine de la inceputvoid temperaturi(float t3, int ics, int igrec)
{
ucg.setFont(ucg_font_courB24); // 20 pixel height // ucg.clearScreen();
ucg.setColor(0, 0, 0);
for (int qy = 39 ; qy < 60; qy++)
{
ucg.drawHLine(ics+7, qy + igrec , 105);
}
if (igrec <30) ucg.setColor(255, 0, 0);
else ucg.setColor(0, 0, 255);
ucg.setPrintPos(10 + ics, 30 + igrec);
ucg.print("t :");
//ucg.setFont(ucg_font_fub42n); // 20 pixel height
ucg.setPrintPos(10 + ics, 60 + igrec);
if (t3 > 10.0) ucg.print("+");
elseif (t3>0.0) ucg.print(" +");
elseif (t3<0.0)
{
t3=-t3;
if (t3 > 10.0) ucg.print("-");
elseif (t3 > 0.0) ucg.print(" -");
}
if (t3==0.0) ucg.print(" ");
// ucg.print(t12,1);
ucg.print(t3,1);
// ucg.print("23.6");
ucg.print(" C");
ucg.setFont(ucg_font_fur17r); // 17 pixel height
ucg.setPrintPos(30 + ics, 35 + igrec);
if (igrec == 0) ucg.print("int");
else ucg.print("ext");
ucg.setPrintPos(115 + ics, 50 + igrec);
ucg.print("o");
}
void termometre (float t, int ics1)
{
ucg.setColor(255, 255, 255);
// ucg.setColor(r2, g2, b2);
ucg.drawFrame(ics1-4,10,9,200); // desenez corp termometru// ucg.drawDisc(ics1,220,10,UCG_DRAW_ALL); // desenez partea de jos, cu mercur
ucg.drawCircle(ics1,220,10,UCG_DRAW_ALL); // desenez partea de jos, cu mercurfor (int a = 0; a < 10; a++)
{
ucg.drawLine(ics1-5,20+20*a,ics1-2,20+20*a);
ucg.drawLine(ics1+5,20+20*a,ics1+2,20+20*a);
}
ucg.drawLine(ics1-10,140,ics1+10,140); // zero degree
ucg.setFont(ucg_font_courB24); // 20 pixel height
ucg.setPrintPos(13 + ics1, 149);
ucg.print("0 C");
ucg.setFont(ucg_font_fur17r); // 17 pixel height
ucg.setPrintPos(37 + ics1, 135);
ucg.print("o");
// temperature "lengh"int lin = 140 - 2*t;
ucg.setColor(0, 0, 0); // black
ucg.drawBox(ics1-2,20, 5, 190); // erase // temperature gaphicsif (ics1 <30) ucg.setColor(255, 0, 0);
else ucg.setColor(0, 0, 255);
ucg.drawDisc(ics1,220,8,UCG_DRAW_ALL); // desenez partea de jos, cu mercur//ucg.setColor(255, 255, 0); // ucg.drawLine(ics1-10,lin,ics1+10,lin); // just for control
ucg.drawBox(ics1-2,lin, 5, 210-lin);
}