#!/usr/bin/ruby require "./lace" require "./library" def led(color="red") comp("D", "0805", "LED", "1.5V 10mA #{color}") - r(220) end def inverter() $inverters ||= [] if $inverters.empty? u = comp("U", "TSOP-14", "74HCT04", "hex inverter") $vcc - u[14] - c("100n") - 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 def probe(attenuation=20, impedance=50) jack = comp("J", "SMB", "SMB jack", "#{attenuation}x #{impedance}Ω probe") jack[2] - jack[3] - jack[4] - jack[5] if attenuation == 1 pair(jack[1], jack[2]) else pair(r((attenuation-1)*impedance) - jack[1], jack[2]) end 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("x̅") - led("blue") - $gnd x - probe - $gnd end nl.kicad $stdout.write("\n") nl.summary($stderr) $stderr.write("\nBOM:\n") bom = nl.bom bom.keys.sort.each do | item | $stderr.write(" #{bom[item]}\t#{item}\n") end