将PROGMEM中的文本传递给Arduino中的函数

将PROGMEM中的文本传递给Arduino中的函数,arduino,Arduino,我想将存储在程序内存中的字符串传递给函数,然后将其与上次传递给同一函数的字符串进行比较(这是在Arduino中)。字符串的长度可能会有所不同。在函数中,我只想在传递的新字符串与上一个字符串不同时打印。我一直在读这篇文章,但完全被难住了 伪码 Demoprint(F("new command")); Void Demoprint(...variable or string here. NewText){ If (NewText != oldText) { Serial.pri

我想将存储在程序内存中的字符串传递给函数,然后将其与上次传递给同一函数的字符串进行比较(这是在Arduino中)。字符串的长度可能会有所不同。在函数中,我只想在传递的新字符串与上一个字符串不同时打印。我一直在读这篇文章,但完全被难住了

伪码

Demoprint(F("new command"));

Void Demoprint(...variable or string here. NewText){
   If (NewText != oldText) {
       Serial.print(NewText);
    }
    oldText = NewText;
   }
}

//or
const PROGMEM char1[] = "This is line 1 of code";
const PROGMEM char2[] = "This is line 2 of text";

Demoprint(char1);
有什么建议吗?指针*、解引用、向函数传递参数等。这让我感到困惑,如有任何建议,将不胜感激

  • 可以使用字符串数据类型而不是字符数组
  • 字符串可以通过equals()函数相互比较
  • 您可以将先前传递给函数的字符串存储在函数内部的静态变量中。它将在调用之间存储值
  • 因此,您的函数可以如下所示:

    void myprint(字符串s)
    {
    静态字符串prev_s=“”;
    如果(!上一个等于)
    {
    连续打印;
    prev_s=s;
    }
    }
    //测试:
    myprint(“字符串1”);
    myprint(“字符串1”);
    myprint(“字符串1”);
    myprint(“字符串2”);
    
    您应该得到以下结果:

    String 1
    String 2
    

    谢谢你的回复。如果这些字符串存储在ProgMEM中,那将如何改变例程。const char*PROGMEM test=“闪存内存中的第一个字符串”;const char*PROGMEM test2=“闪存内存中的第二个字符串”;const char*PROGMEM test3=“第三个Strin Flash mem”;并且对每个字符串的长度没有限制…?PROGMEM可以处理函数中的静态变量,所以您应该尝试,它必须工作。有使用PROGMEM在官方arduino文档中存储字符串的例子,所以,这一定是一种有效的方法。