Ö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

Görsel

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!