Arduino Tarifleri #23 – millis , micros , delay , delayMicroseconds
Hatırlarsanız 19. bölümde fonksiyonlara başlarken demiştik ki “aslında fonksiyonları bu zamana kadar pek çok kez kullandık” . İşte bu videoda o pek çok kullandığımız başka bir fonksiyon olan delay fonksiyonundan ve onun arkadaşlarında bahsedeceğiz.
delay bildiğiniz üzere bekleme yapmak, gecikme vermek için kullanılan bir kod. Kendisi milisaniye mertebesinde çalışır. Yani 1 saniyelik bir bekleme için, delay(1000) kullanmamız gerekir. Bu kod yeteri kadar iyi bir gecikme imkanı sunsa da, hassas bekleme işlemlerinde veya algoritmamızı durdurmadan yapmamız gereken bir takım işlemlerde geri kalmaktadır. İşte bu videoda bu 2 konuya değinerek basit çözümler ile delayMicroseconds, millis ve micros fonksiyonlarını öğreneceğiz.
Dilerseniz lafı uzatmadan hemen videoya geçelim. Herkese iyi çalışmalar, kendinize iyi bakın, hoşça kalın 🙂
MALZEMELER
Bu içerik için gerekli olan tüm malzemeleri www.robo90.com üzerinden güvenle satın alabilirsiniz.
- Arduino UNO R3 – SMD Klon (CH340 Çipli) – USB Kablo Hediyeli
- Kırmızı Led – 5mm – 10 Adet
- 220R Direnç Paketi – 1/4 W – 10 Adet
- Elektronik Breadboard – Büyük Boy – 830 Pin
- Jumper Kablo
DEVRE ŞEMASI
ARDUINO KODU
Aslında videoda pek çok kod yazıldı ama hepsi basit basit teori anlatan kodlar idi. O yüzden hepsini verip burayı gereksiz yere karıştırmayıp, içlerinden sadece en uzun olanını ekledim arkadaşlar.
Etiketler
3 Yorum
Bir yanıt yazın Yanıtı iptal et
Daha fazla sonuç göster
Merhaba hocam,
Arduino microseconds en az kaç olmalı, nette araştırma yaptım ama denk gelemedim yada gözden kaçırdım.
433 MHz dalga için delay microseconds kaç olmalı?
0.0034 yapıyorum lakin Arduino kafasına göre sonuçlar çıkarıyor seri ekrana.
Arduino sonarda kullandığınız ultrasonik ekipmanlar yerine 433 MHz wifi anteni kullanmak istiyorum ama süreyi bir türlü ayarlayamadım.
Merhaba,
Arduıno ile bir ledi 10 saniye yakıp sonra söndürmek istiyorum eğer 10 saniye içerisinde ikinci butona basarsam direkt sönmesini istiyorum basmazsam 1 kez yanıp 10 saniye sonra sönmesi lazım yazdığım kodda isteğimi yapıyor ancak bir kez 10 saniye yanıp söndüğü zaman butona tekrar basarsam 10 saniye gecikmeli başlıyor yanmaya gecikmenin nedenini bulamadım yardımcı olursanız sevinirim
mesela led söndükten 2 saniye sonra buton 1 e basarsam 8 saniye sonra led tekrar yanıyor 10 saniye sonra sönüyor 7 nci saniyede basarsam 3 saniye bekleyip ledi yakıyor 10 saniye sonra söndürüyor ama söndükten 11. saniye sonra basarsam butona bekleme yapmadan led 10 saniye yanıp sönüyor …
#define buton_1 3 // 1 numarali butonun takilacagi dijital pin.
#define buton_2 4 // 2 numarali butonun takilacagi dijital pin.
#define led 8 // led in baglanacagi dijital pin
int Zaman_1=1000;// acik kalma zamani
int Zaman_2=5000;// kapali kalma zamani
unsigned long oncekiZaman=0;//ilk islem yapılana kadar gecen zaman
unsigned long yeniZaman;//islemcinin gercek zamanı
bool led_durum=0;// led in acık yada kapalı olmasını belirleyen degisken
bool secim=1;// butonların hangisine basildigini belirleyen degisken
void setup() {
Serial.begin(9600);
pinMode(led,OUTPUT);
pinMode(buton_1,INPUT);
pinMode(buton_2,INPUT);
digitalWrite(led,HIGH);
}
void loop() {
yeniZaman=millis();//islemci zamanı kaydediliyor
if(digitalRead(buton_1)==HIGH){//buton1 e basilip basilmadigi kontrol ediliyor
secim=0;
}
if(digitalRead(buton_2)==HIGH){//buton2 e basilip basilmadigi kontrol ediliyor
secim=1;
}
switch(secim){
case 0:
yeniZaman = millis();
/* bir önceki turdan itibaren 1000 milisaniye geçmiş mi
yani yeniZaman ile eskiZaman farkı 1000den büyük mü */
if(yeniZaman-oncekiZaman > 10000){
if(led_durum == 1){
digitalWrite(8,LOW);
secim=1;
}else{
digitalWrite(8,HIGH);
led_durum = 1;
}
/* Eski zaman değeri yeni zaman değeri ile güncelleniyor */
oncekiZaman = yeniZaman;
}
break;
case 1:
led_durum = LOW;
digitalWrite(led, led_durum);
break;
}
}
merhaba arduino da delay yerine millis kullanmak istiyorum ama programım çalışmıyor sensor okuduktan 5 saniye sonra durmasını istiyorum kodumu yolluyorum i yardımcı olabilir misiniz ?
#define in2 6 // in2 pinini 6. pine tanımladık.
#define ledk 10
#define ledy 11
#define leds 8
int sayac=0;
int butonDegisim = 0; // butonDegisim degişkenini tanımladık
int butonDegisimi2 = 0; // butonDegisimi2 degişkenini tanımladık
int sensorDegeri = 1; // sensorDegeri degişkenini tanımladık
void setup() { // ana kurulum
pinMode (buton1, INPUT); // 3. pin giriş oldu
pinMode(buton2, INPUT); // 4. pin giriş oldu
pinMode(enA, OUTPUT); // enA pini çıkış oldu
pinMode(in1, OUTPUT); // in1 pini çıkış oldu
pinMode(in2, OUTPUT); // in2 pini çıkış oldu
pinMode(ledk, OUTPUT);
pinMode(ledy, OUTPUT);
pinMode(leds, OUTPUT);
Serial.begin(9600); // seri haberleşme aç
}
void loop() { // sonsuz döngü
if (digitalRead(buton1) == HIGH) { // okunan deger 1 ise
butonDegisim = 1; // butonDegisim degiskenini 1 yap
delay(10); // 10 milisaniye bekle
}
while (butonDegisim == 1) { // butonDegisim degiskeni 1 oldugunda
int pot = analogRead(A1); // potansiyometre degerini oku
int pwmoutput = map(pot, 0 , 1023 , 0 , 255); // potansiyometre degerini 0 ile 255 arası ayarla
analogWrite(enA, pwmoutput); //L298N’e PWM sinyal yolla
digitalWrite(ledy, HIGH);
digitalWrite(ledk, LOW);
digitalWrite(leds, LOW);
delay(10);
digitalWrite(in1, LOW);// L298N sürücü devresinde ki in1 girişine 0V verilecek
digitalWrite(in2, HIGH); // L298N sürücü devresinde ki in2 girişine +5V verilecek
int sensor = analogRead(A0); // sensor degerini oku
Serial.println(sensorDegeri); // sensorDegerini görüntüle
if ((sensor) == 0) { //sensorde okunan deger 1 ise
sensorDegeri <= 0; //sensorDegeri degiskenini '<=0' yap
delay(10); // 50 milisaniye bekle
digitalWrite(enA, pwmoutput); //L298N'e PWM sinyal yolla
digitalWrite(leds, HIGH);
digitalWrite(ledy, LOW);
digitalWrite(in1, HIGH); //L298N sürücü devresinde ki in1 girişine +5V verilecek
digitalWrite(in2, LOW); //L298N sürücü devresinde ki in2 girişine 0V verilecek
butonDegisim = 0; // butonDegisim degiskenini 0 yap
delay(5000);
digitalWrite(leds, LOW);
digitalWrite(ledy, LOW);
digitalWrite(ledk, HIGH);
digitalWrite(enA, LOW); //L298N sürücü devresinde ki enable girişine 0V verilecek
}
if (digitalRead(buton2) == HIGH) { // okunan buton 1 ise
butonDegisim = 0; // butonDegisim degiskenini 0 yap
digitalWrite(leds, LOW);
digitalWrite(ledy, LOW);
(digitalWrite(ledk, HIGH));
digitalWrite(enA, LOW); //L298N sürücü devresinde ki enable girişine 0V verilecek
}
}
}