今回はブレッドボード画像生成コマンドに、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かは分かりませんが、いい感じになってきました。



コメント