Hiçbirşey için geç kalmadın ben 36 yaşındayım hergün programlamayla alakalı videolar seyrediyorum yeni bişeyler öğreniyorum. Önemli olan yaptığın işten zevk almak. Eğer zorlamayla yapılırsa ne kadar zaman geçerse geçsin ilerleme çok zor. millis için küçük bir örnek vereyim mesela bir ledi 355 mili saniye aralıklarla yakmak istersek millis kullanmadan aşağıdaki gibi yakabiliriz.
C++:
const int led = 13;
void setup(){
pinMode(led,OUTPUT);
}
void loop(){
digitalWrite(led,!digitalRead(led));
delay(355);
}
peki ikinci bire led eklersek ve bunu da 653 ms aralıklarla yakmak istersek nasıl yapacağız. Eğer delay fonksiyonu kullanırsa aşağıdaki gibi.
C++:
const int led = 13;
const int led2 = 12;
void setup(){
pinMode(led,OUTPUT);
pinMode(led2,OUTPUT);
}
void loop(){
digitalWrite(led,!digitalRead(led));
delay(355);
digitalWrite(led2,!digitalRead(led2));
delay(653);
}
ledler kendi süresini değil diğer ledin süresini de bekleyecektir yani ikinci led 653 yerine 653+355 ms de bir durum değiştirecektir ama aşağıdaki gibi millis kullanarak ledleri sadece kendi zamanını bekleyerek yakıp söndürebiliriz.
C++:
const int led = 13;
const int led2 = 12;
unsigned long led1_zaman = 0;
unsigned long led2_zaman = 0;
const unsigned int led1_bekleme = 355;
const unsigned int led1_bekleme = 653;
void setup(){
pinMode(led,OUTPUT);
pinMode(led2,OUTPUT);
}
void loop(){
unsigned long simdiki_zaman = millis();
if(simdiki_zaman - led1_zaman >= led1_bekleme){
digitalWrite(led,!digitalRead(led));
led1_zaman = simdiki_zaman;
}
if(simdiki_zaman - led2_zaman >= led2_bekleme){
digitalWrite(led2,!digitalRead(led2));
led2_zaman = simdiki_zaman;
}
}
millis() işlemci çalışmaya başladığı andan itibaren geçen zamanı ms olarak verir. Biz o zamanı istediğimiz herhangi bir zamanla karşılaştırarak işlem yaptırırız. Esasen bekleme değil karşılaştırma mantığı vardır. Böylelikle her led kendi zamanı gelince yanıp sönecektir. Mesajı işyerinden yazıyorum dolayısıyla derleme şansım yok sözdizimi hataları olabilir.