今回はブレッドボード画像生成コマンドに、LEDとICを追加します。
まずはLED。
抵抗を作るときに作ったput_stripedwireを使います。ワイヤーの中間点が得られるので、そこに円を描くだけです。
sub put_led{ my $color = shift; my($xxc,$yyc) = put_stripedwire(@_); print qq#<circle cx="$xxc" cy="$yyc" r="9" fill="$color" />#; }
色を指定できるようにしました。
ついでに、座標の指定が難しいのでブレッドボードに記載してあるa〜iの文字でも座標指定できるようにしておきます。
foreach (@ARGV){ s/a(\d+)/5,$1/g; s/b(\d+)/6,$1/g; s/c(\d+)/7,$1/g; s/d(\d+)/8,$1/g; s/e(\d+)/9,$1/g; s/f(\d+)/10,$1/g; s/g(\d+)/11,$1/g; s/h(\d+)/12,$1/g; s/i(\d+)/13,$1/g; s/j(\d+)/14,$1/g; put_resistor(split /,/,$_) if(/R$/); put_wire(split /,/,$_) if(/W$/); put_led(split /,/,$_) if(/L$/); }
使ってみます。
~$ . bread.sh red,d10,g10,L blue,d12,g12,L yellow,d14,g14,L green,d16,g16,L orange,d18,g18,L
次はICです。
四角を描くのは手間がかかるだけで、特に難しくありません。
sub put_ic{ my($x1,$y1, $x2,$y2) = @_; my($xx1,$yy1) = get_xxyy($x1,$y1); my($xx2,$yy2) = get_xxyy($x2,$y2); $xx1 +=6; $xx2 -=5; $yy1 -=5; $yy2 +=5; $w = $xx2 - $xx1; $h = $yy2 - $yy1; print qq#<rect x="$xx1" y="$yy1" width="$w" height="$h" fill="black"></r for($i=$y1; $i<=$y2; $i++){ my($ix,$iy) = get_xxyy($x1,$i); $iy-=4; print qq#<rect x="$ix" y="$iy" width="7" height="10" fill="silve my($ix,$tmp) = get_xxyy($x2,$i); $ix-=6; print qq#<rect x="$ix" y="$iy" width="7" height="10" fill="silve } $arc_xx2 = $xx1+$w/2; $arc_yy2 = $yy1+10; $arc_xx1 = $arc_xx2-10; $arc_yy1 = $yy1; $arc_xx3 = $arc_xx2+10; $arc_yy3 = $yy1; print qq#<path d="M $arc_xx1 $arc_yy1 Q $arc_xx1 $arc_yy2 $arc_xx2 $arc_ }
使ってみます。
~$ . bread.sh e1,f4,I e6,f12,I d14,h27,I
動作しそうな回路を組んでみます。
~$ . bread.sh e14,f17,I red,j14,3,12,W black,2,15,a17,W d15,d9,300,R red,c9,2,8,L
何のICかは分かりませんが、いい感じになってきました。
コメント