Değişkenin ismini başka bir değişken ile atama

Gokrtl

Gökhan Kartal (TeknoDay)
Staff member
Katılım
27 Şubat 2019
Mesajlar
11,210
Bir değişken oluşturmak istiyorum. Değişkenin adı "basamak" olacak. ama bu değişkenin adının duruma göre değişmesi gerek.
Yani int basamak; oluştururken "basamak" değişkeninin ismini başka bir değişkenden atayarak değiştirmek istiyorum.
Bunun mantığı nasıl olur?
 
Bir değişken oluşturmak istiyorum. Değişkenin adı "basamak" olacak. ama bu değişkenin adının duruma göre değişmesi gerek.
Yani int basamak; oluştururken "basamak" değişkeninin ismini başka bir değişkenden atayarak değiştirmek istiyorum.
Bunun mantığı nasıl olur?

O dediğin şey C/C++ gibi doğrudan binary makina diline dönüşen programlama dillerinde mümkün değil.

ama bir pointer tanımlarsın, pointer'e de değişkenin adresini koyarsın. Sonra aynı pointer'a başka bir değişkenin adresini koyabilirsin.

C++:
int a = 3;
int b = 5;

void loop()
{
    int* ptr;
   
    ptr = &a;
    *ptr = 10;  // burada global a degiskenine 10 yazdik

    ptr = &b;
    *ptr = 20;  // burada global b degiskenine 20 yazdik
}
 
PC'de
VB.Net 2010 express edition da

If gelen = 240 Then ' hex'F0'
Label61.ForeColor = Color.Red
End If


If Label61.ForeColor = Color.Red Then
If gelen = 254 Then ' hex'FE'
Label71.ForeColor = Color.Cyan
End If
End If
Burada MCU' dan gelen Hex'F0' değeri ile Label1 in rengi kırmızı olur, alttaki satırda ise Label 1 ise eylem yapılır 2 adet If iç içedir

MCU 'da ise ben, "MOVLW" komutu ile değişkeni W atıyorum oradan da istediğim gibi alıp kullanıyor veya başka bir değişken ile karşılaştırıyorum. Veya W değişkenini istediğimiz bir yere atayabiliyoruz.
 
O dediğin şey C/C++ gibi doğrudan binary makina diline dönüşen programlama dillerinde mümkün değil.

ama bir pointer tanımlarsın, pointer'e de değişkenin adresini koyarsın. Sonra aynı pointer'a başka bir değişkenin adresini koyabilirsin.

C++:
int a = 3;
int b = 5;

void loop()
{
    int* ptr;
  
    ptr = &a;
    *ptr = 10;  // burada global a degiskenine 10 yazdik

    ptr = &b;
    *ptr = 20;  // burada global b degiskenine 20 yazdik
}
Yok yanlış akıl yürüttüm sanırım. Bu şekilde her yere pointer yazmam gerek. Böyle olmaz.
Amaç şu;
Kürsör 1.basamaktaysa encoder ile 1.basamağın değerini değiştirecedğim, kürsör 2.basamaktaysa ikinci basamağın değerin değiştireceğim.
Bunun için fonksiyon içine basamakBir, basamakIki gibi değişken göndermeliyim.
Derdimi de tam yazamadımki yav. Zaten ne yapmak istediğimi anlatabilsem çözümüde bulurum herhalde :)

