Передача текста из PROGMEM для работы в Arduino - PullRequest
0 голосов
/ 26 апреля 2018

Я хочу передать строку, хранящуюся в памяти программ, в функцию, а затем сравнить ее со строкой, последней переданной в ту же функцию (это в Arduino). Длина строки может варьироваться. В функции я хочу печатать, только если переданная новая строка НЕ ​​совпадает с последней строкой. Я читал об этом, но совершенно в тупик.

PSEUDO CODE

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

Любые предложения о том, как это сделать? Указатель *, разыменование, передача параметров в функции и т. Д. Это сбивает с толку меня, любые предложения будут с благодарностью.

1 Ответ

0 голосов
/ 27 апреля 2018
  1. Вы можете использовать тип данных String вместо массива char.
  2. Строки можно сравнивать друг с другом с помощью функции equals ()
  3. Вы можете сохранить строку, переданную функции ранее, в статической переменной внутри функции. Он будет хранить значение между вызовами.

Итак, ваша функция может выглядеть так:

void myprint(String s)
{
    static String prev_s = "";
    if (!prev_s.equals(s))
    {
        Serial.print(s);
        prev_s = s;
    }
}

//Testing:
myprint("String 1");
myprint("String 1");
myprint("String 1");
myprint("String 2");

В результате вы должны получить:

String 1
String 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...