Arduino ile Dijital Termometre

Arduino ile Dijital Termometre

Sümer Yamaner' Alıntı:
Gol mü bu şimdi? Bariz ofsayt... Hepi topu bi LED mi yakıyor helici takımı??? :D :p :D :p

Şeyy bir de... Usulümüz şu, hatırlatayım. DIY başlığı altına konu açıp neler yaptığımızı anlatıyoruz. Hani belki farkında diilsindir dedim de! :lol:

Abicim bütün projeleri yaptınız, bana bi led kaldı, onu da yaptım bitti :D Ayrıca taçtan ofsayt olmaz :D Bi de bizim helilerde çok fazla bişey icat edemiyoruz, miks işlerini falan zaten ünite yapıyor, biliyosun gelişmiş aletler, biz onlara ayak uydurmaya çalışıyoruz :p :lol: Termometreyi de en son bıraktığım gibi duruyor, bişeyler yapınca ilk iş burdan anlatıcam.
 
Arduino ile Dijital Termometre

Hahahaaa... Dur akşam yemeğimi yiyeyim de Akıllı Kill Switch'in en son sürümünün fotoğraflarını paylaşacağım...
 
Arduino ile Dijital Termometre

Led Gösterge kodunu biraz düzenledim. Sadece "#define DIGITS 8" ve "int gPin[DIGITS]" satırları düzenlenerek aşağıdaki kod, istenilen kadar basamaklı Led Gösterge için kullanılabilir. Ama Uno ve türevlerinin donanımsal olarak en fazla 9 basamaklı(çok zorlanırsa 12) Led gösterge sürebileceğini ve LM35 gibi bir sensör kullanıldığında bir tane de analog pin harcamak gerekeceğini dikkate almak gerekiyor tabii...
Kod:
//         A
//      _______
//     |       |
//   F |   G   | B
//     |_______|
//     |       |
//   E |       | C
//     |_______|  o  H
//
//         D

// 8 DIGIT LED DISPLAY
#define DIGITS 8
// SINK PINS FOR 8 DIGITS
int gPin[DIGITS] = {15,16,17,18,19,10,11,12};        //A1,A2,A3,A4,A5,D10,D11,D12
int digi[DIGITS];
int LM35_PIN = A0;
int DTime = 4;
long sNum;

void d_PREP() {
    PORTD = PORTD & B00000011; // 2 - 7 0'lanıyor,  0,1(TX/RX) değişmiyor
    PORTB = PORTB & B11111100; // 8 - 9 0'lanıyor, diğerleri değişmiyor
}

void setup(){
    DDRD = DDRD | B11111100; // 2 - 7 output,  0,1(TX/RX) değişmiyor
    DDRB = DDRB | B00000011; // 8 - 9 output, diğerleri değişmiyor
    d_PREP();                // 2 - 7 0'lanıyor, 8 - 9 0'lanıyor, 0,1(TX/RX) ve diğer pinler değişmiyot
    for (int i=0;i<DIGITS;i++){
        pinMode(gPin[i], OUTPUT);
    }
    Serial.begin(9600);
}

void loop(){
    sNum = (analogRead(LM35_PIN) * 0.48828125);
    digiCalc(sNum);
    for (int i=0;i<DIGITS;i++){
        int j = (DIGITS - 1) - i;
        digitalWrite(gPin[i], LOW);
        pickNumber(digi[j]);
        digitalWrite(gPin[i], HIGH);
        delay(DTime);
        digitalWrite(gPin[i], LOW);
    }
}

void digiCalc(long num){
    // Serial.println(num);
    for (int i=0;i<DIGITS;i++){
        int j = (DIGITS - 1) - i;
        long k = 0.5 + pow(10,j);
        digi[j] = num / k;
        num = num - (digi[j] * k);
    }
}

void d_dot() {
    // DIGIT --------FEDCBA00
    PORTD = PORTD | B00000000;
    // DIGIT --------000000HG
    PORTB = PORTB | B00000010;
}

void d_zero(boolean bDot){
    // DIGIT --------FEDCBA00
    PORTD = PORTD | B11111100;
    // DIGIT --------000000HG
    PORTB = PORTB | B00000000;
    if(bDot) d_dot();
}

void d_one(boolean bDot){
    // DIGIT --------FEDCBA00
    PORTD = PORTD | B00011000;
    // DIGIT --------000000HG
    PORTB = PORTB | B00000000;
    if(bDot) d_dot();
}