C++:
void encoder(String basamak){
            if (dt == HIGH) {
              int* pointer;
              pointer = &basamak;
              *pointer++;
              if (*pointer <= ifSay && *pointer >= 0) {
                voltaj_akim = basamakBir * 10.0 + basamakIki * 1.0 + basamakUc * 0.1 + basamakDort * 0.01;
                Serial.print(*pointer);
                Serial.println(" : sag");
              }
 
PC'de
VB.Net 2010 express edition da

If gelen = 240 Then ' hex'F0'
Label61.ForeColor = Color.Red
End If


If Label61.ForeColor = Color.Red Then
If gelen = 254 Then ' hex'FE'
Label71.ForeColor = Color.Cyan
End If
End If
Burada MCU' dan gelen Hex'F0' değeri ile Label1 in rengi kırmızı olur, alttaki satırda ise Label 1 ise eylem yapılır 2 adet If iç içedir

MCU 'da ise ben, "MOVLW" komutu ile değişkeni W atıyorum oradan da istediğim gibi alıp kullanıyor veya başka bir değişken ile karşılaştırıyorum. Veya W değişkenini istediğimiz bir yere atayabiliyoruz.
Bu benim için biraz ileri seviye oldu. Anlamadım hiç bir şey :)
 
voltaj_akim = basamakBir * 10.0 + basamakIki * 1.0 + basamakUc * 0.1 + basamakDort * 0.01;
Yani şunun içindeki değişkenleri kürsöre göre değiştirmek istiyorum.
Kürsör 1.basamaktaysa "basamakBir" değişkeninin değerini artırıp azaltmak istiyorum. diğerleri sabit kalacak.
 
Burada bir sıkıntı var, siz kürsörün ekran pozisyonuna göre MCU' ya hükmetmek istiyorsunuz ki bunun için PC' nin kürsör pozisyonunu MCU' ya bildirmesi yani data yollaması lazım.
 
Burada bir sıkıntı var, siz kürsörün ekran pozisyonuna göre MCU' ya hükmetmek istiyorsunuz ki bunun için PC' nin kürsör pozisyonunu MCU' ya bildirmesi yani data yollaması lazım.
Olayı karmaşıklaştırmayalım. Şöyle özetleyeyim.
Arduino IDE'sinde programlama yapıp, arduinoya yükleyeceğim.
Arduinoya bağlı encoderi çevirdiğimde, yine arduinoya bağlı ekrandaki değerler değişecek. Hangi değerin değişeceğini de kürsör belirleyecek.
 
Aslında çok da zor bir durum değil PC' den mause ile basit bir yazılım ile MCU'yu istediğimiz gibi yönlendirebiliriz.
Pardon ben Arduino hakkında pek bilgi sahibi değilim. Ben PC ve MCU arası haberleşme için yazmıştım.
 
Kürsör 1.basamaktaysa encoder ile 1.basamağın değerini değiştirecedğim, kürsör 2.basamaktaysa ikinci basamağın değerin değiştireceğim.

Bunun için array kullanman lazım

C++:
int kursor; // 0 .. 3 arasinda deger aliyor
int basamaklar[4];

void loop()
{
    basamaklar[kursor] = 10;
}
 
Bunun için array kullanman lazım

C++:
int kursor; // 0 .. 3 arasinda deger aliyor
int basamaklar[4];

void loop()
{
    basamaklar[kursor] = 10;
}
Tabi ya...
Dizi değişkeni diye birşey vardı. :)
Bu array'ı da zamanında öğrenememiştim doğru dürüst. Bu gün oturturum artık kafamda.
 
Son düzenleme:
@Gokrtl pack ve union diye bir olay var. Bir değişkenin içindeki bayt yada bitlere harici olarak erişebilmeni sağlıyor. Birçok programlama dilinde union yapısı mevcut. İsmi farklı olabilir ama dediğin iş union ile yapılıyor.

union nedir?

Yukardaki linkte anlatıyor.
Anladığım kadarıyla sen 10.85V çıkış istediğinde bunu 4 basamak olarak her değeri ayrı ayrı değiştirebilmek istiyorsun. Burada 4 değişkenli union ile olayı çözebilirsin. Gerçi aynı iş array tanımlayarak da yapılabilir ama kod kısmı biraz daha uzar.
 

Forum istatistikleri

Konular
5,789
Mesajlar
99,023
Üyeler
2,464
Son üye
s4met

Son kaynaklar

Son profil mesajları

cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Kesici/Spindle hızı hesaplamak için SpreadSheet UDF'leri kullanın, hesap makinesi çok eski kalan bir yöntem :)
Dr. Bülent Başaran,
Elektrik ve Elektronik Mühendisi
Yonga Tasarım Özdevinimcisi
Üç güzel "çocuk" babası
Ortahisar/Ürgüp/Konya/Ankara/Pittsburgh/San Francisco/Atlanta/Alaçatı/Taşucu...

Back
Top