Emir2507
Decapat
- Katılım
- 25 Nisan 2020
- Mesajlar
- 66
Merhaba. Arduino'da bir proje yapmak istedim. Amaç = RTC modülündeki saat bilgisi 16x2 LCD ekranda yazmalı. Daha sonra hareket sensörü hareket algıladığında sayım yapmalı, bunları yaptım. Sonra birkaç ekleme yapmak istedim. Hareket algıladığında ve LDR sensörü belli bir değerin altını gösterdiğinde röleye sinyal gitsin bir de sayaca +1 yapmasını istedim. Kodları yazdım ama bir türlü çalışmadı hata nedir? Cevaplarınızı bekliyorum. İyi günler.
Not: Hareket algılandığında 2 saniye bekleme vermemin sebebi hareket sensörü minimum 3 saniye boyunca locik 1 verir bunu yapmazsam her hareket algıladığında +3 verir. Sorunu bekleterek çözdüm.
Kodlar =
#Include <Wire.h>
#Include "RTClib.h"
#Include <LiquidCrystal.h>
LiquidCrystal LCD(8, 7, 6, 5, 4, 3);
RTC_DS1307 rtc;
İnt buton = 2;
İnt hareket= 9;
İnt sayac;
İnt LDR = a0;
İnt role = 12;
Char daysoftheweek[7][12] = {"paz", "pzt", "sal", "car", "per", "C'um", "cmt"};
Void setup () {
Pinmode(buton, ınput);
Pinmode(hareket, ınput);
Pinmode(13, output);
Pinmode(ldr, ınput);
Pinmode(role, output);
Wire.begin();
RTC.begin();
LCD. Begin(16, 2);
If (! RTC.isrunning()) {
LCD. Println("rtc calismiyor");
}
For(int a=0; a<3; a++){
LCD. Print("bekleyiniz.");
Delay(500);
lcd.clear();
LCD. Print("bekleyiniz.");
Delay(500);
lcd.clear();
LCD. Print("bekleyiniz...");
Delay(500);
lcd.clear();
}
LCD. Setcursor(0, 0);
LCD. Print("proje...");
LCD. Setcursor(0, 1);
LCD. Print("...Bir");
Delay (2000);
lcd.clear();
}
Void loop () {
Digitalwrite(13, Low);
If(digitalread(buton)==0){
Datetime Now = RTC.now();
LCD. Setcursor(0, 0);
lcd.print(now.day(), DEC);
LCD. Print('/');
lcd.print(now.month(), DEC);
LCD. Print('/');
lcd.print(now.year(), DEC);
LCD. Print(' ');
LCD. Print(" ");
LCD. Print(daysoftheweek[now.dayOfTheWeek()]);
LCD. Setcursor(0, 1);
If (now.hour()<10)
LCD. Print('0');
lcd.print(now.hour(), DEC);
LCD. Print(':');
If (now.minute()<10)
LCD. Print('0');
lcd.print(now.minute(), DEC);
LCD. Print(':');
If (now.second()<10)
LCD. Print('0');
lcd.print(now.second(), DEC);
Delay(100);
lcd.clear();
}
If(digitalread(buton)==1){
LCD. Print("hareket = ");
LCD. Print(sayac);
LCD. Setcursor(6, 1);
LCD. Print("ldr = ");
LCD. Print(ldr);
lcd.home();
}
Else if(analogread(ldr)<35 && digitalread(hareket)==1){
Delay(2000);
Sayac=sayac+1;
Digitalwrite(role, High);
Delay(6000);
Digitalwrite(role, Low);
}
Else if(digitalread(hareket)==1){
Delay(2000);
Sayac=sayac+1;
}
LDR = analogread(a0);
}
Not: Hareket algılandığında 2 saniye bekleme vermemin sebebi hareket sensörü minimum 3 saniye boyunca locik 1 verir bunu yapmazsam her hareket algıladığında +3 verir. Sorunu bekleterek çözdüm.
Kodlar =
#Include <Wire.h>
#Include "RTClib.h"
#Include <LiquidCrystal.h>
LiquidCrystal LCD(8, 7, 6, 5, 4, 3);
RTC_DS1307 rtc;
İnt buton = 2;
İnt hareket= 9;
İnt sayac;
İnt LDR = a0;
İnt role = 12;
Char daysoftheweek[7][12] = {"paz", "pzt", "sal", "car", "per", "C'um", "cmt"};
Void setup () {
Pinmode(buton, ınput);
Pinmode(hareket, ınput);
Pinmode(13, output);
Pinmode(ldr, ınput);
Pinmode(role, output);
Wire.begin();
RTC.begin();
LCD. Begin(16, 2);
If (! RTC.isrunning()) {
LCD. Println("rtc calismiyor");
}
For(int a=0; a<3; a++){
LCD. Print("bekleyiniz.");
Delay(500);
lcd.clear();
LCD. Print("bekleyiniz.");
Delay(500);
lcd.clear();
LCD. Print("bekleyiniz...");
Delay(500);
lcd.clear();
}
LCD. Setcursor(0, 0);
LCD. Print("proje...");
LCD. Setcursor(0, 1);
LCD. Print("...Bir");
Delay (2000);
lcd.clear();
}
Void loop () {
Digitalwrite(13, Low);
If(digitalread(buton)==0){
Datetime Now = RTC.now();
LCD. Setcursor(0, 0);
lcd.print(now.day(), DEC);
LCD. Print('/');
lcd.print(now.month(), DEC);
LCD. Print('/');
lcd.print(now.year(), DEC);
LCD. Print(' ');
LCD. Print(" ");
LCD. Print(daysoftheweek[now.dayOfTheWeek()]);
LCD. Setcursor(0, 1);
If (now.hour()<10)
LCD. Print('0');
lcd.print(now.hour(), DEC);
LCD. Print(':');
If (now.minute()<10)
LCD. Print('0');
lcd.print(now.minute(), DEC);
LCD. Print(':');
If (now.second()<10)
LCD. Print('0');
lcd.print(now.second(), DEC);
Delay(100);
lcd.clear();
}
If(digitalread(buton)==1){
LCD. Print("hareket = ");
LCD. Print(sayac);
LCD. Setcursor(6, 1);
LCD. Print("ldr = ");
LCD. Print(ldr);
lcd.home();
}
Else if(analogread(ldr)<35 && digitalread(hareket)==1){
Delay(2000);
Sayac=sayac+1;
Digitalwrite(role, High);
Delay(6000);
Digitalwrite(role, Low);
}
Else if(digitalread(hareket)==1){
Delay(2000);
Sayac=sayac+1;
}
LDR = analogread(a0);
}
Son düzenleme: