Sari la conținut
ELFORUM - Forumul electronistilor

Numarator UP-Down cu mega2560 si UTFT


Vizitator

Postări Recomandate

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>
// 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
  • Răspunsuri 6
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Zile populare

Top autori în acest subiect

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

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>
// Declare which fonts we will be using
// Discutii pe acesta tema:
 
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 de Vizitator
Link spre comentariu

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

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

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări