clayfish2009-02-18

arduino というか atmega168 は RAM がとても小さいので*1, ちょっと複雑なことをしようとするとすぐにメモリ不足に陥ります.
そんなわけでリングバッファを作りました. コードは gist 上におきました.

使い方はこんなかんじ. ぜんぜん arduino らしさがなくてすいません… 割り切って arduino っぽいクラスにすべきか…

#include <CircularBuffer.h>

int led = 13;
typedef CircularBuffer<unsigned, 32> Buffer;
Buffer buffer;
unsigned char n = 0;

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

void loop() {
  buffer.push(n++);
  
  if (Buffer::Half < buffer.remain()) {
    for (int i = 0; i < 5; i++) {
      Serial.print(buffer.pop(), DEC);
      Serial.print(",");
    }
    Serial.println();
    digitalWrite(led, HIGH);
  } else {
    digitalWrite(led, LOW);
  }
  delay(200);
}

このスケッチを動かすとシリアル経由で数字の列が送られてきつつ, LED がピカピカ点滅するはずです.
使ってみてください.

*1:1KB!!