Arduino, Kod mantığı doğru gibi ama kod çalışmıyor :(

Emir2507

Yeni Üye
11 Haz 2020
2
1
1
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;
int buton = 2;
int hareket= 9;
int sayac;
int ldr = A0;
int role = 12;
int asd=9;

char daysOfTheWeek[7][12] = {"Paz", "Pzt", "Sal", "Car", "Per", "Cum", "Cmt"};

void setup () {

pinMode(buton,INPUT);
pinMode(hareket,INPUT);
pinMode(13,OUTPUT);
pinMode(ldr,INPUT);
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("Selim...........");
lcd.setCursor(0, 1);
lcd.print("............Emir");
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);

}
 

Emir2507

Yeni Üye
11 Haz 2020
2
1
1
Merhaba, tam olarak sistem calistiginda nasil isliyor nerede istedigibiz gibi olmuyor?
Kod çalışıyordu. Bir koşul ekledim. Hareket sensörü 1 değeri ve ldr belirtilen değerin altında gösterirse çalışacak kodlar çalışmıyor if bölğmünde hareket ifadesini iki kere kullanılfığından mı oluyor yoksa zamanlamada bir problem mi var anlamadım delay yerine millis kullanmayı dene dediler başka forumlarda ama millis kodunu yukarıdaki kodlarda nasıl kullanıcağımı anlamadım millis uygulamalarına bakıyorum herkes led yakıp söndürüyor :)
 
  • Beğen
Tepkiler: ONUR

ONUR

Robotik - Teknoloji
20 Şub 2020
37
21
13
onurias.com
Kod çalışıyordu. Bir koşul ekledim. Hareket sensörü 1 değeri ve ldr belirtilen değerin altında gösterirse çalışacak kodlar çalışmıyor if bölğmünde hareket ifadesini iki kere kullanılfığından mı oluyor yoksa zamanlamada bir problem mi var anlamadım delay yerine millis kullanmayı dene dediler başka forumlarda ama millis kodunu yukarıdaki kodlarda nasıl kullanıcağımı anlamadım millis uygulamalarına bakıyorum herkes led yakıp söndürüyor :)


Delay efendi bazi kodlarda sorun çıkartıyor. Milise gecmeliyiz.
 

Seelenkind

Yeni Üye
Platin Üye
3 May 2020
26
21
3
Almanya
www.hilmi-soenmez.com
İsim
Hilmi Sönmez
Cinsiyet
Erkek
Bu tür kapsamı arttıkça artan kodlarda ben şu yöntemi uyguluyorum. void setup() ve void loop() dışına void getvalues() void printvalues() void selection() gibi fonksiyonlar ekliyorum.
getvalues() fonksiyonunda sadece dijital ve analog girişleri okutuyorum
selection() fonksiyonunda şartlar yerine geldiğinde yapılacak işlemleri belirliyorum
printvalues() fonksiyonunda verileri nerede istiyorsam yazdırıyorum / gösteriyorum
bu şekilde kod, özellikle void loop() kısmı çok derli topu oluyor ve herhangi bir eklme yaptığımda kendi yazdığım kod içinde kaybolmuyorum

#include ...
#define ...
int ...
float ...
bool ...

void setup()
{
....
}

void loop()
{
getvalues()İ
selection();
printvalues();
}

void getvalues()
{
buton = digitalRead(B1);
basinc_v=analogRead(A0)'
isi_v=analogRead(A1);
}

void selection()
{
LED = buton;
digitalWrite(Led,LED);
basinc=map(basinc_v,0,1023,800,1500);
isi=map(isi_v,0,1023,15,45);

if (basinc>1000)
{
basinc_d="Yüksek basinc";
digitalWrite(16,HIGH);
}

if (basinc<1001)
{
basinc_d="Alcak basinc";
digitalWrite(16,LOW);
}

if (isi>37)
{
sicaklik="sicaklik yüksek";
......
}

if (isi<38)
{
sicaklik="sicaklik düsük";
.....
}

} //void selection() END

void printvalues()
{
lcd.print(basinc_d);
lcd.print(sicaklik);
}
 

Robotikforum.net Nedir?

  • Robotikforum.net 2020 yılında kurulup yayın hayatına başlayan ve Türkiye’de robotik kodlama alanının gelişimine katkıda bulunmak için bu alan ile ilgilenen bireylerin bir birleri ile yardımlaşmaları ve fikir danışmalarını sağlayarak daha iyi öğrenmek için her bir bireyin bilgisini ve tecrübesini alarak kendini geliştirebileceği ve sorularına cevap bulabileceği bir platform olarak kurulmuştur.

Bilgilendirme!!!

İçerik sağlayıcı paylaşım sitelerinden biri olan www.robotikforum.net Adresimizde T.C.K 20.ci Madde ve 5651 Sayılı Kanun'un 4.cü maddesinin (2).ci fıkrasına göre TÜM ÜYELERİMİZ yaptıkları paylaşımlardan sorumludur.

Sayfamızı beğendin mi?