Arduino UNO millis() komutu

Zembla

Hectopat
Katılım
25 Temmuz 2020
Mesajlar
620
Çözümler
13
Arkadaşlar merhaba.
Altta attığım kodda görebileceğiniz üzere 3 numaralı Pin'e bağlı LED'i yakıyorum. Burada problem yok LED yanıyor. Millis fonksiyonu ile belirlediğim sürede If'de çalışıyor içindeki Serial.println() millis'in süresini yazdırıyor. Fakat if'in içerisine girmesine rağmen "digitalWrite(3, LOW);" komutu led'i söndürmüyor. Amacım zaten arduino başladığı andan itibaren yanan led'i belli aralıklarla söndürüp yakmak ama led sönmüyor. Nasıl çözebilirim?

C++:
unsigned long simdikiZaman,oncekiZaman=0;

void setup()
{
 Serial.begin(9600);
 pinMode(3, OUTPUT);//3 numaralı pin'den çıkışı alıyorum
}

void loop()
{
 simdikiZaman = millis(); //millis bilgilerini simdikiZaman adlı değişkene aktarıyorum.
 digitalWrite(3, HIGH); // 3 numaralı pin'e bağlı led'i burada yakıyorum.
 if(simdikiZaman-oncekiZaman>=1000){ // millis sayacı 1000'e eşit veya büyük olduğunda if çalışıyor.
  Serial.println(simdikiZaman); //simdikiZaman değişkenindeki veriler seri monitöre geliyor.
  digitalWrite(3, LOW); //Fakat burası çalışmıyor led yanmaya devam ediyor.
  //oncekiZaman=simdikiZaman;
 }
}
 
Son düzenleme:
Arkadaşlar merhaba.
Altta attığım kodda görebileceğiniz üzere 3 numaralı Pin'e bağlı LED'i yakıyorum. Burada problem yok LED yanıyor. Millis fonksiyonu ile belirlediğim sürede If'de çalışıyor içindeki Serial.println() millis'in süresini yazdırıyor. Fakat if'in içerisine girmesine rağmen "digitalWrite(3, LOW);" komutu led'i söndürmüyor. Amacım zaten arduino başladığı andan itibaren yanan led'i belli aralıklarla söndürüp yakmak ama led sönmüyor. Nasıl çözebilirim?

C++:
unsigned long simdikiZaman,oncekiZaman=0;

void setup()
{
 Serial.begin(9600);
 pinMode(3, OUTPUT);
}

void loop()
{
 simdikiZaman = millis();
 digitalWrite(3, HIGH);
 if(simdikiZaman-oncekiZaman>=1000){
 Serial.println(simdikiZaman);
 digitalWrite(3, LOW);
 //oncekiZaman=simdikiZaman;
 }
}
Kodda ki amacı tam anlayamadım. Direk delay komutu ile yakıp söndürmeyi niye tercih etmediniz?
 
Kodda ki amacı tam anlayamadım. Direk delay komutu ile yakıp söndürmeyi niye tercih etmediniz?
Yorum satırı olarak düzenledim tekrar.Delay ile yaptım kod çalışıyor. Fakat delay ile değil millis ile yapmam lazım. Amaç yanan led'i if'de belirlenen süre aralığında söndürüp yakmak.
 
Yorum satırı olarak düzenledim tekrar. Delay ile değil millis ile yapmam lazım. Amaç yanan led'i if'de belirlenen süre aralığında söndürüp yakmak.
Çok çok özür dilerim hala tam anlayamadım ama birde şöyle dener misiniz?

Kod:
unsigned long simdikiZaman,oncekiZaman=0;

void setup()
{
 Serial.begin(9600);
 pinMode(3, OUTPUT);//3 numaralı pin'den çıkışı alıyorum
}

void loop()
{
 simdikiZaman = millis(); //millis bilgilerini simdikiZaman adlı değişkene aktarıyorum.
 digitalWrite(3, HIGH); // 3 numaralı pin'e bağlı led'i burada yakıyorum.
 if(simdikiZaman-oncekiZaman>=1000){ // millis sayacı 1000'e eşit veya büyük olduğunda if çalışıyor.
  Serial.println(simdikiZaman); //simdikiZaman değişkenindeki veriler seri monitöre geliyor.
 digitalWrite(3, LOW); //Burada digital write yı bi geri aldım.Belki sorununuzu çözer.
  //oncekiZaman=simdikiZaman;
 }
}
 
Çok çok özür dilerim hala tam anlayamadım ama birde şöyle dener misiniz?

Kod:
unsigned long simdikiZaman,oncekiZaman=0;

void setup()
{
 Serial.begin(9600);
 pinMode(3, OUTPUT);//3 numaralı pin'den çıkışı alıyorum
}

void loop()
{
 simdikiZaman = millis(); //millis bilgilerini simdikiZaman adlı değişkene aktarıyorum.
 digitalWrite(3, HIGH); // 3 numaralı pin'e bağlı led'i burada yakıyorum.
 if(simdikiZaman-oncekiZaman>=1000){ // millis sayacı 1000'e eşit veya büyük olduğunda if çalışıyor.
  Serial.println(simdikiZaman); //simdikiZaman değişkenindeki veriler seri monitöre geliyor.
 digitalWrite(3, LOW); //Burada digital write yı bi geri aldım.Belki sorununuzu çözer.
  //oncekiZaman=simdikiZaman;
 }
}
Yok led sönmüyor. Ama o kodun if içerisinde çalışması lazım birde python'da ki gibi girintiye göre değil süslü parantezin kapsam alanına göre olduğu için girinti çok önemli değil. Onu denemiştim daha önce. :)
 
Son düzenleme:

Yeni konular

Geri
Yukarı