Setuptaki Sonsuz Döngü Problemi!! Acil Yardım..
  • merhabalar.

    setup fonksiyonu içerisinde yalnızca 1 kez çalışmasını istediğim bir program yazdım fakat ...
    //////////////////////////////////////////////////////////
    olcum basladi
    23.81
    23.81
    23.81
    23.81
    olcum basladi
    23.69
    23.69
    23.69
    23.69
    olcum basladi
    23.75
    23.75
    23.75
    23.75
    olcum basladi
    //////////////////////////////////////////////////////////

    ...sürekli bu kısımda dönüyor. nedenini bir türlü bulmadım. float dizi[DEGER] değişkenini setup içinde yerel değişken olarak tanımladığımda oluyor fakat o değişkeni ilk ölçüm değeri olarak yani referans olarak kullanmam gerekiyor.

    yerel diziyi başka bir global diziye aktarmaya çalıştığımda da (aktarma[DEGER]) bu sefer de hiç bir değer okuması yapamıyorum.

    atladığım bir kısım var ama bulamıyorum!!!

    YARDIMCI OLURSANIZ ÇOK SEVİNİRİM. Şimdiden teşekkürler.

    #include < OneWire.h>
    #include < DallasTemperature.h>

    OneWire digitalPin (2);
    DallasTemperature sensor(&digitalPin);

    #define DEGER 4
    float son;
    float aktarma[DEGER];
    float dizi[DEGER];
    float olc;

    void setup()
    {
    Serial.begin(9600);
    //sonuc(son);
    //float dizi[4];
    Serial.println ("olcum basladi");
    for (int k=0; k<=2; k++)<br /> {

    sensor.requestTemperatures();
    dizi[k] = sensor.getTempCByIndex(0);
    Serial.println (dizi[k]);
    }
    Serial.println ("olcum bitti");
    //Kabarcık
    for (int i=0;i<=DEGER;i++)<br /> for (int j=0;j<=DEGER-1;j++)<br /> if (dizi[j]>dizi[j+1])
    {
    float tut;
    tut=dizi[j];
    dizi[j]=dizi[j+1];
    dizi[j+1]=tut;
    }
    Serial.println (dizi[0]);
    Serial.println (dizi[1]);
    Serial.println (dizi[2]);
    Serial.println (dizi[3]);
    Serial.println (dizi[4]);

    /*for (int k=0; k<=DEGER; k++)<br /> {
    aktarma[k] = dizi[k];
    }*/

    float toplam=0;
    int bolum = (DEGER-1);
    do
    {
    toplam=toplam + dizi[DEGER-bolum];
    bolum--;
    Serial.println (bolum);
    }
    while (bolum>0);
    Serial.print ("toplam: ");
    Serial.println (toplam);

    olc = toplam/(DEGER-1);
    Serial.println ("olc");
    Serial.println (olc);

    }
  • Bu arada k<=DEGER for döngüsünün içerisindeki. sayıda mı problem var diye deneme yaparken değiştirmiştim ama k < =2 ya da DEGER sayısıyla alakası yok. <br />
    for (int k=0; k < =2; k++) {

    sensor.requestTemperatures();
    dizi[k] = sensor.getTempCByIndex(0);
    Serial.println (dizi[k]);
    }
  • kodun içinde loop eksikse boş olsa da onu koyun
  • loop var. ayrıca loop olmazsa program sketchi derlemiyor bile.

    yukarıdaki problemle ilgili bi fikri olan var mı?
  • Kodu inceleyemedim fakat sistemin reset yiyor olabilir mi?
  • mantıklı ama nasıl reset yiyecek, resetlenecek ki? enerji kaynaklı vb. diyorsan başka benzeri bir kod çalışıyor. fonksiyonlu halini yaptığım örneğin.
  • ve dediğim gibi float dizi[DEGER]; tanımını setup içinde yapınca çalışıyor. fakat en üste yazıp global olmasını istediğimdeyse sürekli "ölçüm başladı" kısmında sonsuz döngüye giriyor.

    global değişken olarak kullanmam şart. float dizi[DEGER]; değişkenini global bir değişkene de atayamıyorum. atadığımdaysa serimonitörden hiçbir değer döndürmüyor.

    neden?
  • kodu kendim inceledim ve şuraya kadar indirgedim.
    //////////////////////////////////////////////////////////////////////
    #include < OneWire.h>
    #include < DallasTemperature.h>

    OneWire digitalPin(2);
    DallasTemperature sensor(&digitalPin);

    #define DEGER 4
    float dizi[DEGER];

    void setup()
    {
    Serial.begin (9600);
    Serial.println ("olcum basladi");
    //float dizi[DEGER]; // ???????????!!!!
    for (int k=0; k<=DEGER; k++)<br /> {
    sensor.requestTemperatures();
    dizi[k] = (sensor.getTempCByIndex(0));
    }
    }

    void loop()
    {
    Serial.println ("deneme");
    delay (1000);
    }
    //////////////////////////////////////////////////////////////////////

    setup içinde float dizi[DEGER] değişkeni tanımlandığında oluyor fakat globalken kısır döngüye düşüyor setuptan çıkmıyor.

    bunun nedeni ne olabilir? evet sayın uzmanlar ??
  • for döngüsünü bu şekilde yaz
    for (int k=0; k<=DEGER-1; k++)
  • ben çok farklı bir yere odaklanmışım. çok sağol. ama neden yerel değişkenken oluyor da global olduğunda problem veriyor. DEGER ?

  • global değişken olduğu için sistem çöküyor. resetleniyor. lokal değişken de sistemi resetleyecek kadar sorun çıkartmıyor. lokal değişken de çalışsa da for hatalı.
  • for neden hatalı ?? bu kullanım her yerde aynı değil mi?
    dizi dizisi 5 elemanlı. DEGER-1 ile 4 ölçüm alabiliyorum. yani 4. elemanına değer atayamıyorum. loop döngüsüne giriyor program ama 5te 5 ölçmem gerekiyor.

    şu hata olayını ya da çökme olayını açıklayıcı bir şekilde anlatabilir misin? global olması neden sorun oluyor. yerelken de sorun oluyor ama çökmesine sebep olmayacak kadar diyorsun. o kadar mantık hatalı bir karmaşık for döngüsü değil. bildiğimiz sayaç sonuçta.

    sorun ne peki?
  • hayır dizi 5 elemanlı değil. 4 elemanlı. biraz temel C konularına çalışmalısınız.
  • şimdi oldu. yani ben 4 elemanlı bir yere 5 eleman yazdırmaya çalışıyorum ve o yüzden mantık hatası oluşuyor diyorsun.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook

Tagged

Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.