ブレッドボードの絵を描くコマンドを作る(LED、IC編)

今回はブレッドボード画像生成コマンドに、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

bread4-001

次は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

bread4-002

動作しそうな回路を組んでみます。

~$ . 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かは分かりませんが、いい感じになってきました。
bread4-003

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA