Merhaba iyi forumlar arkadaşlar projem olan arduino ile zaman ayarlı mama kabım için yardımınıza ihtiyacım var pek fazla bilgim yok arduinoda projenin amacı rtc modül ile tft lcd ekrandan 12 saatlik geri sayım olacak sayım bitince servo motor ile bir mekanizma döndürüp mama dökecek sorum şu kodumu kendim ve internetten örnekler ile yazdım daha test edemedim dişi-erkek jumper kablolarım eksik olduğu için kodu aşşağı bırakıyorum. bir kaç tane daha sorum var.
-rtc olmadan geri sayım mümkün, peki eeprom ile sağlıklı olur mu?
-servo motorum sg5010 arduino mega kartı ile hem ekrana hem servoya güç verebilir miyim zorlanma olur mu?
-lcd tft ve servo için direnç bağlantısı yapmalımıyım internette görüğüme göre direnç bağlayan yok.
-servonun alacağı elektrik yetersiz kalırsa adaptör ile servoyu beslesem ama megaya pil bağlantısı yapsam devre için mantıklı olur mu?
-rtc olmadan geri sayım mümkün, peki eeprom ile sağlıklı olur mu?
-servo motorum sg5010 arduino mega kartı ile hem ekrana hem servoya güç verebilir miyim zorlanma olur mu?
-lcd tft ve servo için direnç bağlantısı yapmalımıyım internette görüğüme göre direnç bağlayan yok.
-servonun alacağı elektrik yetersiz kalırsa adaptör ile servoyu beslesem ama megaya pil bağlantısı yapsam devre için mantıklı olur mu?
C++:
#include <Wire.h>
#include <RTClib.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
#include <Servo.h>
// TFT ekran pinler
#define TFT_CS 53
#define TFT_RST 49
#define TFT_DC 48
Adafruit_ST7735 ekran(TFT_CS, TFT_DC, TFT_RST);
RTC_DS3231 rtc;
Servo motor;
const int MOTOR_PIN = 6; // servo motor sinyal pini
DateTime sonTetiklemeZamani; // en son servo motorun çalıştığı zaman
bool sayacAktifMi = true; // sayaç şu anda çalışıyor mu sorgusu
void setup() {
Serial.begin(9600);
Wire.begin(); // I2C haberleşmesi
// TFT ekran başlatma
ekran.initR(INITR_BLACKTAB);
ekran.setRotation(1);
ekran.fillScreen(ST77XX_BLACK);
ekran.setTextSize(2);
ekran.setTextColor(ST77XX_WHITE);
// RTC modülü başlatma
if (!rtc.begin()) {
ekran.setCursor(0, 0);
ekran.println("RTC bulunamadi!");
while (1); // RTC yoksa kod kesilir
}
if (rtc.lostPower()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
// servo motor 0 dereceye ayarlama
motor.attach(MOTOR_PIN);
motor.write(0);
// başlangıç zamanı çalıştığı saat
sonTetiklemeZamani = rtc.now();
}
void loop() {
DateTime simdi = rtc.now(); // Şu anki zamanı oku
//yeni gün sorgusu
TimeSpan kalanSure = TimeSpan(0, 12, 0, 0) - (simdi - sonTetiklemeZamani);
// TFT ekran temizle yazdır
ekran.fillScreen(ST77XX_BLACK);
ekran.setCursor(10, 10);
if (kalanSure.totalseconds() > 0) {
// sayaç hala devam ediyorsa geri sayımı yazdır
int saat = kalanSure.hours();
int dakika = kalanSure.minutes();
int saniye = kalanSure.seconds();
ekran.print("Geri Sayim:");
ekran.setCursor(10, 40);
yazSaatiYaz(saat, dakika, saniye);
} else {
// motor çalıştır ve sayaç sıfırla
if (sayacAktifMi) {
ekran.setTextColor(ST77XX_GREEN);
ekran.setCursor(10, 20);
ekran.println("MAMA VAKTİ!!");
ekran.setCursor(10, 50);
ekran.println("MAMA DÖKÜLÜYOR!");
delay(1000);
// servo motoru 0 - 180
motor.write(180);
delay(2000);
motor.write(0);
delay(2000);
sonTetiklemeZamani = simdi;
sayacAktifMi = false;
}
}
// sayaç kapalıysa ve tetiklemeden 10 saniye geçerse baştan başlat
if ((simdi - sonTetiklemeZamani).totalseconds() > 10 && !sayacAktifMi) {
sayacAktifMi = true;
}
delay(1000); //ekranı her saniye güncelle
}
// saat biçimi saat dakika saniye örnek 10:27:54
void yazSaatiYaz(int saat, int dakika, int saniye) {
if (saat < 10) ekran.print("0");
ekran.print(saat); ekran.print(":");
if (dakika < 10) ekran.print("0");
ekran.print(dakika); ekran.print(":");
if (saniye < 10) ekran.print("0");
ekran.print(saniye);
}
Son düzenleme: