birden fazla döngü oluşturmak

ben projemde birden fazla loop oluşturamıyorum mesela; http://otomasyonik.com/deneme.txt linkteki programda 8 nolu pindeki butona basmadığım halde ekranda sıcaklik1 bilgisi görunuyor. ben sadece 8 nolu butona basılınca gorunsun ıstıyorum mesela. birden fazla dongu ıcınde olsa nasıl olur. nasıl olusturulur. bazı projelerde goruyorum ne işe yarıyor bu dongu.

Donanımda sorun olmadığını kontrol edin, koda sonra bakalım. Butona basmadığınızda 8 nolu pinin gerilimi ne? 0 olduğuna emin misiniz? Butonu boş verip Arduino’nun 5V pininden 8 nolu bacağa bir iletken değdirip bırakmayı deneyin.

donanımsal bir problem gorunmuyor +5Vdan 8 nolu pine kablo attım ama yine aynı. zatan sorun 8 nolu pine basmadan gorunmesınde.

1- GND ve 5V’a bağlı ayrı kabloları değdirip çektiğinizde değişme var mı? 2- GND’yi dokundurduğunuzda değişiyor mu? 3- İlk defa basana kadar görüntülenmiyor, bastıktan sonra ekrandan gitmiyor gibi bir durum var mı? 4- Enerjiyi verir vermez hemen Sıcaklık1 mi görüntüleniyor? 5- Enerji vermeden önce 8 pinini GND’ye çekin, o şekilde enerji verin. Bu şekilde ne oluyor? Bunları teker teker cevaplarsanız problem yazılımda mı, evetse neresinde anlaşılacak. Ondan sonra kodlarınıza kendi IDE’mde bakarım.

8 nolu pin boşta iken ekranda 1sn ye aralıklarla sıcaklık bilgileri gorunuyor. 8 nolu pini 5volta değirdiğimde herhangi bir değişiklik olmuyor yine sıra ile geliyor bilgiler. 8nolu pini GND ye değirdiğimde ekranda sadece sıcaklık bilgisi kalıyor. Enerji verince önce sıcaklık bilgisi sonra sıcaklık 1 bilgisi geliyor ekrana. 8nolu pine bağlı butonu GNDye bağladım butona basınca sıcaklık bilgisi geliyor bırakınca eski haline donuyor. aslında bu işlemin tersini yazmıştım kodumda basınca sıcaklık1 bilgisi gelsin ekrandan hiç gitmesin butonu bıraksam dahi. taki esc butonuna basana kadar. enerji vermeden önce 8 nolu pini gndye cektım ardından enerjı verdım sıcaklık1 bilgisi ekrana gelmedi.

pinMode() fonksiyonunu kullanmamışsınız. Buton için kullanmanız gerekiyor. Kodları değiştirmeden sadece bunu yazıp deneyin. Olmazsa aşağıda kodun modifiye edilmiş hali var. Butonun basılı olduğunu kontrol ettiğiniz fonksiyonun(if(butonDurumu==HIGH)) sonundaki delayin hemen altına “butonDurumu==0;” ekleyin. 1 kere bastığınızda 1 saniye boyunca gösterecek. Sonra buton durumunu 0’a çekecek, buton durumunun high olmasını bekleyecek. Eğer 1 kere basayım, sürekli göstersin diyorsanız da aynı yere “butonDurumu==1” koyun. Burada her halukarda Sıcaklık değeri 1 saniye gösterilecek. Sıcaklığın 1 kere görünmesini, bir daha görünmemesini istiyorsan ve Sıcaklık 1 değeri sürekli gösterilsin istiyorsan digitalWrite(ledpini, HIGH) 'ın hemen altındaki kodu aşağıdakiyle değiştir. gerilim = analogRead(sicaklikPin); // Sensörden gelen değeri oku gerilim = (gerilim / 1023) * 5000; // mV cinsinden gerilimi buluyoruz sicaklik = gerilim / 10.0; // Gerilim değerini sıcaklığa çeviriyoruz if (sicaklikDurumu==0) { lcd.setCursor(0,0); lcd.print(“Sicaklik:”); lcd.setCursor(0,1); lcd.print(sicaklik); delay(1000); //Saniyede bir ölçüm gönderiyoruz sicaklikDurumu==1; } Sıcaklık değerinin 1 kere gösterildiği, Sıcaklık 1 değerinin buton basılı olduğu sürece gösterildiği kodlar aşağıdaki gibi. Bunu bir deneyin. include <liquidcrystal.h>
//Değişkenleri tanımlıyoruz
float sicaklik;
float sicaklik1;
float gerilim;
float gerilim1;
int sicaklikPin = 0;
int sicaklikPin1 = 1;
unsigned long time;
int ledpini = 13;
int butonPin = 8; // butonun bağlı olduğu pin numarası
int buttonDurumu = 0;
int sicaklikDurumu = 0;// Buton girişinin durumu (HIGH veya LOW)
// LCD bağlantılarımızı ile LCD’yi başlatıyoruz
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
Serial.begin(9600); //Seri haberleşmeyi başlat (9600 bps)
// LCD?mizin başlangıç ayarı 16 karakter x 2 satır
lcd.begin(16, 2);
}
void loop()
{

time = millis();
//prints time since program started

// wait a second so as not to send massive amounts of data
delay(1000);
if (time >=10000)
{
digitalWrite(ledpini, HIGH);
}

                              gerilim = analogRead(sicaklikPin); // Sensörden gelen değeri oku
                          gerilim = (gerilim / 1023) * 5000; // mV cinsinden gerilimi buluyoruz
                          sicaklik = gerilim / 10.0; // Gerilim değerini sıcaklığa çeviriyoruz
                          
                          
    if (sicaklikDurumu==0)                   
                        {                                                                             
                          lcd.setCursor(0,0);
                          lcd.print("Sicaklik:");
                          lcd.setCursor(0,1);
                          lcd.print(sicaklik);  
                          delay(1000); //Saniyede bir ölçüm gönderiyoruz
                          sicaklikDurumu==1;
                        }

buttonDurumu = digitalRead(butonPin);
{

                  if (buttonDurumu == HIGH) 
                  {
                  gerilim1 = analogRead(sicaklikPin1); // Sensörden gelen değeri oku
                  gerilim1 = (gerilim1 / 1023) * 5000; // mV cinsinden gerilimi buluyoruz
                  sicaklik1 = gerilim1 / 10.0; // Gerilim değerini sıcaklığa çeviriyoruz                   
                  lcd.setCursor(0,0);
                  lcd.print("Sicaklik1:");
                  lcd.setCursor(0,1);
                  lcd.print(sicaklik1);  
                  delay(1000); 
                  butonDurumu==1;
                  }

}

}</liquidcrystal.h>