avatar_furkan41

mikroC char to string ?

Başlatan furkan41, 05 Nisan 2018, 11:51:26

furkan41

Arkadaşlar 877a ile mikroC de uart haberleşmesi yaptırıyorum şimdi picten "FURKAN START ALDIM BASLAYALIM " Yazısı geliyor programda char olarak değişken tanımladım uarttan geleni oraya yükleyip ordan tekrar uarta göndermesini istedim şimdi Uarttan Merhaba yazıyorum geri bana sayı geliyor benim stringe cevirmem lazım ama nasıl yacapacağız ?.

ete

Bilgisayar dilinde string diye bir şey yok aslında . String elemanlarıda bir sayı gurubudur. Farkı şudur harflerin ASCII karşılıkları rakam olarak kullanılır.  Yoksa sistem yinede sayılarla çalışıyor.
A harfinin 65 desimal değere sahip olduğunu ve diğer harflerin sırası ile 66-67 gibi rakamlar aldığına bakarak sende gelen rakamları bir kontrol et istersen.
Yada varsa bir çevirim komutu onunla çevir.

Ete

furkan41

Hocam peki selam yazıyorum sadece A harfine karşılık gelen kodu gösteriyor ya yani SELAM dersek son 4. harfi alıyor.  Bir array oluşuturup icine atmaya calışıyorum ama bu seferde bu değişkeni array yapamassından hata veriyor. bir hocamda gelen datayı lcd ekrana yazdır lcd ekrandanda oku dedi stringe uğraşmassın dedi. zaten benim'de yapmak istediğim şey aslında serial calışan şeylerin kontrolleri üstüne biraz kendimi eğitmem gsm modülü ile telefona benzer birşey yapmıştım gecen sene arduinoda MikroC de daha güzel birşey yapmak istiyorum.

Ama tabi şuan konud telefon değil sadece serialde geliştireyim iyice kendimi.  Librarylerine baktım ordada aynı şeyi yapmışlar ama dediğime karşılık gelen birşey yok yazılımcı arkadaşım replace komutunu kullan dedi.  ilk kez duydum bu komutuda

mg1980

Size MikroC' den bir örnek yazayım. Benzeterek deneyin:
Bu char türü nümerik değerleri karakter dizisine çeviriyor.
char sayi=456;
char txt[4];
...
ByteToStr(sayi,txt);
Lcd_Out(1,1,txt);

Sizin olayınız doğrudan şu şekilde olmuyor mu ?

char txt[]="selam";
....
LCD_Out(2,1,txt);

furkan41

ShortToStr komutu ile yapmaya calışıyorum ama değişkenin geleceği arraya hata veriyor böyle değer atayamassın gibisinden.


char ham_yazi[5];    //CHAR TİPİNDE , ham_yazi adında değişken oluşturduk.
unsigned char uart_rd;      //stringe dönecek olan değişken.

void main() {
TRISD=0X00;     //PORTD CIKIŞ OLARAK AYARLANDI.
PORTD=0X00;     //PORTD YE RESET ATTIK VE İCİNDE KALAN DEĞERLERİ SİLDİK.

  ADCON0 = 0;                     // analog pinler dijital olarak ayarlandı
  ADCON1 = 0;                     // analog pinler dijital olarak ayarlandı

  UART1_Init(9600);               // uart haberleşme hızı baudrate 9600
  Delay_ms(100);                  // 100ms hazırlanması icin bekle.




  while (1) {                     // Sonsuz Döngü başlangıcı
    if (UART1_Data_Ready()) {     // eğer Data gelmiş ise ?
    ham_yazi = UART1_Read();     // gelen datayı oku ve ham_yazi değişkenin icine at.
      ShortToStr(ham_yazi , uart_rd);
      UART1_Write(uart_rd);
    }


  }        //sonsuz döngü bitişi
}         //ana program bitişi

furkan41

Alıntı yapılan: furkan41 - 07 Nisan 2018, 15:00:25
ShortToStr komutu ile yapmaya calışıyorum ama değişkenin geleceği arraya hata veriyor böyle değer atayamassın gibisinden.


char ham_yazi[5];    //CHAR TİPİNDE , ham_yazi adında değişken oluşturduk.
unsigned char uart_rd;      //stringe dönecek olan değişken.

void main() {
TRISD=0X00;     //PORTD CIKIŞ OLARAK AYARLANDI.
PORTD=0X00;     //PORTD YE RESET ATTIK VE İCİNDE KALAN DEĞERLERİ SİLDİK.

  ADCON0 = 0;                     // analog pinler dijital olarak ayarlandı
  ADCON1 = 0;                     // analog pinler dijital olarak ayarlandı

  UART1_Init(9600);               // uart haberleşme hızı baudrate 9600
  Delay_ms(100);                  // 100ms hazırlanması icin bekle.




  while (1) {                     // Sonsuz Döngü başlangıcı
    if (UART1_Data_Ready()) {     // eğer Data gelmiş ise ?
    ham_yazi = UART1_Read();     // gelen datayı oku ve ham_yazi değişkenin icine at.
      ShortToStr(ham_yazi , uart_rd);
      UART1_Write(uart_rd);
    }


  }        //sonsuz döngü bitişi
}         //ana program bitişi
[code]
[/quote]

furkan41


mg1980

"UARTx_Read_Text " ve "UARTx_Write_Text" komutlarını biraz inceleyin. Kaynak "MikroC ile ARM Programlama" sh.316-318..Belki işinize yarar.

Sizin programınızdaki   "ShortToStr(ham_yazi , uart_rd); " bölümünü çıkarınca nasıl oluyor....

furkan41

61 ,41 gibi sayılar geliyor ama tek tek geliyor Hani FURKAN yazsam icinde bir harfin rakam karşılığını alıp gönderiyor.

ete

Bu durumda yollayan kimse onun karekterleri teker teker yolladığına karar vermiyormusunuz. Mutlaka karekter dizisi tamamlandıktan sonra ilave bir sonlandırıcı yolluyordur. 10 veya 13 gibi. Bu sizin ip ucunuz olmalı. Teker teker alıp sonlandırıcıya kadar geleni diziye atmnaız ve sonlandırıcı ile birlikte işlemi sonlandırmanız gerekir.
Ete

furkan41

Hatayı cözdüm Deneme kartının üstündeki Ledleri iptal edince . Otomatik olarak gelen datayı alabildi meğerse gelen datayı alamıyormuş led yüzünden .

Bende deneme kartı diye o ledlerin olduğu yer bir transistör falan koymuşlardır kesin diye irdelemiyordum ama en kolay sorunlar hep başa bela oluyor kod'da zerre kadar hata yokmuş.

Calışmaya devam sevgiler saygılar...

Powered by EzPortal