if(numara < 10){Başa bir sıfır ekle + numara};

Başlatan veliusta, 06 Ağustos 2014, 05:36:41

veliusta

Saat devresi yapıyorum. LCD ye tek sayıdan 2 basakmalı sayıya geçerken sorun yaratıyor.


if(second < 10){
  Serial.print('0');
  }
  Serial.print(second,DEC);
 
myGLCD.print(String(second,DEC) , 200, 60 );


Serial.print i sallayarak yaptım. Doğru şekil nasıl yapılır? LCD için nasıl birşey yapmalıyım?



mesaj birleştirme:: 06 Ağustos 2014, 19:40:35

+ Burada birisi yapmış;

void displayDigits( int value , int x , int y ) {
  String strValue = (value<10 ? "0" + String(value): String(value));
  myGLCD.print(strValue , x, y );
}

void loop()
{
    myGLCD.setColor(0, 0, 255);
    myGLCD.print("Arduino", 0, 16, 0);
    myGLCD.print("Arduino", 319, 0, 90);
    myGLCD.print("Arduino", 319, 239, 180);
    myGLCD.print("Arduino", 0, 239, 270);
 
    myGLCD.setColor( 255 , 0 , 0 );
    myGLCD.print("MERHABA DUNYA!", 50 , 155 , 0);
    
    myGLCD.setFont(SevenSegNumFont);
    myGLCD.setColor(0, 255, 0);
    myGLCD.print(String(hours) , 90, 90 );
    myGLCD.print(String(minutes) , 170 , 90);
 
    while( true ) {
    count++;
    
      if( count%10000==0 ) {
        if (--minutes<0) {
          minutes=60;
          if(--hours<0) {
            hours=24;
          }
        }

        displayDigits( hours , 90, 90);
        displayDigits( minutes, 170 , 90);
      }
    }
}

mir_as82

Hocam printf in formatlama özelliğini kullanarak yaparsin.
Eğer sayi 10 dan küçükse xxxxx şekilde formatla.
Eğer safi 10 dan büyükse yyyyy sekilde formatla.
Veya iki kosuldada 2 basamak gösterecek şekilde formatla. Printf formatlama olayi senin anahtar sözcüğün.

veliusta


erpay

mir_as82'nin demek istediği 0-9 arasındaki sayıları yazdıracaksan bunu uygun gördüğün 2 karakterlik yerin birler basamağı kısmına yazdır, yani adresini o şekilde ver. 9'dan büyük sayıları yazdıracakken de direk onlar basamağı adresini verip o şekilde yazdırırsın.
_ _ _
_ _ 6
_ 1 7
_ 2 3

Yukarıda 3 karakterlik bir yer var mesala ilkinde direk son basamağın adresini veriyosun yazdırırken, ama ikincisinde bir önceki adresi vermen gerekiyor.

mehmet

Basılacak sayıları bir dizi içerisinde saklayınız. Sayı
öncesinden boşluk ya da "0" olması durumunu ayarlayınız;
001 veya __1 hangisini tercih edecekseniz dizinin o degerine
"0" veya boşluk(ASCII 32<0x20>) karakterlerini giriniz.
Değerleri ekranda gösterirken de dizi elemanlarını
bastırabilirsiniz. "printf" fonksiyonu kullanışlı olmakla birlikte
hafızada çok yer kaplamaktadır...

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

mir_as82

Evet mehmet in dediği doğru bu tür fonksiyonların özel bir adi vardi. Yani bu tür fonksiyonlar her cagirildiklarinda ona karsilik gelen compile edilmiş kod hafizaya yükleniyor.

veliusta

Programlama bilgim zayıf bu yüzden dedikleriniz anlamadım. Ama istediğim şeyi yukarıda paylaştığım örnek ileyapabildim.

void displayDigits( int value , int x , int y ) {
  String strValue = (value<10 ? "0" + String(value): String(value));
  myGLCD.print(strValue , x, y );
}


void displayDigits( int value , int x , int y ) {
  String strValue = (if(value<10){ "0" + String(value)}
  else{
      String(value)); }
  myGLCD.print(strValue , x, y );
}


Anlamadığım şey yukarıda yaptığım şey aynısı değil mi? Neden derleme hatası veriyor?