summaryrefslogtreecommitdiff
path: root/test.rb
blob: b524539be36fc9ad8aad3c85a6ea7a060bb613f2 (plain) (blame)
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
64
65
66
67
#!/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