Lezzetli Robot Tarifleri Sosyal'e Hoş Geldiniz.. Devamı..

Giriş Yap Üye Ol


Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
LCD ye delay kullanmadan belirli zamanda değişen yazı yazdırma sorunu
#1
Merhabalar, 
Lcd ye belirli aralıklarla değişen yazılar yazdırmak istiyorum. Aynı zamanda arduino farklı işlemlerde yaptığından delay kullanamıyorum. millis ile denedim fakat döngü oluşturamadım. İlk yazı geliyor 5 sn sonra ikinci yazı geliyor fakat başa dönmüyor son yazı ekranda kalıyor ve hızlı bir şekilde yanıp sönüyor. Yardımcı olabilirseniz çok sevinirim.
Kod:
void ekran ()

{
 unsigned long eskiZaman = 0;
 unsigned long yeniZaman;
 yeniZaman = millis();
 if (yeniZaman - eskiZaman > 1)
 {
   lcd.home();
   lcd.clear();
   DateTime now = RTC.now();
   lcd.setCursor(0, 0);
   if (now.day() < 10)
     lcd.print('0');
   lcd.print(now.day(), DEC);
   lcd.print('-');
   if (now.month() < 10)
     lcd.print('0');
   lcd.print(now.month(), DEC);
   lcd.print('-');
   lcd.print(now.year(), DEC);
   lcd.print(' ');
   lcd.setCursor(11, 0);
   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.setCursor(0, 1);
   lcd.print (sicaklik);
   lcd.setCursor(5, 1);
   lcd.print((char)223);
   lcd.setCursor(6, 1);
   lcd.print("C");
   lcd.setCursor(9, 1);
   lcd.print ("pH:");
   lcd.setCursor(12, 1);
   lcd.print("10,1");
 }

 if (yeniZaman - eskiZaman > 5000)
 {
   lcd.clear();
   lcd.setCursor(5, 0);
   lcd.print ("DENEME");
   lcd.setCursor(1, 1);
   lcd.print("DENEME DENEME");
 }
}
Ara
Cevapla
#2
Void ekran fonksiyinunu sadece void setup fonksiyonu icinde mi kullandiniz ?
Ara
Cevapla
#3
Şu Şekil

Kod:
void loop()
{
 roleler();
 dozaj();
 aydinlatma();
 ekran ();
}

Tüm Kod

Kod:
int LM35 = A2;
int suSensor = A3;
int dozajPompa1 = 3;
int dozajPompa2 = 4;
int dozajPompa3 = 5;
int dozajPompa4 = 6;
int psRole = 7;
int fan = 8;
int isitici = 9;
int suTamamlama = 10;

int fanDurum = 0;
int isiticiDurum = 0;
int suSensorDurum = 0;
int psDurum = 0;
float sicaklik;
int cDenGelen;

#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3f , 16 , 2);
RTC_DS1307 RTC;

void setup()
{
 { Wire.begin();
   RTC.begin();
   lcd.begin();
 }
 { Serial.begin(9600);
   pinMode(LM35, INPUT);
   pinMode(suSensor , INPUT);
   pinMode(dozajPompa1, OUTPUT);
   pinMode(dozajPompa2, OUTPUT);
   pinMode(dozajPompa3, OUTPUT);
   pinMode(dozajPompa4, OUTPUT);
   pinMode(psRole, OUTPUT);
   pinMode(fan, OUTPUT);
   pinMode(isitici, OUTPUT);
   pinMode(suTamamlama, OUTPUT);

   // Röle modülü Active Low olduğu için tüm rölelere HIGH gönderip kapattım.
   digitalWrite(dozajPompa1, HIGH);
   digitalWrite(dozajPompa2, HIGH);
   digitalWrite(dozajPompa3, HIGH);
   digitalWrite(dozajPompa4, HIGH);
   digitalWrite(psRole, HIGH);
   digitalWrite(fan, HIGH);
   digitalWrite(isitici, HIGH);
   digitalWrite(suTamamlama, HIGH);
 }
 unsigned long eskiZaman = 0;
 unsigned long yeniZaman;
}

void loop()
{
 roleler();
 dozaj();
 aydinlatma();
 ekran ();
}
Ara
Cevapla
#4
Merhaba "dosya> Örnekler> digital>blinkwithoutdelay " örneğini açarak orada paralel algoritmanın örneği mevcut.
Maker by : Alperen Alpaydın   
     TEŞEKKÜR İÇİN REP BUTONUNU KULLANINIZ



Cevapla
#5
Ekran fonksiyonunda bulunan yerel degiskenleri global degisken olarak kullanmayi deneyin. Cunku her fobksyiona girdiginizde eski zaman degiskeni hep sifirlaniyor. Zaten surekli yenileniyor eski zamani bu sekilde hep sifirlamis oluyorsunuz.
Ara
Cevapla
#6
Çok anladığımdan değil ama senin sorununu iç kesme (timer) olayı çözer diye düşünüyorum. Tüm programdan bağımsız çalışan bir timer, bence bunu araştırmalısın.

http://letsmakerobots.com/content/arduin...interrupts
Ara
Cevapla
#7
Millis fonksiyonu timer donanimini kullaniyor .timer kesmesini kullanirsa millis fonksyonu sorun yaratacaktir. Ya millisi kaldirip kendi ayarlamasi lazim timer donanimini ya da bu sekilde kenidisi zaten halletmeye calismis ki mantik hatasi yok. Kural hatasi var hepsi bu.

Buradaki bir cok arkadas avr bilmediginden bunu anlamalari biraz guc gelebilir. Ancak size katiliyorum kesme her zaman en iyisidir.
Ara
Cevapla
#8
merhaba arkadaslar

bir sistem tasarladım sıcaklık 25 derecede normal durumda 27 derece olunca  1.ledi 10 sn yakacak 2.ledi 5 sn gecıkmelı 5sn yakacak  10 sn sonunda her ıkı led aynı anda sonecek eger olcum yaparken sıcaklık 28 -29 olursa loop tan cıkıp dıger sartları gerceklestırecek, sımdı ben delay komutu ıle yaptım devre calıstı fakat delaya gırdıgınde ardınyo cıkıs uretmıyor sıstemı delay suresınce kıtlıyor bunun yerıne millis komutu kullandım bu sefer ledleri istenen sartlarda yakıyor fakat sondurme ıslemı yapmıyor yardımcı olabılrımsınız

kodları ıstersenız paylasabılrım.
Ara
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  pro mini nrf pil sorunu freekevin1 0 67 22-09-2017, Saat: 11:30
Son Yorum: freekevin1
  LCD EKRAN ve KEYPAD KULLANARAK ŞİFRE SİSTEMİ SORUNU eneramo 0 128 25-08-2017, Saat: 13:12
Son Yorum: eneramo
  Nrf24l01 ve arduino sürekli çıkış sorunu Erdoğan 7 382 19-04-2017, Saat: 20:15
Son Yorum: Erdoğan
Photo Easyeda Simülasyon Sorunu msamet 4 392 27-03-2017, Saat: 21:10
Son Yorum: Ozan Bayramoglu
Exclamation SD CARD ile Servo Motoru Birlikte Kullanma Sorunu! Ceyran Engineer 3 346 22-03-2017, Saat: 22:21
Son Yorum: z1rqdym

Hızlı Menü:


Konuyu Okuyanlar:
1 Ziyaretçi