Question

Im looking for a reason that my arduino won't work with my code.

This code works:

Events *wsk;
if(Day==0)
    wsk = &Pon;
if(Day==1)
    wsk = &Wt;

But when i add one more instruction like:

Events *wsk;
if(Day==0)
    wsk = &Pon;
if(Day==1)
    wsk = &Wt;
if(Day==2)
    wsk = &Sr;

It's not working. Any one know why ? Arduino are not printing even a simple 'hello' serial message on setup().

Here is my full function:

void showMeEvents(int Day){
    String buffer="EU";
    zdarzenia *wsk;

    if(Day==0)
        wsk = &Pon;
    if(Day==1)
        wsk = &Wt;

    //not working when i add this part from here:

    if(Day==3)
        wsk = &Sr;
    if(Day==4)
        wsk = &Czw;
    if(Day==5)
        wsk = &Pia;
    if(Day==6)
        wsk = &So;

    // to here 

    buffer+=0;
    if(wsk->eventsInDay<10)
        buffer+=0;
    buffer+=wsk->eventsInDay;

    for(int i=0; i<wsk->eventsInDay; i++){
        buffer += wsk->type;
        if(wsk->eventPin[i]<10)
            buffer += 0;
        buffer += wsk->eventPin[i];
        buffer += wsk->alwaysOn[i];
        if(wsk->fromH[i]<10)
            buffer += 0;
        buffer += wsk->fromH[i];
        if(wsk->fromM[i]<10)
            buffer += 0;
        buffer += wsk->fromM[i];
        if(wsk->toH[i]<10)
            buffer += 0;
        buffer += wsk->toH[i];
        if(wsk->toM[i])
            buffer += 0;
        buffer += wsk->toM[i];
        if(wsk->toS[i]<10)
            buffer += 0;
        buffer += wsk->toS[i];
    }
    Serial.println(buffer);

}
Était-ce utile?

La solution

How much ram are you using? I've found in the past that when I approach ~95% usage of the available ram on the arduino you begin to see corruption without any warnings. You'll have to calculate how much memory your using by hand if you're declaring within functions.

Good luck.

Autres conseils

Sometimes these things don't work the way you intend them to. Try this

if(Day==0)
    wsk = &Pon;
else if(Day==1)
    wsk = &Wt;
else if(Day==3)
    wsk = &Sr;
else if(Day==4)
    wsk = &Czw;
else if(Day==5)
    wsk = &Pia;
else if(Day==6)
    wsk = &So;

or even better

switch(Day)
{
    case 0: { wsk = &Pon; break; }
    case 1: { wsk = &Wt; break; }
    case 3: { wsk = &Sr; break; }
    case 4: { wsk = &Czw; break; }
    case 5: { wsk = &Pia; break; }
    case 6: { wsk = &So; break; }
    default: break;
}

This does not compile. Remove the empty if 3-6 and start using blocks {} with your ifs.

if(Day==0)
    wsk = &Pon;
if(Day==1)
    wsk = &Wt;
if(Day==3)
if(Day==4)
if(Day==5)
if(Day==6)

Thanks for replys. My problem was caused by too much RAM usage by ethercard lib. I just used other library for enc28j60 module and it's working ! :).

Sry for language mistakes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top