【问题标题】:Different font size, same LCD screen. Nokia 5110 LCD with arduino uno clock不同的字体大小,相同的液晶屏。诺基亚 5110 LCD 带 arduino uno 时钟
【发布时间】:2021-07-31 02:21:52
【问题描述】:

这是我的诺基亚 5110 lcd arduino 时钟项目。我正在尝试使字体更小setTextSize(1),仅几秒钟,这是显示屏上的第三行。我可以更改所有内容的字体大小,但不能特别更改秒数。任何事情都会有很大帮助,因为我对 arduino 很陌生。感谢您的宝贵时间!

//Programa : Teste display Nokia 5110 usando biblioteca Adafruit
//Autor : VINICIUS LOPES

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

// pin 3 - Serial clock out (SCLK)
// pin 4 - Serial date out (DIN)
// pin 5 - date/Command select (D/C)
// pin 6 - LCD chip select (CS/CE)
// pin 7 - LCD reset (RST)

Adafruit_PCD8544 display = Adafruit_PCD8544(3,4,5,6,7);

int second,minute, hour, day, mounth,year; 
unsigned long UtlTime; 

void setup() 
{
    pinMode(2,OUTPUT);
    UtlTime=0;    

    minute=30;   
    hour=6;   
    day=9;   
    mounth=5;   
    year=21;   
    Serial.begin(9600);   

    display.begin();
    display.setContrast(80); // Adjust the display contrast
    display.clearDisplay();   //Apaga o buffer e o display
    display.setTextSize(2);  //Seta o tamanho do texto
    display.setTextColor(BLACK); //Seta a cor do texto      
    display.print("Date \n & \nTime ");   
    display.setCursor(0,10);   
    display.display();
    delay (5000); 


    //Configura o hour   
    display.clearDisplay();   
    display.setCursor(0,0);   
    display.print("hour:");
    display.display();
    Serial.print("\nin between hour:");  
    while(hour==0)
    {     
        if (Serial.available() > 0)
        {       
            hour= Serial.parseInt();     
        }   
    }   
    display.print(hour);   
    display.display();
    delay(1000); 

    //Configura a minute   
    display.clearDisplay();   
    display.setCursor(0,0);   
    display.print("minute:");   
    display.display();
    Serial.print("\nin between minute:"); 
    while(hour==0)
    {     
        if (Serial.available() > 0)
        {       
            minute= Serial.parseInt();     
        }   
    }   
    display.print(minute);   
    display.display();
    delay(1000);    

    //Configura o month   
    display.clearDisplay();   
    display.setCursor(0,0);   
    display.print("month:");
    display.display();   
    Serial.print("\nin between month:");   
    while(mounth==0)
    {     
        if (Serial.available() > 0)
        {       
            day= Serial.parseInt();     
        }   
    }   
    display.print(mounth);   
    display.display();
    delay(1000);    

    //Configura o mês   
    display.clearDisplay();   
    display.setCursor(0,0);   
    display.print("day:"); 
    display.display();  
    Serial.print("\nin between day:");  
    while(day==0)
    {     
        if (Serial.available() > 0)
        {       
            day= Serial.parseInt();     
        }   
    }   
    display.print(day);  
    display.display();
    delay(1000);    

    //Configura o year   
    display.clearDisplay();   
    display.setCursor(0,0);   
    display.print("year:");   
    display.display();
    Serial.print("\nin between year:");   
    while(year==0)
    {     
        if (Serial.available() > 0)
        {       
            year= Serial.parseInt();     
        }   
    }   
    display.print(year);   

    display.display();   
    delay(1000);
    display.clearDisplay(); 

} 

