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 ?
Yararlı gördüğünüz yorumlara teşekkür etmek için "Rep Ver" butonunu kullanabilirsiniz.
Özel Mesaj'dan sorularınıza cevap vermiyorum. Konu açarsanız daha fazla kişiden daha çabuk geri dönüş alabilirsiniz.

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.
Yararlı gördüğünüz yorumlara teşekkür etmek için "Rep Ver" butonunu kullanabilirsiniz.
Özel Mesaj'dan sorularınıza cevap vermiyorum. Konu açarsanız daha fazla kişiden daha çabuk geri dönüş alabilirsiniz.

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.
Yararlı gördüğünüz yorumlara teşekkür etmek için "Rep Ver" butonunu kullanabilirsiniz.
Özel Mesaj'dan sorularınıza cevap vermiyorum. Konu açarsanız daha fazla kişiden daha çabuk geri dönüş alabilirsiniz.

Ara
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Nrf24l01 ve arduino sürekli çıkış sorunu Erdoğan 7 122 19-04-2017, Saat: 20:15
Son Yorum: Erdoğan
Photo Easyeda Simülasyon Sorunu msamet 4 103 27-03-2017, Saat: 21:10
Son Yorum: Ozan Bayramoglu
Exclamation SD CARD ile Servo Motoru Birlikte Kullanma Sorunu! Ceyran Engineer 3 120 22-03-2017, Saat: 22:21
Son Yorum: z1rqdym
  Servo Motorunu Joystick ile İstenilen Yöne Çevirme Sorunu alylcn 14 445 20-02-2017, Saat: 03:55
Son Yorum: alylcn
  arduino ön yükleme sorunu mesutgul55 1 107 15-02-2017, Saat: 17:26
Son Yorum: AlperrTG

Hızlı Menü:


Konuyu Okuyanlar:
1 Ziyaretçi