void d_two(boolean bDot){
    // DIGIT --------FEDCBA00
    PORTD = PORTD | B01101100;
    // DIGIT --------000000HG
    PORTB = PORTB | B00000001;
    if(bDot) d_dot();
}

void d_three(boolean bDot){
    // DIGIT --------FEDCBA00
    PORTD = PORTD | B00111100;
    // DIGIT --------000000HG
    PORTB = PORTB | B00000001;
    if(bDot) d_dot();
}

void d_four(boolean bDot){
    // DIGIT --------FEDCBA00
    PORTD = PORTD | B10011000;
    // DIGIT --------000000HG
    PORTB = PORTB | B00000001;
    if(bDot) d_dot();
}

void d_five(boolean bDot){
    // DIGIT --------FEDCBA00
    PORTD = PORTD | B10110100;
    // DIGIT --------000000HG
    PORTB = PORTB | B00000001;
    if(bDot) d_dot();
}

void d_six(boolean bDot){
    // DIGIT --------FEDCBA00
    PORTD = PORTD | B01111100;
    // DIGIT --------000000HG
    PORTB = PORTB | B00000001;
    if(bDot) d_dot();
}

void d_seven(boolean bDot){
    // DIGIT --------FEDCBA00
    PORTD = PORTD | B00011100;
    // DIGIT --------000000HG
    PORTB = PORTB | B00000000;
    if(bDot) d_dot();
}

void d_eight(boolean bDot){
    // DIGIT --------FEDCBA00
    PORTD = PORTD | B11111100;
    // DIGIT --------000000HG
    PORTB = PORTB | B00000001;
    if(bDot) d_dot();
}

void d_nine(boolean bDot){
    // DIGIT --------FEDCBA00
    PORTD = PORTD | B10111100;
    // DIGIT --------000000HG
    PORTB = PORTB | B00000001;
    if(bDot) d_dot();
}

void pickNumber(char x){
    d_PREP();
    switch(x){
        case 0: d_zero(0); break;
        case 1: d_one(0); break;
        case 2: d_two(0); break;
        case 3: d_three(0); break;
        case 4: d_four(0); break;
        case 5: d_five(0); break;
        case 6: d_six(0); break;
        case 7: d_seven(0); break;
        case 8: d_eight(0); break;
        case 9: d_nine(0); break;
        default: d_dot(); break;
    }
}
 
Arduino ile Dijital Termometre

Olmamış, otur! Sıfır! Nerede "kütüphaneler"?! :p

Şu satır
"int gPin[DIGITS] = {15,16,17,18,19,11,12}; //A1,A2,A3,A4,A5,D10,D11,D12"

Şöyle olmayacak mı?
"int gPin[DIGITS] = {15,16,17,18,19,10,11,12}; //A1,A2,A3,A4,A5,D10,D11,D12"

Şurada...
"pinMode(gPin, OUTPUT);
digitalWrite(gPin, LOW);"


pinMode komutu sonrası ilgili porta "L" yazmak gerekli mi? Zaten "L" olmuyor mu?

Gerisini henüz anlamadım! :D :D :D
 
Arduino ile Dijital Termometre

Sümer Yamaner' Alıntı:
Olmamış, otur! Sıfır! Nerede "kütüphaneler"?! :p

Şu satır
"int gPin[DIGITS] = {15,16,17,18,19,11,12}; //A1,A2,A3,A4,A5,D10,D11,D12"

Şöyle olmayacak mı?
"int gPin[DIGITS] = {15,16,17,18,19,10,11,12}; //A1,A2,A3,A4,A5,D10,D11,D12"

Şurada...
"pinMode(gPin, OUTPUT);
digitalWrite(gPin, LOW);"


pinMode komutu sonrası ilgili porta "L" yazmak gerekli mi? Zaten "L" olmuyor mu?

Gerisini henüz anlamadım! :D :D :D
:D :D . Tüm yanlışlarımı yakalamışsın Sümer abi ...

Kod, PORTX, Array ve Analog pinler ve BitShifting arasında çok fazla gidip geldiği için, okurken daha rahat anlaşılsın diye "L" yaptım. Bir de, dijital pinlerde pinMode Output olduğu zaman, "L" olduğuna emin olsam da analog pinleri dijital olarak kullandığım zaman L olup olmadığını birebir olarak denemediğim için o satırı ekledim.
 
Arduino ile Dijital Termometre

Bunu ben yapsam yok efendim kod şu kadar uzamış, şu kadar satır olmuş diye fırça yerdim! :p :D Analog pinler digital pinlerden farklı değil merak etme. :)