Arduino代码不再使用一条指令

时间:2014-03-04 18:10:50

标签: c++ arduino avr

我正在寻找一个原因,我的arduino无法使用我的代码。

此代码有效:

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

但是当我再添加一条指令时:

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

它不起作用。谁知道为什么? Arduino甚至不在setup()上打印一个简单的'hello'串行消息。

这是我的全部功能:

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);

}

4 个答案:

答案 0 :(得分:1)

你用了多少ram?我在过去发现,当我接近arduino上可用ram的95%使用时,你开始看到腐败而没有任何警告。如果您在函数内声明,则必须计算手动使用的内存量。

祝你好运。

答案 1 :(得分:1)

有时候这些事情并不像你想要的那样有效。试试这个

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;

甚至更好

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;
}

答案 2 :(得分:0)

这不编译。如果3-6,请删除空,然后使用ifs开始使用块{}。

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

答案 3 :(得分:-1)

感谢您的回复。我的问题是由以太卡lib的RAM使用过多造成的。我刚用其他库用于enc28j60模块,它正在工作! :)

讽刺语言错误。