Pull to refresh

Comments 2

Можно ведь экономя ценное место на плате
int ledPin = 13;

int readline(int readch, char *buffer, int len)
{
  static int pos = 0;
  int rpos;

  if (readch > 0) {
    switch (readch) {
      case '\n': // Ignore new-lines
        break;
      case '\r': // Return on CR
        rpos = pos;
        pos = 0;  // Reset position index ready for next time
        return rpos;
      default:
        if (pos < len-1) {
          buffer[pos++] = readch;
          buffer[pos] = 0;
        }
    }
  }
  // No end of line has been found, so return -1.
  return -1;
}

void setup()
{
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
}

void loop()
{
  static char buffer[80];
  if (readline(Serial.read(), buffer, 80) > 0) {
    if (strcmp(buffer, "ledon") == 0) {
        digitalWrite(ledPin, HIGH);
        Serial.println("13 pin LED is switched ON.");
    } else if (strcmp(buffer, "ledoff") == 0) {
        digitalWrite(ledPin, LOW);
        Serial.println("13 pin LED is switched OFF.");
    } else if (strcmp(buffer, "help") == 0) {
        Serial.println("ledon - switch on 13 pin LED.");
        Serial.println("ledoff - switch off 13 pin LED.");
    }
  }
}
ну, я считаю, что ради удобства можно пожертвовать свободным местом, если, конечно, задача позволяет.

Ради интереса скомпилировал ваш скетч для Arduino Leonardo:
Скетч использует 4 456 байт (15%) памяти устройства. Всего доступно 28 672 байт


Мой вариант с аналогичным функционалом (подрезал статические буферы до 80ти байт и исключил сообщения для команды help):
Скетч использует 7 028 байт (24%) памяти устройства. Всего доступно 28 672 байт.


у меня, конечно, прошивка побольше, но место еще есть
Sign up to leave a comment.

Articles