Arkadaşlar acil bir proje var.
4 digit 7 segment serit LED ile dijital saat yapilayap kodlamada bağlantıda felan acil yardima ihtiyacım var. Elimde Arduino UNO var.
7 Segment Display – DHT11 Nem ve Sıcaklık Sensörü – DS3231 RTC modülü ve LDR kullanarak yaptığım digital saatin kodları;
#include “RTClib.h”
#include “DHT.h” //A0
#include “Wire.h” //A4 – SDA , A5 – SCL
#include “SevSeg.h”
#define DS1307_ADDRESS 0x68
RTC_DS1307 RTC;
int LED = 9;
int LDR = A0;
int Led_1 = A2;
int Led_2 = A3;
int valor = 0;
byte zero = 0x00;
unsigned long timer;
#define DHTPIN A1
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
int segA ;
int segB ;
int segC ;
int segD ;
int segE ;
int segF ;
int segG ;
int segDP ;
int deger;
int deger1;
SevSeg display7seg;
void setup() {
Wire.begin(); // I2C’yi başlat
RTC.begin(); // RTC’yi başlat
dht.begin(); //DHT’yi başlat
Serial.begin(9600); //Seri Haberleşme’yi başlat
int displayType = COMMON_ANODE; //Display ortak anot ve katot olarak seç.
//Yıl , Ay , Gün , Saat , Dakika , Saniye ayarlama
// RTC.adjust(DateTime(2019,05,19,18,28,30));
int digit1 = 10;
int digit2 = 11;
int digit3 = 12;
int digit4 = 13;
int segA = 2;
int segB = 3;
int segC = 4;
int segD = 5;
int segE = 6;
int segF = 7;
int segG = 8;
pinMode(LDR, INPUT);
pinMode(LED, OUTPUT);
pinMode(Led_1, OUTPUT);
pinMode(Led_2, OUTPUT);
//Kaç display kullanılacağını buraya yaz.
int numberOfDigits = 4;
//Display bacak ayarlama
display7seg.Begin(displayType, numberOfDigits, digit1, digit2, digit3, digit4, segA, segB, segC, segD, segE, segF, segG, segDP);
//Display Parlaklığı
display7seg.SetBrightness(100);
timer = millis();
//Açılış Testi
digitalWrite(digit1, HIGH);
digitalWrite(digit2, HIGH);
digitalWrite(digit3, HIGH);
digitalWrite(digit4, HIGH);
delay(1000);
digitalWrite(segA, LOW);
delay(1000);
digitalWrite(segB, LOW);
delay(1000);
digitalWrite(segC, LOW);
delay(1000);
digitalWrite(segD, LOW);
delay(1000);
digitalWrite(segE, LOW);
delay(1000);
digitalWrite(segF, LOW);
delay(1000);
digitalWrite(segG, LOW);
delay(1000);
//LEDLER
digitalWrite(Led_1, HIGH);
delay(1000);
digitalWrite(Led_2, HIGH);
delay(1000);
}
void loop() {
DateTime now = RTC.now(); // mevcut Saati al
char tempString[10];
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero);
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7);
int seconds = ConvertToDecimal(Wire.read()); //saniye bilgisi
int minutes = ConvertToDecimal(Wire.read()); //dakika bilgisi
int hours = ConvertToDecimal(Wire.read() & 0b111111); //saat bilgisi ve (0b111111) 24 saat bilgisi
int dow = ConvertToDecimal(Wire.read());
int days = ConvertToDecimal(Wire.read()); //gün bilgisi
int months = ConvertToDecimal(Wire.read()); //ay bilgisi
int years = ConvertToDecimal(Wire.read() ); //yıl bilgisi
//——————————————————————————————————
//sıcaklık okuma
if (seconds == 21 || seconds == 22 || seconds == 50 || seconds == 51)
{
byte s = dht.readTemperature();
sprintf(tempString, “%02d%01cC%”, s, ‘”‘);
display7seg.DisplayString(tempString, 0); //DP ayarlama
digitalWrite(Led_1, LOW);
digitalWrite(Led_2, LOW);
}
//——————————————————————————————————
//nem okuma
else if ( seconds == 23 || seconds == 24 || seconds == 52 || seconds == 53)
{
byte n = dht.readHumidity();
sprintf(tempString, “%01cH%02d%”, ‘r’, n);
display7seg.DisplayString(tempString, 0); //DP ayarlama
digitalWrite(Led_1, HIGH);
digitalWrite(Led_2, HIGH);
}
//——————————————————————————————————
//gün ay okuma
else if (seconds == 25 || seconds == 26 || seconds == 54 || seconds == 55)
{
sprintf(tempString, “%02d%02d”, days, months);
display7seg.DisplayString(tempString, 0); //DP ayarlama
digitalWrite(Led_1, LOW);
digitalWrite(Led_2, HIGH);
}
//——————————————————————————————————
//yıl okuma
else if (seconds == 27 || seconds == 28 || seconds == 56 || seconds == 57)
{
sprintf(tempString, “%02d%02d”, 20, years);
display7seg.DisplayString(tempString, 0); //DP ayarlama
digitalWrite(Led_1, LOW);
digitalWrite(Led_2, LOW);
}
//———————————————————————————————————
//saat dakika okuma
else
sprintf(tempString, “%02d%02d”, hours, minutes);
display7seg.DisplayString(tempString, 2); //DP ayarlama
//——————————————————————————————————
//Ldr Kontrollü Aydınlatma
{
deger = analogRead(LDR);
deger1 = map(deger, 0, 1023, 255, 0);
if (deger1 <= 65)
analogWrite(LED, 0);
else
analogWrite(LED, deger1);
Serial.println(deger1);
}
//——————————————————————————————————
//Ledler;
if (seconds == 0 || seconds == 2 || seconds == 4 || seconds == 6 || seconds == 8 || seconds == 10 || seconds == 12 || seconds == 14 || seconds == 16 || seconds == 18 || seconds == 20 || seconds == 30 || seconds == 32 || seconds == 34 || seconds == 36 || seconds == 38 || seconds == 40 || seconds == 42 || seconds == 44 || seconds == 46 || seconds == 48 || seconds == 58)
{
digitalWrite(Led_1, HIGH);
digitalWrite(Led_2, HIGH);
}
else if (seconds == 1 || seconds == 3 || seconds == 5 || seconds == 7 || seconds == 9 || seconds == 11 || seconds == 13 || seconds == 15 || seconds == 17 || seconds == 19 || seconds == 29 || seconds == 31 || seconds == 33 || seconds == 35 || seconds == 37 || seconds == 39 || seconds == 41 || seconds == 43 || seconds == 45 || seconds == 47 || seconds == 49 || seconds == 59)
{
digitalWrite(Led_1, LOW);
digitalWrite(Led_2, LOW);
}
}
byte ConvertToDecimal(byte val)
{
//Convert binary to decimal
return ( (val / 16 * 10) + (val % 16) );
}