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
Exclamation SD CARD ile Servo Motoru Birlikte Kullanma Sorunu! Ceyran Engineer 3 39 22-03-2017, Saat: 22:21
Son Yorum: z1rqdym
  Servo Motorunu Joystick ile İstenilen Yöne Çevirme Sorunu alylcn 14 360 20-02-2017, Saat: 03:55
Son Yorum: alylcn
  arduino ön yükleme sorunu mesutgul55 1 68 15-02-2017, Saat: 17:26
Son Yorum: AlperrTG
  Arduino programlama sorunu xxaslan25 5 113 15-02-2017, Saat: 02:55
Son Yorum: z1rqdym
  Arduino Kod Sorunu [ÇÖZÜLDÜ] kayabesim 7 279 26-01-2017, Saat: 23:25
Son Yorum: AlperrTG

Hızlı Menü:


Konuyu Okuyanlar:
1 Ziyaretçi