Vizitator Postat Decembrie 13, 2015 Partajează Postat Decembrie 13, 2015 Salutare. Am acest programel care a fost modificat de mine din afisare LCD 2x16 in afisare UTFT. Problema care ma framanta este ca nu pot sa-l fac sa numere si ce este dupa virgula. Acesta este programul: #include <UTFT.h> // http://scuola.arduino.cc/lesson/b4EbZ73/Reaction_Timer // Declare which fonts we will be using extern uint8_t arial_bold[]; extern uint8_t Inconsola[]; extern uint8_t SevenSegNumFont[]; UTFT myGLCD(CTE32HR, 38, 39, 40, 41); // int sw1 = A0; // Connect pin 8 to SW1 // int sw2 = A2; // Connect pin 9 to SW2 int count = 0.0; void setup() { // pinMode(10, OUTPUT); // pinMode(A0, INPUT); //UP button LEFT // pinMode(A2, INPUT); //DOWN button RIGHT // pinMode(A4, INPUT); //START/STOP button MOD pinMode(A0, INPUT); //UP button LEFT pinMode(A2, INPUT); //DOWN button RIGHT // pinMode(sw1,INPUT); // pinMode(sw2,INPUT); // digitalWrite(sw1,HIGH); // digitalWrite(sw2,HIGH); myGLCD.InitLCD(); myGLCD.clrScr(); myGLCD.setFont(Inconsola); myGLCD.setColor(255, 105, 0); myGLCD.print("Up-Down Counter", CENTER, 20); // myGLCD.print(" ", 220, 60); } void loop() { if(digitalRead(A0) == LOW) // if SW1 is pressed perform action described in loop // (!digitalRead) >> numara continu { count++;; // Increment Count by 1 if (count>=32.1) count=3.0; myGLCD.printNumF(count, 1, 220, 60, 46, 4, 48); delay(120); } if(digitalRead(A2) == LOW) // if SW2 is pressed perform action described in loop { count--; // Decrement Count by 1 if(count < 2.9) count = 32.0; myGLCD.printNumF(count, 1, 220, 60, 46, 4, 48); delay(120); } } I-mi este de ajutor orice sfat. Multumesc. Link spre comentariu
Liviu M Postat Decembrie 13, 2015 Partajează Postat Decembrie 13, 2015 int vine de la integer - numere intregi. Adica n-au decat parte intreaga, nu si zecimale. Ca sa "numere cu zecimale": - int count = 0.0; --> float count = 0.0 - floar pasCounter = 0.1; //pasul care-ti trebuie - count++; --> count = count + pasCounter; - count--; --> count = count - pasCounter; Link spre comentariu
mars01 Postat Decembrie 13, 2015 Partajează Postat Decembrie 13, 2015 (editat) Ai declarat variabila count ca si integer: int count = 0.0; Trebuia declarata ca si FLOAT: float count = 0.0; LE: Liviu a fost mai rapid. Si mai complet. Editat Decembrie 13, 2015 de mars01 Link spre comentariu
Liviu M Postat Decembrie 13, 2015 Partajează Postat Decembrie 13, 2015 @mars: am fost primul. Mai trebuie modificat "pasul" Link spre comentariu
Vizitator Postat Decembrie 13, 2015 Partajează Postat Decembrie 13, 2015 (editat) Va multumesc frumos pt raspunsuri. Am facut modificarile si functioneaza. Exista o mica problema. count=0.0 asa afiseaza cand restartez, dar cand actionez o tast se muta cifrele cu un digit si de aici functionarea este OK. Am mai adaugat ceva: #include <UTFT.h> // http://scuola.arduino.cc/lesson/b4EbZ73/Reaction_Timer // Declare which fonts we will be using // Discutii pe acesta tema: // http://www.elforum.info/topic/110590-numarator-up-down-cu-mega2560-si-utft/ extern uint8_t arial_bold[]; extern uint8_t Inconsola[]; extern uint8_t SevenSegNumFont[]; UTFT myGLCD(CTE32HR, 38, 39, 40, 41); // int sw1 = A0; // Connect pin 8 to SW1 // int sw2 = A2; // Connect pin 9 to SW2 float count = 00.0; float count1 = 22.1; float pasCounter = 00.1; //pasul care-ti trebuie void setup() { pinMode(A0, INPUT); //UP button LEFT pinMode(A2, INPUT); //DOWN button RIGHT myGLCD.InitLCD(); myGLCD.clrScr(); myGLCD.setFont(Inconsola); myGLCD.setColor(255, 105, 0); myGLCD.print("Up-Down Counter", CENTER, 20); myGLCD.printNumF(count, 1, 220, 60); } void loop() { if(digitalRead(A0) == LOW) // if A0 is pressed perform action described in loop // (!digitalRead) >> numara continu { count = count + pasCounter; // Increment Count by 1 if (count>=32.0) count=03.0; myGLCD.printNumF(count, 1, 220, 60, 46, 4, 48); delay(120); } if(digitalRead(A2) == LOW) // if A2 is pressed perform action described in loop { count = count - pasCounter; // Decrement Count by 1 if(count < 02.9) count = 32.0; myGLCD.printNumF(count, 1, 220, 60, 46, 4, 48); delay(120); } if (count>=count1) { myGLCD.print("OFF" , CENTER, 120); } else { myGLCD.print("ON ", CENTER, 120); } } As putea sa memorez undeva in EEPROM ceea ce am tastat ultimaoara? Editat Decembrie 13, 2015 de Vizitator Link spre comentariu
Liviu M Postat Decembrie 13, 2015 Partajează Postat Decembrie 13, 2015 La inceput: #include <EEPROM.h>uint8_t eeAddrCountIntregi = 0;uint8_t eeAddrCountZecimale = 1; in setup() float count = EEPROM.read(eeAddrCountIntregi);uint8_t zecimale = EEPROM.read(eeAddrCountZecimale);count = count + ((float)zecimale / 10.0); //zecimale de la 0 la 9 Dupa ce ai ajuns la valoarea care-ti trebuie: uint8_t parteIntreaga = count; //pastrezi doar partea intreagauint8_t parteaZecimala = (count - parteaIntreaga) * 10; //calculeaza partea zecimala si salveaz-o intr-un intregEEPROM.write(eeAddrCountIntregi, parteIntreaga); EEPROM.write(eeAddrCountZecimale, parteZecimala); Daca vrei mai multe zecimale, modifici factorul cu care imparti/inmultesti. Ai grija cat de des modifici count. EEPROMul se toceste. He, he tocmai am descoperit ca exista functii mai destepte, EEPROM.put() & EEPROM.get() care lucreaza direct cu float si mai si verifica daca numarul de scris difera de ce e deja in eeprom. https://www.arduino.cc/en/Reference/EEPROM Link spre comentariu
Vizitator Postat Decembrie 13, 2015 Partajează Postat Decembrie 13, 2015 La inceput: #include <EEPROM.h>uint8_t eeAddrCountIntregi = 0;uint8_t eeAddrCountZecimale = 1; in setup() float count = EEPROM.read(eeAddrCountIntregi);uint8_t zecimale = EEPROM.read(eeAddrCountZecimale);count = count + ((float)zecimale / 10.0); //zecimale de la 0 la 9 .... Multumesc mult Liviu M. O sa ma straduiesc si cu aceasta modificare. Si memorarea as preferat sa se faca la un anumit interval de timp, unu, doua minute, sau la esirea din setari. Dar asta este alta tema cred. Sau mai bine pe un EEPROM extern. O sa trag cu ochiul pe adresa postata. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum