Skip to content

Commit

Permalink
Add a Twitter viewer.
Browse files Browse the repository at this point in the history
  • Loading branch information
kzys committed Dec 2, 2011
1 parent 9ca8d25 commit db7158f
Show file tree
Hide file tree
Showing 3 changed files with 154 additions and 0 deletions.
29 changes: 29 additions & 0 deletions marquee/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Your Arduino environment.
ARD_REV = 22
ARD_HOME = /Applications/Arduino.app/Contents/Resources/Java
AVR_HOME = $(ARD_HOME)/hardware/tools/avr
ARD_BIN = $(AVR_HOME)/bin
AVRDUDE = $(ARD_BIN)/avrdude
AVRDUDE_CONF = $(AVR_HOME)/etc/avrdude.conf

# Your favorite serial monitor.
MON_CMD = echo
MON_SPEED = 9600

# Board settings.
BOARD = uno
PORT = /dev/tty.usbmodem1d11
PROGRAMMER = stk500v1

# Where to find header files and libraries.
INC_DIRS = ./inc
LIB_DIRS = $(addprefix $(ARD_HOME)/libraries/, $(LIBS))
LIBS = LiquidCrystal

include ../Makefile.master

namecard.pde: marquee.h

test: test.cpp
cc -o $@ $^
./test
69 changes: 69 additions & 0 deletions marquee/namecard.pde
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#include <LiquidCrystal.h>

LiquidCrystal lcd(13, 2, 12, 4, 8, 7);

struct Marquee {
int count_;
int next_;
char buffer_[20 + 1];
char message_[200];
};

void marquee_add_char(Marquee* m, char c) {
m->message_[m->next_] = c;
m->next_++;
}

void marquee_update(Marquee* m) {
for (int i = 0; i < 20; i++) {
char c = m->message_[(m->count_ + i) % (strlen(m->message_)+1)];
if (c == '\0') {
c = '\x14';
}
m->buffer_[i] = c;
}
m->buffer_[20] = '\0';

m->count_++;
if (m->count_ > strlen(m->message_)) {
m->count_ = 0;
}
}

Marquee marquee;

void setup() {
Serial.begin(9600);

lcd.begin(20, 2);
lcd.setCursor(0, 0);

marquee.count_ = 0;
marquee.next_ = 0;
marquee.message_[0] = '\0';
}

void receive() {
while (Serial.available()) {
int c = Serial.read();
if (c == '\n') {
marquee_add_char(&marquee, '\0');
marquee.next_ = 0;
} else {
marquee_add_char(&marquee, c);
}
}
}

void loop() {
marquee_update(&marquee);

char* ptr = marquee.buffer_;
lcd.setCursor(0, 0);
lcd.print(ptr);

receive();

delay(200);
}

56 changes: 56 additions & 0 deletions twitter/client.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
var twitter_node = require('twitter-node'),
serialport = require('serialport'),
child_process = require('child_process'),
q = require('q');

var mecab = child_process.spawn('mecab', [ '-Oyomi' ]);

function katakana(src) {
var result = q.defer();
mecab.stdout.on('data', function (data) {
result.resolve((''+data).replace(/\n$/, ''));
});
mecab.stdin.write(src + '\n');
return result.promise;
}

function hankakuShiftJIS(src) {
var result = q.defer();

var nkf = child_process.spawn('nkf', [
'-s',
'-Z4'
]);
nkf.stdout.on('data', function (data) {
result.resolve(data);
});
nkf.stdin.write(src);
nkf.stdin.end();
return result.promise;
}

var port = new serialport.SerialPort('/dev/tty.usbmodem1d11', {
baudrate: 9600
});

var messages = [];
setInterval(function () {
console.log(messages[0]);
katakana(messages[0]).then(function (s) {
hankakuShiftJIS(s + ' \n').then(function (bytes) {
port.write(bytes);
});
});
}, 1000 * 10);

var twitter = new twitter_node.TwitterNode({
user: process.argv[2],
password: process.argv[3]
});
twitter.addListener('tweet', function (message) {
messages[0] = message.text;
});

twitter.track(process.argv[4]);

twitter.stream();

0 comments on commit db7158f

Please sign in to comment.