-
Notifications
You must be signed in to change notification settings - Fork 0
/
electronics-resistor-series
executable file
·108 lines (91 loc) · 3.63 KB
/
electronics-resistor-series
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!/usr/bin/perl
use v5.26;
use warnings;
use File::Basename;
# Colors for terminal output
my $rst = "\033[;m";
my $whi = "\033[37;1m";
my $yel = "\033[33;1m";
my $bmag = "\033[35;1m";
my $bcya = "\033[36;1m";
my $bred = "\033[31;1m";
my $bgblu = "\033[44m";
if (! -t *STDOUT) {
$rst = $whi = $yel = $bcya = $bred = $bgblu = "";
}
# Resistor series information
my %series_sets = (
"E12" => {
"tol" => "10%",
"sig" => 2,
"vals" => [1.0, 1.2, 1.5, 1.8, 2.2, 2.7, 3.3, 3.9, 4.7, 5.6, 6.8, 8.2],
"desc" => "Common, general-purpose where precision is less critical.",
},
"E24" => {
"tol" => "5%",
"sig" => 2,
"vals" => [1.0, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2.0, 2.2, 2.4, 2.7, 3.0, 3.3, 3.6, 3.9, 4.3, 4.7, 5.1, 5.6, 6.2, 6.8, 7.5, 8.2, 9.1],
"desc" => "Suitable for many consumer electronics and moderate precision circuits.",
},
"E48" => {
"tol" => "2%",
"sig" => 3,
"vals" => [1.00, 1.05, 1.10, 1.15, 1.21, 1.27, 1.33, 1.40, 1.47, 1.54, 1.62, 1.69, 1.78, 1.87, 1.96, 2.05, 2.15, 2.26, 2.37, 2.49, 2.61, 2.74, 2.87, 3.01, 3.16, 3.32, 3.48, 3.65, 3.83, 4.02, 4.22, 4.42, 4.64, 4.87, 5.11, 5.36, 5.62, 5.90, 6.19, 6.49, 6.81, 7.15, 7.50, 7.87, 8.25, 8.66, 9.09, 9.53],
"desc" => "Used in precision circuits requiring tighter tolerances.",
},
"E96" => {
"tol" => "1%",
"sig" => 3,
"vals" => [1.00, 1.02, 1.05, 1.07, 1.10, 1.13, 1.15, 1.18, 1.21, 1.24, 1.27, 1.30, 1.33, 1.37, 1.40, 1.43, 1.47, 1.50, 1.54, 1.58, 1.62, 1.65, 1.69, 1.74, 1.78, 1.82, 1.87, 1.91, 1.96, 2.00, 2.05, 2.10, 2.15, 2.21, 2.26, 2.32, 2.37, 2.43, 2.49, 2.55, 2.61, 2.67, 2.74, 2.80, 2.87, 2.94, 3.01, 3.09, 3.16, 3.24, 3.32, 3.40, 3.48, 3.57, 3.65, 3.74, 3.83, 3.92, 4.02, 4.12, 4.22, 4.32, 4.42, 4.53, 4.64, 4.75, 4.87, 4.99, 5.11, 5.23, 5.36, 5.49, 5.62, 5.76, 5.90, 6.04, 6.19, 6.34, 6.49, 6.65, 6.81, 6.98, 7.15, 7.32, 7.50, 7.68, 7.87, 8.06, 8.25, 8.45, 8.66, 8.87, 9.09, 9.31, 9.53, 9.76],
"desc" => "Precision applications; e.g. instrumentation and high-stability circuits.",
},
# Additional series can be added here
);
my $scriptname = basename $0;
if (@ARGV < 1) {
say STDERR "\n$yel(Please provide a series name on commandline.)$rst\n";
usage();
exit;
}
my $series = uc($ARGV[0]);
if (!exists $series_sets{$series}) {
say STDERR "\nInvalid series provided!\n";
usage();
exit;
}
# Display series information
sub display_series_info {
my ($series) = @_;
my $info = $series_sets{$series};
say "Resistor Series: $whi$series$rst";
say "Tolerance: $yel$info->{tol}$rst";
say "Significant Figures: $bcya$info->{sig}$rst";
say "Description: $info->{desc}";
say "\nStandard Values (Ohms):";
say join(", ", map { sprintf("%.2f", $_) } @{$info->{vals}});
say "";
}
sub usage {
my $series_list = join(", ", sort keys %series_sets);
print <<~"EOT";
Usage: $scriptname [resistor series]
Available Series: $series_list
Example: $scriptname e24
This will display the tolerance, significant figures, and standard resistor values for the specified series.
Series Descriptions:
EOT
foreach my $series (sort keys %series_sets) {
my $nvals = scalar @{$series_sets{$series}{vals}};
my $desc = $series_sets{$series}{desc};
my @vals = @{$series_sets{$series}{vals}};
# Get the first 3 and last 3 values
my @first_vals = @vals[0..2];
my @last_vals = @vals[-3..-1];
# Format the first and last values for display
my $vals_preview = join(", ", @first_vals) . " ... " . join(", ", @last_vals);
say "$bmag$series$rst ($nvals values)";
say " $desc";
say " $vals_preview";
}
}
display_series_info($series);