Önceki bölümler için bkz:
Akıllı Termostat AHMT v10.-2 W ve Ultrasonic HC SR04
Isı, hareket ve zamana duyarlı termostat yapalım: AHMT
Eksi 1)
Son yazının sonunda, netteki örneklerin çoğunun aksine, int yerine const byte kullandığımızdan bahsetmiştik. Şimdi o kısmı bi tık açmaya çalışalım.
malum bir bit; 0 ya da 1 olabilir.
Atıyorum iki adet biti farklı kombinasyonlarda kullanarak 4 farklı şeyi, mesela bazı harfleri de kast/ifade edebiliriz.
00 = Mavi = A = 45
01 = Gökyüzü = B = 90
10 = Bulut = C = 135
11 = Güneş = D = 180
elbetteki bu 4 seçenek yeterli değil.
büyük harf, küçük harf, rakam, nokta, virgül derken ortalama bir kitap yazmak için bizi ancak 7-“8″ hane paklar.
yoksa? Evet BYTE.
Byte ile elimizde 8 hane var: |0|1|0|1|0|1|0|1|
Modüler aritmatikten hatırlayacak olursak, ikilik tabanda sekiz basamaklı yazabileceğimiz en büyük sayı 11111111 bunu 10’luk tabana çevirelim bakalım neymiş: 127 126 125 124 123 122 121 120
128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255
Demek ki.. 8 bit = 1 BYTE içine 255’e kadar olan sayıları tanımlayabiliyorum..
Peki 1 byte değil de 2 byte içine yazabileceğimiz en büyük sayı ne acaba?
1 + 2 + 4 + 8 + 16 + 32 + 64 +128 + 256 + 512 + 1024 + 2048 + 4096 + 8192 + 16384 = 32768
Hani o sağda solda Ezbere gördüğümüz rakam buradan geliyormuş demek ki 😉
1 BYTE içindeki her bit’in değeri 1 olsa, bununla yazabileceğimiz en büyük sayı:
|1|1|1|1|1|1|1|1| yani Onluk tabanda 255
2 BYTE içindeki her bit’in değeri 1 olsa, bununla yazabileceğimiz en büyük sayı:
|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1| yani Onluk tabanda 32768
Geçen yazıdan bir alıntı yaparak Arduino kodlarımıza dönelim;
int sesver = 3;
yerine
cost byte sesver =3;
kullanmış olduğumuza dikkat edin 😉
const byte sesver = 3, sesal = 4;
int sure;
float mesafe;
Tercih etmediğimiz ilk haliyle kullanmış olursak;
int sesver = 3; dersek SRAM’de 2 Byte yer tutacak demek. Ki örneğin mevcut Arduino Nano’daki SRAM‘in toplam kapasitesi 2 KB.
Şu an için Hiç bir sorun olmaz elbet ama kodlar ve değişkenler arttıkça Metrobüsteki “*Bir* adım ilerler misiniz” meselesine dönerse olay, bu bilgi aklınızda olsun 😉
Bu arada 32768’den daha büyük sayılar da lazım olacak. Böyle durumlarda negatif işaretli -32768 gibi sayılara yer ayırmaktansa, pozitif tarafta 65536’da kadar gidilebilir.
Bunun için unsigned int kullanmak faydalı olabilir.
Yok bu da kesmedi ise; unsigned long ile çitayı 4,294,967,295 kadar çıkarabilirsiniz 😉
Böyle büyük sayılarla işim olmaz demeyin. Diyelim bi yerde (atıyorum, çok hızlı ve arda ada gelen mesajların karışmaması için) Mili Saniye saydırmanız gerekti;
byte j ile tanımlanmış j‘nin değeri, neredeyse başlamadan 255’e ulaşacak ve oradan Geri saymaya başlayacağı için curcuna çıkacaktır.
Benzer şekilde int k ile tanımlanmış k‘nın değeri, 33. saniyeden itibaren Halil Sezai + Linet moduna geçecektir 😉
Müziğe dönüşmek!
6 thoughts on “Akıllı Termostat AHMT v10.-1: Byte ve Int ile tanımlama”