void loop() {   

    if(millis()-UtlTime<0)
    {     
        UtlTime=millis();   
    }   
    else
    {  
        second=int((millis()-UtlTime)/1000);   
    }   
    if(second>59)   
    {     
        second=0;     
        minute++;     
        UtlTime=millis();     
        if(minute>59)     
        {       
            hour++;       
            minute=0;       
            if(hour>23)       
            {         
                day++;         
                hour=0;         
                if(mounth==1||mounth==3||mounth==5||mounth==7||mounth==8||mounth==10||mounth==12)         
                {           
                    if(day>31)           
                    {             
                        day=1;             
                        mounth++;             
                        if(mounth>12)             
                        {               
                            year++;               
                            mounth=1;             
                        }           
                    }         
                }         
                else if(mounth==2) 
                {           
                    if(year%400==0)           
                    {             
                        if(day>29)             
                        {               
                            day=1;               
                            mounth++;             
                        }           
                    }           
                    else if((year%4==0)&&(year%100!=0))
                    {             
                        if(day>29)
                        {              
                            day=1;               
                            mounth++;             
                        }           
                    }           
                    else           
                    {             
                        if(day>28)
                        {               
                                day=1;               
                                mounth++;             
                        }           
                    }         
                }         
                else         
                {           
                    if(day>30)           
                    {             
                        day=1;             
                        mounth++;           
                    }         
                }       
            }     
        }   
    }    

    display.clearDisplay(); 
    delay(1000); 
    Serial.print(mounth);   
    Serial.print("/");   
    Serial.print(day);   
    Serial.print("/");   
    Serial.print(year);   
    Serial.println();      

    display.setCursor(0,0);   
    display.print(" ");   
    display.print(mounth);   
    display.print("/");   
    display.print(day);   
    display.print("/");   
    display.print(year);
     
    display.display();

    Serial.print(hour);   
    Serial.print(":");   
    Serial.print(minute);   
    Serial.print(":");   
    Serial.print(second);   
    Serial.print("\n");   
    Serial.println();  
        
    display.setCursor(0,16);   
    display.print(" ");   
    display.print(hour);   
    display.print(":");   
    display.print(minute);  
    display.print("\n -");  
    display.print(second); 
    display.print("-");
    display.display();

    char tecla;
    tecla = Serial.read();
    if(tecla=='1')
    {
        digitalWrite(2,LOW);
    }
    if(tecla=='2')
    {
        digitalWrite(2, HIGH);
    }
}

【问题讨论】:

  • 请选择缩进样式,edit 您的来源,并坚持下去。目前它很难阅读。

标签: c++ c arduino-uno lcd adafruit


【解决方案1】:

setTextSize() 设置“放大率”,而不是直接设置文本大小,因此setTextSize(1) 使用默认文本大小,setTextSize(2) 会将文本大小加倍。

Adafruit_GFX.cpp:

/*!
    @brief   Set text 'magnification' size. Each increase in s makes 1 pixel
   that much bigger.
    @param  s  Desired text size. 1 is default 6x8, 2 is 12x16, 3 is 18x24, etc
*/
void Adafruit_GFX::setTextSize(uint8_t s) { setTextSize(s, s); }

setTextSize() 更改字符像素在显示器上的打印方式(或者在 Adafruit_PCD8544 的情况下打印到内部缓冲区),当使用像 print() 这样的函数时,我们可以更改每个 print 的文本大小调用例如

Adafruit_PCD8544 screen = Adafruit_PCD8544(3,4,5,6,7);
//... begin(), setContrast(), etc...
screen.setTextSize(1);
screen.println("Regular");
screen.setTextSize(2);
screen.println("Double");
screen.setTextSize(1);
screen.println("Regular again");
screen.display();

这将以默认文本大小显示字符串“Regular”和“Regular Again”,字符串“Double”将默认文本大小加倍。

在您的代码中:

display.setCursor(0,16);   
display.print(" ");   
display.print(hour);   
display.print(":");   
display.print(minute);
display.print("\n -");  
display.print(second); 
display.print("-");
display.display();

应该是这样的:

display.setCursor(0,16);   
display.print(" ");   
display.print(hour);   
display.print(":");   
display.print(minute);
display.setTextSize(1); //Change to smaller text size for seconds since you already use size 2 by default
display.print("\n -");  
display.print(second); 
display.print("-");
display.setTextSize(2) //Change back to larger text size for other values
display.display();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多