Yapay Zeka Destek
-
Merhaba dostlar,
şu programı chatgpt veya benzeri bir zekaya yaptırabilecek var mı acep, ben çok yazdım free bitti o yüzden.
program şu
herkese teşekkürler
şifre hane girişleri portb.0, 1, 2, 3
buzzer porta.3
alarm aktif ledi porta.2
kontak porta.0
röle portb.7
alarm pasifken doğru şifre girilirse buzzer high olsun ve 5 saniye sonra alarm aktif olsun kontak kontrolü yapılsın
alarm aktifken şifre doğru girilirse buzzer 3 kere ötsün ve alarm pasif olsun
alarm aktifken hep kontak kontrolü yapılsın kontak low olursa buzzer high olsun doğru şifre girilirse alarm ve buzzer pasif olsun, yanlış şifre girilirse portb.7 high olsun
şifrenin her hanesi girildiğinde 1 kez buzzer ötsün
EDIT : program adı pic basic pro
-
hocam chatgpt.com zaten ücretsiz. yazdıklarını direkt kopyalayıp yazdığımda aşağıdaki çıktıyı verdi.
// Pin Tanımlamaları #define SHIFRE_PIN1 PORTBbits.RB0 // Şifre 1. hane #define SHIFRE_PIN2 PORTBbits.RB1 // Şifre 2. hane #define SHIFRE_PIN3 PORTBbits.RB2 // Şifre 3. hane #define SHIFRE_PIN4 PORTBbits.RB3 // Şifre 4. hane #define BUZZER PORTAbits.RA3 // Buzzer çıkışı #define ALARM_LED PORTAbits.RA2 // Alarm aktif LED çıkışı #define KONTAK PORTAbits.RA0 // Kontak girişi #define ROLE PORTBbits.RB7 // Röle çıkışı // Sabitler #define DOGRU_SIFRE 1234 // Örnek doğru şifre // Değişkenler int sifre = 0; // Girilen şifre int alarmDurumu = 0; // 0 -> Pasif, 1 -> Aktif void setup() { // Portları giriş ve çıkış olarak ayarla TRISA = 0b00000001; // RA0 (KONTAK) giriş, diğer RA pinleri çıkış TRISB = 0b00001111; // RB0-RB3 (Şifre haneleri) giriş, RB7 (Röle) çıkış TRISC = 0; // Diğer portlar çıkış } void loop() { // Şifre girişi yapılırken her bir pin okunur sifre = 0; sifre = sifre * 10 + (SHIFRE_PIN1 ? 1 : 0); buzzerCal(); delay(100); sifre = sifre * 10 + (SHIFRE_PIN2 ? 1 : 0); buzzerCal(); delay(100); sifre = sifre * 10 + (SHIFRE_PIN3 ? 1 : 0); buzzerCal(); delay(100); sifre = sifre * 10 + (SHIFRE_PIN4 ? 1 : 0); buzzerCal(); delay(100); // Alarm pasifken doğru şifre girildiğinde işlem if (alarmDurumu == 0 && sifre == DOGRU_SIFRE) { BUZZER = 1; // Buzzer'ı çalıştır delay(5000); // 5 saniye bekle ALARM_LED = 1; // Alarm aktif LED'ini yak alarmDurumu = 1; // Alarm aktif kontrol(); // Kontak kontrolünü başlat } // Alarm aktifken doğru şifre girildiğinde işlem if (alarmDurumu == 1 && sifre == DOGRU_SIFRE) { for (int i = 0; i < 3; i++) { BUZZER = 1; // Buzzer'ı çalıştır delay(300); // 300ms süreyle çalıştır BUZZER = 0; delay(300); } ALARM_LED = 0; // Alarm LED'ini kapat alarmDurumu = 0; // Alarm pasif hale gelir } // Alarm aktifken kontak kontrolü if (alarmDurumu == 1) { kontrol(); // Kontak durumu kontrol et } } void buzzerCal() { BUZZER = 1; // Buzzer'ı çalıştır delay(200); // 200ms süreyle çalıştır BUZZER = 0; // Buzzer'ı kapat } void kontrol() { if (KONTAK == 0) { BUZZER = 1; // Kontak low olduğunda buzzer'ı çalıştır } else { BUZZER = 0; // Kontak yüksekse buzzer'ı kapat } // Kontak low olduğunda şifre kontrolü yapılır if (KONTAK == 0 && sifre == DOGRU_SIFRE) { ALARM_LED = 0; // Alarm pasif BUZZER = 0; // Buzzer kapalı ROLE = 0; // Röle kapalı } // Şifre yanlışsa röle aktif edilir if (sifre != DOGRU_SIFRE) { ROLE = 1; // Röleyi aktif et (Alarm tetikleniyor) } }
-
Shakespeare bunu yazdı
hocam chatgpt.com zaten ücretsiz. yazdıklarını direkt kopyalayıp yazdığımda aşağıdaki çıktıyı verdi.
// Pin Tanımlamaları #define SHIFRE_PIN1 PORTBbits.RB0 // Şifre 1. hane #define SHIFRE_PIN2 PORTBbits.RB1 // Şifre 2. hane #define SHIFRE_PIN3 PORTBbits.RB2 // Şifre 3. hane #define SHIFRE_PIN4 PORTBbits.RB3 // Şifre 4. hane #define BUZZER PORTAbits.RA3 // Buzzer çıkışı #define ALARM_LED PORTAbits.RA2 // Alarm aktif LED çıkışı #define KONTAK PORTAbits.RA0 // Kontak girişi #define ROLE PORTBbits.RB7 // Röle çıkışı // Sabitler #define DOGRU_SIFRE 1234 // Örnek doğru şifre // Değişkenler int sifre = 0; // Girilen şifre int alarmDurumu = 0; // 0 -> Pasif, 1 -> Aktif void setup() { // Portları giriş ve çıkış olarak ayarla TRISA = 0b00000001; // RA0 (KONTAK) giriş, diğer RA pinleri çıkış TRISB = 0b00001111; // RB0-RB3 (Şifre haneleri) giriş, RB7 (Röle) çıkış TRISC = 0; // Diğer portlar çıkış } void loop() { // Şifre girişi yapılırken her bir pin okunur sifre = 0; sifre = sifre * 10 + (SHIFRE_PIN1 ? 1 : 0); buzzerCal(); delay(100); sifre = sifre * 10 + (SHIFRE_PIN2 ? 1 : 0); buzzerCal(); delay(100); sifre = sifre * 10 + (SHIFRE_PIN3 ? 1 : 0); buzzerCal(); delay(100); sifre = sifre * 10 + (SHIFRE_PIN4 ? 1 : 0); buzzerCal(); delay(100); // Alarm pasifken doğru şifre girildiğinde işlem if (alarmDurumu == 0 && sifre == DOGRU_SIFRE) { BUZZER = 1; // Buzzer'ı çalıştır delay(5000); // 5 saniye bekle ALARM_LED = 1; // Alarm aktif LED'ini yak alarmDurumu = 1; // Alarm aktif kontrol(); // Kontak kontrolünü başlat } // Alarm aktifken doğru şifre girildiğinde işlem if (alarmDurumu == 1 && sifre == DOGRU_SIFRE) { for (int i = 0; i < 3; i++) { BUZZER = 1; // Buzzer'ı çalıştır delay(300); // 300ms süreyle çalıştır BUZZER = 0; delay(300); } ALARM_LED = 0; // Alarm LED'ini kapat alarmDurumu = 0; // Alarm pasif hale gelir } // Alarm aktifken kontak kontrolü if (alarmDurumu == 1) { kontrol(); // Kontak durumu kontrol et } } void buzzerCal() { BUZZER = 1; // Buzzer'ı çalıştır delay(200); // 200ms süreyle çalıştır BUZZER = 0; // Buzzer'ı kapat } void kontrol() { if (KONTAK == 0) { BUZZER = 1; // Kontak low olduğunda buzzer'ı çalıştır } else { BUZZER = 0; // Kontak yüksekse buzzer'ı kapat } // Kontak low olduğunda şifre kontrolü yapılır if (KONTAK == 0 && sifre == DOGRU_SIFRE) { ALARM_LED = 0; // Alarm pasif BUZZER = 0; // Buzzer kapalı ROLE = 0; // Röle kapalı } // Şifre yanlışsa röle aktif edilir if (sifre != DOGRU_SIFRE) { ROLE = 1; // Röleyi aktif et (Alarm tetikleniyor) } }
hocam pic basic pro ile yaptırabilir misin söylemeyi unutmuşum
-
34sileli bunu yazdıShakespeare bunu yazdı
hocam chatgpt.com zaten ücretsiz. yazdıklarını direkt kopyalayıp yazdığımda aşağıdaki çıktıyı verdi.
// Pin Tanımlamaları #define SHIFRE_PIN1 PORTBbits.RB0 // Şifre 1. hane #define SHIFRE_PIN2 PORTBbits.RB1 // Şifre 2. hane #define SHIFRE_PIN3 PORTBbits.RB2 // Şifre 3. hane #define SHIFRE_PIN4 PORTBbits.RB3 // Şifre 4. hane #define BUZZER PORTAbits.RA3 // Buzzer çıkışı #define ALARM_LED PORTAbits.RA2 // Alarm aktif LED çıkışı #define KONTAK PORTAbits.RA0 // Kontak girişi #define ROLE PORTBbits.RB7 // Röle çıkışı // Sabitler #define DOGRU_SIFRE 1234 // Örnek doğru şifre // Değişkenler int sifre = 0; // Girilen şifre int alarmDurumu = 0; // 0 -> Pasif, 1 -> Aktif void setup() { // Portları giriş ve çıkış olarak ayarla TRISA = 0b00000001; // RA0 (KONTAK) giriş, diğer RA pinleri çıkış TRISB = 0b00001111; // RB0-RB3 (Şifre haneleri) giriş, RB7 (Röle) çıkış TRISC = 0; // Diğer portlar çıkış } void loop() { // Şifre girişi yapılırken her bir pin okunur sifre = 0; sifre = sifre * 10 + (SHIFRE_PIN1 ? 1 : 0); buzzerCal(); delay(100); sifre = sifre * 10 + (SHIFRE_PIN2 ? 1 : 0); buzzerCal(); delay(100); sifre = sifre * 10 + (SHIFRE_PIN3 ? 1 : 0); buzzerCal(); delay(100); sifre = sifre * 10 + (SHIFRE_PIN4 ? 1 : 0); buzzerCal(); delay(100); // Alarm pasifken doğru şifre girildiğinde işlem if (alarmDurumu == 0 && sifre == DOGRU_SIFRE) { BUZZER = 1; // Buzzer'ı çalıştır delay(5000); // 5 saniye bekle ALARM_LED = 1; // Alarm aktif LED'ini yak alarmDurumu = 1; // Alarm aktif kontrol(); // Kontak kontrolünü başlat } // Alarm aktifken doğru şifre girildiğinde işlem if (alarmDurumu == 1 && sifre == DOGRU_SIFRE) { for (int i = 0; i < 3; i++) { BUZZER = 1; // Buzzer'ı çalıştır delay(300); // 300ms süreyle çalıştır BUZZER = 0; delay(300); } ALARM_LED = 0; // Alarm LED'ini kapat alarmDurumu = 0; // Alarm pasif hale gelir } // Alarm aktifken kontak kontrolü if (alarmDurumu == 1) { kontrol(); // Kontak durumu kontrol et } } void buzzerCal() { BUZZER = 1; // Buzzer'ı çalıştır delay(200); // 200ms süreyle çalıştır BUZZER = 0; // Buzzer'ı kapat } void kontrol() { if (KONTAK == 0) { BUZZER = 1; // Kontak low olduğunda buzzer'ı çalıştır } else { BUZZER = 0; // Kontak yüksekse buzzer'ı kapat } // Kontak low olduğunda şifre kontrolü yapılır if (KONTAK == 0 && sifre == DOGRU_SIFRE) { ALARM_LED = 0; // Alarm pasif BUZZER = 0; // Buzzer kapalı ROLE = 0; // Röle kapalı } // Şifre yanlışsa röle aktif edilir if (sifre != DOGRU_SIFRE) { ROLE = 1; // Röleyi aktif et (Alarm tetikleniyor) } }
hocam pic basic pro ile yaptırabilir misin söylemeyi unutmuşum
bu kodu alıp "pic basic pro" ya göre düzenlemesini istesen chatgpt'den.
çünkü ücretsiz.
-
NoktaliVirgul bunu yazdı34sileli bunu yazdıShakespeare bunu yazdı
hocam chatgpt.com zaten ücretsiz. yazdıklarını direkt kopyalayıp yazdığımda aşağıdaki çıktıyı verdi.
// Pin Tanımlamaları #define SHIFRE_PIN1 PORTBbits.RB0 // Şifre 1. hane #define SHIFRE_PIN2 PORTBbits.RB1 // Şifre 2. hane #define SHIFRE_PIN3 PORTBbits.RB2 // Şifre 3. hane #define SHIFRE_PIN4 PORTBbits.RB3 // Şifre 4. hane #define BUZZER PORTAbits.RA3 // Buzzer çıkışı #define ALARM_LED PORTAbits.RA2 // Alarm aktif LED çıkışı #define KONTAK PORTAbits.RA0 // Kontak girişi #define ROLE PORTBbits.RB7 // Röle çıkışı // Sabitler #define DOGRU_SIFRE 1234 // Örnek doğru şifre // Değişkenler int sifre = 0; // Girilen şifre int alarmDurumu = 0; // 0 -> Pasif, 1 -> Aktif void setup() { // Portları giriş ve çıkış olarak ayarla TRISA = 0b00000001; // RA0 (KONTAK) giriş, diğer RA pinleri çıkış TRISB = 0b00001111; // RB0-RB3 (Şifre haneleri) giriş, RB7 (Röle) çıkış TRISC = 0; // Diğer portlar çıkış } void loop() { // Şifre girişi yapılırken her bir pin okunur sifre = 0; sifre = sifre * 10 + (SHIFRE_PIN1 ? 1 : 0); buzzerCal(); delay(100); sifre = sifre * 10 + (SHIFRE_PIN2 ? 1 : 0); buzzerCal(); delay(100); sifre = sifre * 10 + (SHIFRE_PIN3 ? 1 : 0); buzzerCal(); delay(100); sifre = sifre * 10 + (SHIFRE_PIN4 ? 1 : 0); buzzerCal(); delay(100); // Alarm pasifken doğru şifre girildiğinde işlem if (alarmDurumu == 0 && sifre == DOGRU_SIFRE) { BUZZER = 1; // Buzzer'ı çalıştır delay(5000); // 5 saniye bekle ALARM_LED = 1; // Alarm aktif LED'ini yak alarmDurumu = 1; // Alarm aktif kontrol(); // Kontak kontrolünü başlat } // Alarm aktifken doğru şifre girildiğinde işlem if (alarmDurumu == 1 && sifre == DOGRU_SIFRE) { for (int i = 0; i < 3; i++) { BUZZER = 1; // Buzzer'ı çalıştır delay(300); // 300ms süreyle çalıştır BUZZER = 0; delay(300); } ALARM_LED = 0; // Alarm LED'ini kapat alarmDurumu = 0; // Alarm pasif hale gelir } // Alarm aktifken kontak kontrolü if (alarmDurumu == 1) { kontrol(); // Kontak durumu kontrol et } } void buzzerCal() { BUZZER = 1; // Buzzer'ı çalıştır delay(200); // 200ms süreyle çalıştır BUZZER = 0; // Buzzer'ı kapat } void kontrol() { if (KONTAK == 0) { BUZZER = 1; // Kontak low olduğunda buzzer'ı çalıştır } else { BUZZER = 0; // Kontak yüksekse buzzer'ı kapat } // Kontak low olduğunda şifre kontrolü yapılır if (KONTAK == 0 && sifre == DOGRU_SIFRE) { ALARM_LED = 0; // Alarm pasif BUZZER = 0; // Buzzer kapalı ROLE = 0; // Röle kapalı } // Şifre yanlışsa röle aktif edilir if (sifre != DOGRU_SIFRE) { ROLE = 1; // Röleyi aktif et (Alarm tetikleniyor) } }
hocam pic basic pro ile yaptırabilir misin söylemeyi unutmuşum
bu kodu alıp "pic basic pro" ya göre düzenlemesini istesen chatgpt'den.
çünkü ücretsiz.
yok hocam düzenleyemiyor, denediğimde hata veriyor
-
bu chatgpt ye bir kod veriyorsun şuna şunu ekle gibisinden ekliyor ama verdiğin kodda ki başka bir işlevi yok ediyor. sil baştan tekrardan anlatmak zorunda kalıyorsun içerik bütünlüğünü bozmadan herhangi bir şey eksiltmeden desen bile mutlaka bir şeyleri ya siliyor ya eksiltiyor öyle veriyor
-
al hocam, pic basic proya göre yeniden oluştur dedim:
' Pin Tanımlamaları DEFINE SHIFRE_PIN1 PINB.0 ' Şifre 1. hane DEFINE SHIFRE_PIN2 PINB.1 ' Şifre 2. hane DEFINE SHIFRE_PIN3 PINB.2 ' Şifre 3. hane DEFINE SHIFRE_PIN4 PINB.3 ' Şifre 4. hane DEFINE BUZZER PINA.3 ' Buzzer çıkışı DEFINE ALARM_LED PINA.2 ' Alarm aktif LED çıkışı DEFINE KONTAK PINA.0 ' Kontak girişi DEFINE ROLE PINB.7 ' Röle çıkışı ' Sabitler DOGRU_SIFRE VAR WORD ' Doğru şifre DOGRU_SIFRE = 1234 ' Örnek doğru şifre ' Değişkenler sifre VAR WORD ' Girilen şifre alarmDurumu VAR BIT ' Alarm durumu (0: Pasif, 1: Aktif) ' Başlangıç Ayarları TRISA = %00000001 ' RA0 (KONTAK) giriş, diğer RA pinleri çıkış TRISB = %00001111 ' RB0-RB3 (Şifre haneleri) giriş, RB7 (Röle) çıkış TRISC = 0 ' Diğer portlar çıkış ' Ana Program Döngüsü DO sifre = 0 ' Şifreyi sıfırla sifre = sifre * 10 + SHIFRE_PIN1 buzzerCal PAUSE 100 ' 100ms bekle sifre = sifre * 10 + SHIFRE_PIN2 buzzerCal PAUSE 100 ' 100ms bekle sifre = sifre * 10 + SHIFRE_PIN3 buzzerCal PAUSE 100 ' 100ms bekle sifre = sifre * 10 + SHIFRE_PIN4 buzzerCal PAUSE 100 ' 100ms bekle ' Alarm pasifken doğru şifre girildiğinde işlem IF alarmDurumu = 0 AND sifre = DOGRU_SIFRE THEN BUZZER = 1 ' Buzzer'ı çalıştır PAUSE 5000 ' 5 saniye bekle ALARM_LED = 1 ' Alarm aktif LED'ini yak alarmDurumu = 1 ' Alarm aktif kontrol ' Kontak kontrolünü başlat END IF ' Alarm aktifken doğru şifre girildiğinde işlem IF alarmDurumu = 1 AND sifre = DOGRU_SIFRE THEN FOR i = 1 TO 3 BUZZER = 1 ' Buzzer'ı çalıştır PAUSE 300 ' 300ms süreyle çalıştır BUZZER = 0 ' Buzzer'ı kapat PAUSE 300 ' 300ms bekle NEXT i ALARM_LED = 0 ' Alarm LED'ini kapat alarmDurumu = 0 ' Alarm pasif hale gelir END IF ' Alarm aktifken kontak kontrolü IF alarmDurumu = 1 THEN kontrol ' Kontak durumu kontrol et END IF LOOP ' Buzzer'ı çalıştıran fonksiyon buzzerCal: BUZZER = 1 ' Buzzer'ı çalıştır PAUSE 200 ' 200ms süreyle çalıştır BUZZER = 0 ' Buzzer'ı kapat RETURN ' Kontak durumu ve şifre kontrolü kontrol: IF KONTAK = 0 THEN BUZZER = 1 ' Kontak low olduğunda buzzer'ı çalıştır ELSE BUZZER = 0 ' Kontak yüksekse buzzer'ı kapat END IF ' Kontak low olduğunda şifre kontrolü yapılır IF KONTAK = 0 AND sifre = DOGRU_SIFRE THEN ALARM_LED = 0 ' Alarm pasif BUZZER = 0 ' Buzzer kapalı ROLE = 0 ' Röle kapalı END IF ' Şifre yanlışsa röle aktif edilir IF sifre <> DOGRU_SIFRE THEN ROLE = 1 ' Röleyi aktif et (Alarm tetikleniyor) END IF RETURN
-
SeRDaR bunu yazdı
bu chatgpt ye bir kod veriyorsun şuna şunu ekle gibisinden ekliyor ama verdiğin kodda ki başka bir işlevi yok ediyor. sil baştan tekrardan anlatmak zorunda kalıyorsun içerik bütünlüğünü bozmadan herhangi bir şey eksiltmeden desen bile mutlaka bir şeyleri ya siliyor ya eksiltiyor öyle veriyor
hocam bana göre uzun bir süre kullandım chatgpt'yi. öğrendiğim en önemli şey, tüm kodu tek seferde değil parça parça yazdırmak. mesela taslağı oluşturduktan sonra, işlevleri adım adım ayrıca sorup, bi önceki işlemle bağlantı yapmasını ve buna göre çıktı vermesini istiyorum. yakın zamanda bu sistemle 2 tane script yazdım çalıştığım firmaya.
-
' PIC16F877A mikrodenetleyicisi için alarm sistemi programı ' Şifre hane girişleri PORTB.0, PORTB.1, PORTB.2, PORTB.3 ' Buzzer PORTA.3 ' Alarm aktif LED'i PORTA.2 ' Kontak PORTA.0 ' Röle PORTB.7 ' Oscilatör frekansı tanımı (4 MHz varsayılmıştır) DEFINE OSC 4 ' Gerekli kütüphanelerin eklenmesi INCLUDE "modedefs.bas" ' Değişken tanımlamaları alarm_aktif VAR BIT ' Alarm durumu (aktif/pasif) kontak_durumu VAR BIT ' Kontak girişi durumu sifre[4] VAR BYTE ' Doğru şifre dizisi girilen_sifre[4] VAR BYTE ' Girilen şifre dizisi hane_index VAR BYTE ' Şifre hane indeksi gecici_hane VAR BYTE ' Geçici hane değeri buzzer_sayac VAR BYTE ' Buzzer ötüş sayacı sifre_dogru VAR BIT ' Şifre kontrol sonucu ' Port yönlerinin ayarlanması TRISA = %00000001 ' RA0 giriş (kontak), RA1-RA5 çıkış TRISB = %00001111 ' RB0-RB3 giriş (şifre), RB4-RB7 çıkış ' Başlangıç değerlerinin atanması sifre[0] = 1 sifre[1] = 2 sifre[2] = 3 sifre[3] = 4 alarm_aktif = 0 ' Alarm başlangıçta pasif hane_index = 0 ' Şifre hane indeksi başlangıç ' Ana döngü Ana_Dongu: IF alarm_aktif = 0 THEN ' Alarm pasifken doğru şifre girilirse GOSUB Sifre_Gir GOSUB Sifre_Kontrol IF sifre_dogru = 1 THEN HIGH PORTA.3 ' Buzzer aktif PAUSE 5000 ' 5 saniye bekle LOW PORTA.3 ' Buzzer pasif alarm_aktif = 1 ' Alarmı aktif et HIGH PORTA.2 ' Alarm aktif LED'i yak ENDIF ELSE ' Alarm aktifken kontak_durumu = PORTA.0 IF kontak_durumu = 0 THEN ' Kontak LOW ise HIGH PORTA.3 ' Buzzer aktif GOSUB Sifre_Gir GOSUB Sifre_Kontrol IF sifre_dogru = 1 THEN LOW PORTA.3 ' Buzzer pasif alarm_aktif = 0 ' Alarmı pasif et LOW PORTA.2 ' Alarm LED'i söndür ELSE HIGH PORTB.7 ' Röleyi aktif et ENDIF ELSE ' Kontak HIGH ise GOSUB Sifre_Gir GOSUB Sifre_Kontrol IF sifre_dogru = 1 THEN FOR buzzer_sayac = 1 TO 3 HIGH PORTA.3 PAUSE 200 LOW PORTA.3 PAUSE 200 NEXT buzzer_sayac alarm_aktif = 0 ' Alarmı pasif et LOW PORTA.2 ' Alarm LED'i söndür ENDIF ENDIF ENDIF GOTO Ana_Dongu ' Şifre giriş alt programı Sifre_Gir: hane_index = 0 WHILE hane_index < 4 ' Hane girişini oku gecici_hane = PORTB & %00001111 ' Hane girilene kadar bekle WHILE (PORTB & %00001111) = gecici_hane WEND ' Yeni hane değerini al gecici_hane = PORTB & %00001111 girilen_sifre[hane_index] = gecici_hane ' Buzzer 1 kez ötsün HIGH PORTA.3 PAUSE 100 LOW PORTA.3 PAUSE 100 hane_index = hane_index + 1 ' Tuş bırakılana kadar bekle WHILE (PORTB & %00001111) <> 0 WEND WEND RETURN ' Şifre kontrol alt programı Sifre_Kontrol: sifre_dogru = 1 FOR hane_index = 0 TO 3 IF girilen_sifre[hane_index] <> sifre[hane_index] THEN sifre_dogru = 0 EXIT ENDIF NEXT hane_index RETURN
-
Kodu detaylı açıklayayım:
- İlk olarak, değişkenlerimizi ve port yönlerimizi tanımladık:
- PORTA.3: Buzzer çıkışı
- PORTA.2: Alarm LED çıkışı
- PORTA.0: Kontak girişi
- PORTB.7: Röle çıkışı
- PORTB.0-3: Şifre girişleri
- Program özellikleri:
- Her tuş girişinde buzzer kısa bir bip sesi çıkarır
- Alarm pasifken doğru şifre girilirse:
- Buzzer 5 saniye boyunca çalar
- Ardından alarm aktif moda geçer
- Alarm aktifken doğru şifre girilirse:
- Buzzer 3 kere öter
- Alarm pasif moda geçer
- Alarm aktifken kontak kontrolü sürekli yapılır:
- Kontak low olursa buzzer çalar
- Bu durumda doğru şifre girilirse alarm ve buzzer kapanır
- Yanlış şifre girilirse röle aktif olur
- Şifre kontrol mekanizması:
- Her hane girişi beklenir ve kaydedilir
- Girilen değerler kayıtlı şifre ile karşılaştırılır
- Sonuç STATUS register'ının Z biti ile döndürülür
- Gecikme rutinleri:
- 100ms, 500ms ve 5sn için ayrı gecikme rutinleri
- İç içe döngüler kullanılarak zaman ayarı yapılır
; Değişkenler için RAM alanı
cblock 0x20
sifre1
sifre2
sifre3
sifre4
giris1
giris2
giris3
giris4
sayac
durum ; 0:pasif, 1:aktif
gecikme1
gecikme2
endcorg 0x00
goto BASLA
BASLA
; Port ayarları
banksel TRISA
movlw b'11110100' ; RA3(buzzer), RA2(led), RA0(kontak) çıkış
movwf TRISA
movlw b'00001111' ; RB7(röle) çıkış, RB0-3 giriş
movwf TRISB
banksel PORTA
clrf PORTA
clrf PORTB
; Şifre tanımlama (örnek: 1234)
movlw d'1'
movwf sifre1
movlw d'2'
movwf sifre2
movlw d'3'
movwf sifre3
movlw d'4'
movwf sifre4
clrf durum ; Başlangıçta alarm pasif
ANA_DONGU
; Kontak kontrolü
btfss durum, 0 ; Alarm aktif mi?
goto PASIF_MOD
btfss PORTA, 0 ; Kontak low mu?
goto KONTAK_ALARM
goto AKTIF_MOD
KONTAK_ALARM
bsf PORTA, 3 ; Buzzer high
call SIFRE_AL
btfsc STATUS, Z ; Şifre doğru mu?
goto ALARM_PASIF
bsf PORTB, 7 ; Yanlış şifreyse röle high
goto ANA_DONGU
PASIF_MOD
call SIFRE_AL
btfss STATUS, Z ; Şifre doğru mu?
goto ANA_DONGU
; Doğru şifre girildi
bsf PORTA, 3 ; Buzzer high
call GECIKME_5SN
bcf PORTA, 3 ; Buzzer low
bsf durum, 0 ; Alarm aktif
goto ANA_DONGU
AKTIF_MOD
call SIFRE_AL
btfss STATUS, Z ; Şifre doğru mu?
goto ANA_DONGU
; Doğru şifre - 3 kez buzzer
movlw d'3'
movwf sayac
BUZZER_LOOP
bsf PORTA, 3
call GECIKME_500MS
bcf PORTA, 3
call GECIKME_500MS
decfsz sayac, f
goto BUZZER_LOOP
ALARM_PASIF
bcf durum, 0 ; Alarm pasif
bcf PORTA, 3 ; Buzzer low
bcf PORTB, 7 ; Röle low
goto ANA_DONGU
SIFRE_AL
; İlk hane
call TARA_RB0_3
movwf giris1
bsf PORTA, 3 ; Buzzer bip
call GECIKME_100MS
bcf PORTA, 3
call GECIKME_100MS
; İkinci hane
call TARA_RB0_3
movwf giris2
bsf PORTA, 3 ; Buzzer bip
call GECIKME_100MS
bcf PORTA, 3
call GECIKME_100MS
; Üçüncü hane
call TARA_RB0_3
movwf giris3
bsf PORTA, 3 ; Buzzer bip
call GECIKME_100MS
bcf PORTA, 3
call GECIKME_100MS
; Dördüncü hane
call TARA_RB0_3
movwf giris4
bsf PORTA, 3 ; Buzzer bip
call GECIKME_100MS
bcf PORTA, 3
; Şifre kontrolü
movf giris1, w
subwf sifre1, w
btfss STATUS, Z
retlw 0
movf giris2, w
subwf sifre2, w
btfss STATUS, Z
retlw 0
movf giris3, w
subwf sifre3, w
btfss STATUS, Z
retlw 0
movf giris4, w
subwf sifre4, w
btfss STATUS, Z
retlw 0
retlw 1 ; Şifre doğru
TARA_RB0_3
btfsc PORTB, 0
retlw 1
btfsc PORTB, 1
retlw 2
btfsc PORTB, 2
retlw 3
btfsc PORTB, 3
retlw 4
goto TARA_RB0_3
GECIKME_5SN
movlw d'50'
movwf gecikme2
LOOP_5SN
call GECIKME_100MS
decfsz gecikme2, f
goto LOOP_5SN
return
GECIKME_500MS
movlw d'5'
movwf gecikme2
LOOP_500MS
call GECIKME_100MS
decfsz gecikme2, f
goto LOOP_500MS
return
GECIKME_100MS
movlw d'100'
movwf gecikme1
LOOP_100MS
nop
nop
decfsz gecikme1, f
goto LOOP_100MS
return
end - İlk olarak, değişkenlerimizi ve port yönlerimizi tanımladık: