String değer ve yazı birleştirme

Başlatan veliusta, 13 Mayıs 2015, 03:02:36

veliusta

#include <Wire.h>
#include <BMP180.h>
BMP180 barometer;
int indicatorLed = 13; 
float seaLevelPressure = 101325;

void setup()
{
  Serial.begin(9600);
  Wire.begin();
  pinMode(indicatorLed, OUTPUT);
  barometer = BMP180();
  if(barometer.EnsureConnected())
  {
    Serial.println("Connected to BMP180.");
    digitalWrite(indicatorLed, HIGH);

    barometer.SoftReset();
    barometer.Initialize();
  }
  else
  { 
    Serial.println("No sensor found.");
    digitalWrite(indicatorLed, LOW);
  }
}

void loop()
{
  if(barometer.IsConnected)
  {
    long currentPressure = barometer.GetPressure();

    Serial.print("Pressure: ");
    Serial.print(currentPressure);
    Serial.print(" Pa");
    
    float altitude = barometer.GetAltitude(seaLevelPressure);
    
    Serial.print("\tAltitude: ");
    Serial.print(altitude);
    Serial.print(" m");
    
    float currentTemperature = barometer.GetTemperature();

    Serial.print("\tTemperature: ");
    Serial.print(currentTemperature);
    Serial.write(176);
    Serial.println("C");
    delay(1000);
  }
}


Merhaba, Kolay gelsin arkadaşlar

Yukarıdaki Arduino BMP180 basınç sensörün kodları var.
Ben basınç değerini LCD ekrana yazdırıyorum.  LCD ekranın kordinatlarını tek tek belirleyip yazıyorum. "Basınç:" + Pressure + "Pa"
Şimdi buradaki Pressure değeri çok yüksek olursa değer Pa'nın üzerine biniyor.
Bu yüzden bende stringle bunları birleştirmek istiyorum.
3-4 kere Serial.print kullanak yerine bir tane kullamak istiyorum. (Siz serial.printte gösterin LCD'ye uyarlarım ben.)

Serial.print(yazdir);  dediğimde Serial Monitörde böyle yazmasını istiyorum. BASINC: 100000 Pa

Nasıl yapabiliriz?

Gökhan BEKEN

char buffer[50];
sprintf(buffer, "sayi1: %d, sayi2=%d", veri1,veri2);
Serial.println(buffer);
//%d değilde %02d yazarsanız sadece 2 hanelik kısmı yazar, diğerlerini kale almaz.
Özel mesaj okumuyorum, lütfen göndermeyin.

veliusta

Teşekkür edirim Gökhan Abi.
Alttaki kodu denemek amaçlı yazdım çalıştı.
Neden buffer[50]; ? 49 olsa ne olur?
Birde sayıya nokta yokmak istiyorum. 100000 ise 100.000 - 1000 ise 1.000 gibi. Bunu nasıl yapabiliriz?

unsigned int i = 0;
unsigned int y = 5;
 
void setup(){
  Serial.begin(9600);
}
 
void loop(){
  char buffer[50];
  sprintf(buffer, "1.SAYI=%d 2.SAYI=%d", i++, y++);
  Serial.println(buffer);
  delay(5);
}

Gökhan BEKEN

Alıntı yapılan: veliusta - 14 Mayıs 2015, 21:52:46
Neden buffer[50]; ? 49 olsa ne olur?
Eğer dizinin içine ekleyeceğin karakter sayısı, dizinin boyutundan fazla ise, sınırı geçip, ram'deki başka işler için ayrılmış yerin üzerine yazar.
C dili düşük seviyeli bir dildir, kullanıcı ile işlemci arasında ara katman yok, sen yanlış birşey de yazsan dediğini yapar ve programın yanlış çalışmasını sağlar.


Alıntı yapılan: veliusta - 14 Mayıs 2015, 21:52:46
Birde sayıya nokta yokmak istiyorum. 100000 ise 100.000 - 1000 ise 1.000 gibi. Bunu nasıl yapabiliriz?
Basamaklara ayırmak için şu sayfayı inceleyebilirsin:
http://stackoverflow.com/questions/1449805/how-to-format-a-number-from-1123456789-to-1-123-456-789-in-c
Özel mesaj okumuyorum, lütfen göndermeyin.