Ardunio 2 analog kontrol

 
Birincisi burada millis() kullanman gerekmiyor. Millis paralel işlem gerektiren yerlerde kullanılır. Çalar saat gibi düşün sırası gelen çalışır bir işlem diğerini bekletmez. Senin yapmak istediğin zaten sıralı şekilde çalışıyor çok küçük delayler diğer işlemleri etkilemez. İkincisi MCP4725 kitaplığını neden kullanmıyorsun kendin i2c kurmaya çalışıyorsun? Burada test yazılımı var içinde MCP.writeDAC() isimli bir fonksiyon var oraya parametre olarak
Kod:
MCP.writeDAC(819*5)
yapacaksın bu kadar basit.
 
tesekürler tesekürler
MİLLİS kullanımı bende dünmemiştim millislede yapsam nasıl olurdu yapabilirmiyim mesala ama kucuk bır bolumun millis kodunu paylassaydınız ögrenirdim yanlısımı gorurdum amac ögrenmek aynı zamanda


mcp 4725 kütüphanesini inceledim cok kütüphaneler inceliyoruz okuyorum ama analayacak cözecek kafa olması icin zizin gibi cokk ugrascaz daha ???

1 senedir bukadar anlamam mucize elektronik anolog bilgime borcluyum

!!!!!!! profosyonel ANOLOG SİSTEMLER radar , sonar, RF ,, ultrasonic ,ses , muzik ,amplifier crt ,tüp tüplü yukseltecler yardıma ihtiyacınız olursa yada yonlendırebılırsınız sitede okuyan tüm kişiler icin yardım ederim
20yıldır bu işlerdeyim ardunya acıl yazılım ihtiyac olmasa yazılama bulasmıcaktım gec kaldıkmı
 
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.
 
tesekurler bişiy daha ögreneyim bu süslü komut parantezleri cok cesitli uygulamaları var garip ama hepsi döngü parentez icinde calısıyor cok makale ve videolar izlıyorum ama senin anlatımınla yorumunla en basit bir anlatımı nasıl calısıyor bu parentez
bu yuzden hep ardunio derleme hatası veriyor


örnegın benim anladıgım

Kod:
void loop ()     



{

 



kodlar buraya yazımalı    ama  ic ice  her  calısan  bolum ıcın bu parentez var   neden tek degıl   





}
 
Bu C dilinin sözdizimidir. Her işaretin derleyici için bir anlamı vardır. Küme parantezi fonksiyonları,döngüleri,dizileri ve yapıların içinde ne olduğunu belirlemek için kullanılır yani kısacası hangi elemanın nereye ait olduğunu gösterir. o olmadan derleyici o komutun nereye ait olduğunu bilemez. yukarıdaki örneği ele alırsak:

C++:
void setup(){                                            //Fonksiyon parantezi
    pinMode(led,OUTPUT);
    pinMode(led2,OUTPUT);
}
void loop(){                                            //Fonksiyon parantezi
    unsigned long simdiki_zaman = millis();
  
    if(simdiki_zaman - led1_zaman >= led1_bekleme){        //Döngü parantezi
        digitalWrite(led,!digitalRead(led));
        led1_zaman = simdiki_zaman;
    }
    if(simdiki_zaman - led2_zaman >= led2_bekleme){
        digitalWrite(led2,!digitalRead(led2));
        led2_zaman = simdiki_zaman;
    }
}

Fonksiyon parantezinin içindeki komutlar o fonksiyon çağırıldığı zaman çalışır. Döngü parantezinin içindekiler ise o döngü gerçekleşirse çalışır.

Bunları bilmek bu işin temelidir. Youtube da birsürü video var izleyip öğrenebilirsin.
 
hic delay yada millis gecikme kullanmadan calısırrmı yukardakı kodlar yada genel gecıkme olmassa hızlı calısırmı kodlar normalde calıstırdım sorun olmadı simdilik
kolay gelsın
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…