Arkadaşlar merhaba , uygulama kitinden butona basıldığında x değerini birer birer arttıran bir program yaptım (butona basıldımı x=x+1) bu değeri lcd ye basabiliyorum fakat uartta problem yaşıyorum. Bu işin mantığı nedir.Int bir değer uarta veri gönderirken nasıl bir yol izlenir. Uarta string ifade veri gönderirken problem yok.
UART üzerinden her seferinde bir basamak göndermeniz gerekiyor.
Sayı göndermeye çalıştığızda olmaz çünkü bu değeri ASCII olarak ekranda görüntüleyemezsiniz.
Mesela 123 diye bir sayıyı UART üzerinden göndermek istiyorsunuz;
Önce bu sayının basamaklarını bulmalısınız;
sayi = 123;
birler = (sayi % 10) +48;
onlar = (sayi /10) %10) + 48;
yuzler = (sayi /100) +48;
sonra da uart_send gibi bir fonksiyon ile bunları ASCII karakter olarak UART üzerinden göndereceksiniz.
Bir diziye atıp for döngüsü ile de gönderebilirsiniz.
uart_send(yuzler);
uart_send(onlar);
uart_send(birler);
Kolay Gelsin.
Printf kullan. printf("integer sayi = %u",degisken), gibi kullanabilirsin. Kullandığın derleyicide retarget olayını kullanman gerekebilir.
Örnek retarget şu şekilde kullanıyorum bendeki mcu cm3 derleyici keil,
int fputc(int ch, FILE *f)
{ while ( !(USART1->SR & USART_SR_TXE) );
USART1->DR = (uint16_t)(ch & 0x01FF);
while ( !(USART1->SR & USART_FLAG_TC) );
return (ch);
}
int fgetc(FILE *f)
{
while (!(USART1->SR & USART_FLAG_RXNE));
return ((uint16_t)(USART1->DR & (uint16_t)0x01FF));
}
yanıtlar için teşekkürler peki int i =356 i yi string char="356" şekline çevirezmiyiz.
sprintf ile çevirirsin
mcan arkadaşım ben den hızlı davramışın sprint ile çevirdim çözüme ulaştım ,int to string yapıyorum ,istediğim oldu lakin kulağı tersten tutmak değil dimi bu iş ?
Alıntı yapılan: armsistem - 11 Mart 2012, 15:58:07
mcan arkadaşım ben den hızlı davramışın sprint ile çevirdim çözüme ulaştım ,int to string yapıyorum ,istediğim oldu lakin kulağı tersten tutmak değil dimi bu iş ?
Neden ki?Bence bu en kolay yol.
Sağol yamak hocam , bu programlama işini mbed tarzı hazır kütüphane vs. şeklinde de yapabilirdim ben biraz daha temele inmek istiyorum daha farklı mcu programlarken zorluk çekmemek için.
int data nasıl string'e çeviriliyor?
itoa fonksiyonu ile dönüştürebilirsin
hocam bunu yaptım ama stringi inte dönüştüremedim fonksiyonu denediğim zaman uart bağlantısı kesiliyor
bir "debug log" un varsa örneğin elindeki görmek istediğin rakam 74 diyelim veya klavyeden giriş yapacaksın bu durumda aşağıdaki gibi kullanabilirsin
x= atoi("değişken");
dbglog("x: %d",x);
burada klavyeden x e ne girdiysen dbglog mekanizmanda onu görürsün.
benim amacım şu ben uart kullanan rf modülden string bilgiyi göndereceğim alıcı bu string bilgiyi integer yapacak. atoi fonksiyonuna keilin internet sitesinden baktım denedim yanlış oldu isis te deneme yaparken virtual terminal kullandım atoi fonksiyonunu denediğimde haberleşme olmadı programdan kaldırınca düzeldi.
Aldığın karakterlerden 48 çıkar ve bir int değişkene yükle integer a dönüştürmüş olursun. Örnek:
#include <stdio.h>
int main(void)
{
int i;
char a;
a=getchar();
i=a-48;
printf("%d",i);
}
çok teşekkürler.