1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
#!/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($stderr)
$stderr.write("\nBOM:\n")
bom = nl.bom
bom.keys.sort.each do | item |
$stderr.write(" #{bom[item]}\t#{item}\n")
end
|