/* オシロに文字を書く。 2015 正月 */ int xNow=0; int yNow=0; void setup(){ TCCR1B &= B11111000; // Pin9,10のPWM周波数を31kHzに設定 TCCR1B |= B00000001; Serial.begin(9600); pinMode(8, OUTPUT); // blanking out pinMode(9, OUTPUT); // X PWM out pinMode(10, OUTPUT); // Y PWM out } void loop(){ moveTo(0,90); // 2 delay(2); drawTo(5,100); delay(1); drawTo(15, 100); delay(1); drawTo(20,90); delay(1); drawTo(0,55); delay(3); drawTo(20,55); // drawTo(20,55); delay(2); moveTo(25,90); // 0 drawTo(30,100); drawTo(40,100); drawTo(45,90); drawTo(45,65); drawTo(40,55); drawTo(30,55); drawTo(25,65); drawTo(25,90); drawTo(25,90); moveTo(55,95); // 1 drawTo(60,100); drawTo(60,55); drawTo(60,55); delay(1); moveTo(75,60); // 5 drawTo(80,55); drawTo(90,55); drawTo(95,60); drawTo(95,75); drawTo(90,80); drawTo(75,80); drawTo(75,100); drawTo(95,100); delay(2); moveTo(15,40); // 正 delay(2); drawTo(45,40); // 上の線 delay(2); moveTo(30,40); // 縦の線 delay(1); drawTo(30,0); // delay(1); moveTo(15,0); delay(2); drawTo(45,0); delay(2); moveTo(20,20); delay(1); drawTo(20,0); delay(1); moveTo(30,20); delay(1); drawTo(40,20); delay(1); moveTo(60,0); // 月 delay(2); drawTo(60,40); drawTo(60,40); drawTo(80,40); drawTo(80,0); delay(2); moveTo(60,25); delay(2); drawTo(80,25); delay(1); moveTo(60,15); delay(1); drawTo(80,15); delay(3); } void drawTo(int x, int y){ // 指定座標まで線を描く int leng,xx,yy; leng = sqrt((x - xNow)*(x - xNow) + (y - yNow)*(y - yNow)); Serial.println(leng); for( int n=0; n<=leng; n++){ xx=xNow + ((x-xNow)*n/leng); yy=yNow + ((y-yNow)*n/leng); // Serial.println(xx); analogWrite(9,xx); analogWrite(10,yy); delayMicroseconds(5); } xNow=x; yNow=y; } void moveTo(int x, int y){ // 線の開始点を移動(線は書かない) digitalWrite(8, HIGH); // オシロをブランキング xNow=x; yNow=y; analogWrite(9, xNow); analogWrite(10, yNow); delay(2); digitalWrite(8, LOW); // CRT ON }