#!/usr/bin/ruby require "./lace" def r(size) comp("R", "0805", "resistor", size) end def c(size) comp("C", "0805", "capacitor", size) end def led(color="red") comp("D", "0805", "LED", "1.5V 10mA #{color}") - r("220ohm") end def inverter() $inverters ||= [] if $inverters.empty? u = comp("U", "TSOP-14", "74HCT04", "hex inverter") $vcc - u[14] - c("100nF") - u[7] - $gnd $inverters += [ pair(u[1], u[2]), pair(u[3], u[4]), pair(u[5], u[6]), pair(u[9], u[8]), pair(u[11], u[10]), pair(u[13], u[12]), ] end $inverters.shift end def btn(color="black") sw = comp("SW", "BTN", "SPST button", color) sw[1] - sw[4] sw[2] - sw[3] pair(sw[1], sw[3]) end nl = Lace::Netlist.new do $vcc = net("vcc") $gnd = net("gnd") $vcc - led - $gnd $vcc - btn - led("green") - $gnd $vcc - btn("orange") - inverter() - led("white") - $gnd x = $vcc - btn("white") x - net("x") - led("amber") - $gnd x - inverter() - net("xbar") - led("blue") - $gnd end nl.kicad $stdout.write("\n") nl.summary $stdout.write("\nBOM:\n") bom = nl.bom bom.keys.sort.each do | item | $stdout.write(" #{bom[item]}\t#{item}\n") end