Resistor colors: Show additional tolerance band.
It always shows one extra color (gold = 5%). This is the most common value and showing this makes it a lot more obvious how the colors match up with a real resistor.master
parent
14d86c827f
commit
7aef13b7e3
|
@ -33,26 +33,29 @@ attribution twitter => 'joewalnes',
|
|||
# These hex codes came from
|
||||
# http://en.wikipedia.org/wiki/Electronic_color_code
|
||||
my %digits_to_colors = (
|
||||
-2 => { hex => '#c0c0c0', label => '#000', name => 'silver', multiplier => '0.01'},
|
||||
-1 => { hex => '#cfb53b', label => '#000', name => 'gold' , multiplier => '0.1'},
|
||||
0 => { hex => '#000000', label => '#fff', name => 'black' , multiplier => '1'},
|
||||
1 => { hex => '#964b00', label => '#fff', name => 'brown' , multiplier => '10'},
|
||||
2 => { hex => '#ff0000', label => '#fff', name => 'red' , multiplier => '100'},
|
||||
3 => { hex => '#ffa500', label => '#000', name => 'orange', multiplier => '1K'},
|
||||
4 => { hex => '#ffff00', label => '#000', name => 'yellow', multiplier => '10K'},
|
||||
5 => { hex => '#9acd32', label => '#000', name => 'green' , multiplier => '100K'},
|
||||
6 => { hex => '#6495ed', label => '#000', name => 'blue' , multiplier => '1M'},
|
||||
7 => { hex => '#ee82ee', label => '#000', name => 'purple', multiplier => '10M'},
|
||||
8 => { hex => '#a0a0a0', label => '#000', name => 'gray' , multiplier => '100M'},
|
||||
9 => { hex => '#ffffff', label => '#000', name => 'white' , multiplier => '1000M'},
|
||||
-2 => { hex => '#c0c0c0', label => '#000', name => 'silver', multiplier => '0.01' , tolerance => '10%' },
|
||||
-1 => { hex => '#cfb53b', label => '#000', name => 'gold' , multiplier => '0.1' , tolerance => '5%' },
|
||||
0 => { hex => '#000000', label => '#fff', name => 'black' , multiplier => '1' , tolerance => undef },
|
||||
1 => { hex => '#964b00', label => '#fff', name => 'brown' , multiplier => '10' , tolerance => '1%' },
|
||||
2 => { hex => '#ff0000', label => '#fff', name => 'red' , multiplier => '100' , tolerance => '2%' },
|
||||
3 => { hex => '#ffa500', label => '#000', name => 'orange', multiplier => '1K' , tolerance => undef },
|
||||
4 => { hex => '#ffff00', label => '#000', name => 'yellow', multiplier => '10K' , tolerance => undef },
|
||||
5 => { hex => '#9acd32', label => '#000', name => 'green' , multiplier => '100K' , tolerance => '0.5%' },
|
||||
6 => { hex => '#6495ed', label => '#000', name => 'blue' , multiplier => '1M' , tolerance => '0.25%' },
|
||||
7 => { hex => '#ee82ee', label => '#000', name => 'purple', multiplier => '10M' , tolerance => '0.1%' },
|
||||
8 => { hex => '#a0a0a0', label => '#000', name => 'gray' , multiplier => '100M' , tolerance => '0.05%' },
|
||||
9 => { hex => '#ffffff', label => '#000', name => 'white' , multiplier => '1000M', tolerance => undef },
|
||||
);
|
||||
|
||||
my $default_tolerance = -1; # 5% / gold
|
||||
|
||||
handle matches => sub {
|
||||
my $input = shift;
|
||||
my $value = parse_value($input);
|
||||
if (defined $value && ($value == 0 || ($value <= 99900000000 && $value >= 1))) {
|
||||
$value = round_to_significant_places($value, 2);
|
||||
my @digits = number_to_color_digits($value);
|
||||
my $tolerance = $default_tolerance; # Currently always 5%.
|
||||
my @digits = number_to_color_digits($value, $tolerance);
|
||||
return render($value, \@digits);
|
||||
}
|
||||
return;
|
||||
|
@ -93,16 +96,17 @@ sub round_to_significant_places {
|
|||
return nearest(pow(10, int(floor(log10(abs($value))) - ($significant - 1))), $value);
|
||||
}
|
||||
|
||||
# Given ohm rating as integer (e.g. 470000), return
|
||||
# array of color digits (e.g. 4, 7, 0, 3). See %digits_to_colors.
|
||||
# Given ohm rating as integer, and tolerance digit (e.g. 470000, -1), return
|
||||
# array of color digits (e.g. 4, 7, 0, 3, -1). See %digits_to_colors.
|
||||
sub number_to_color_digits {
|
||||
my $value = shift;
|
||||
return (0, 0, 0) if $value == 0; # special case
|
||||
my ($value, $tolerance) = @_;
|
||||
return (0, 0, 0, $tolerance) if $value == 0; # special case
|
||||
my @value_digits = split(//, $value * 100);
|
||||
return (
|
||||
$value_digits[0] || 0,
|
||||
$value_digits[1] || 0,
|
||||
scalar(@value_digits) - 4);
|
||||
scalar(@value_digits) - 4,
|
||||
$tolerance);
|
||||
};
|
||||
|
||||
# Given a numeric value, format it like '3.2M' etc.
|
||||
|
@ -134,14 +138,28 @@ sub render {
|
|||
my $style = "display:inline-block;background-color:$hex;color:$label;"
|
||||
. "border:1px solid #c8c8c8;margin-top:-1px;padding:0px 4px;"
|
||||
. "border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;";
|
||||
if ($index == scalar(@$digits) - 1) {
|
||||
my $multiplier = $digits_to_colors{$digit}{multiplier};
|
||||
$text .= " $name (\x{00D7}$multiplier)";
|
||||
$html .= " <span style='$style'>$name (×$multiplier)</span>";
|
||||
my ($text_prefix, $html_prefix, $display_digit);
|
||||
if ($index == scalar(@$digits) - 2) {
|
||||
# multiplier digit
|
||||
$text_prefix = "\x{00D7}";
|
||||
$html_prefix = '×';
|
||||
$display_digit = $digits_to_colors{$digit}{multiplier};
|
||||
} elsif ($index == scalar(@$digits) - 1) {
|
||||
# tolerance digit
|
||||
$text_prefix = "\x{00B1}";
|
||||
$html_prefix = '±';
|
||||
$display_digit = $digits_to_colors{$digit}{tolerance};
|
||||
} else {
|
||||
$text .= " $name ($digit),";
|
||||
$html .= " <span style='$style'>$name ($digit)</span>";
|
||||
# numeric digits
|
||||
$text_prefix = '';
|
||||
$html_prefix = '';
|
||||
$display_digit = $digit;
|
||||
}
|
||||
$text .= " $name ($text_prefix$display_digit)";
|
||||
if ($index != scalar(@$digits - 1)) {
|
||||
$text .= ','; # Comma delimit all but last
|
||||
}
|
||||
$html .= " <span style='$style'>$name ($html_prefix$display_digit)</span>";
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -14,62 +14,62 @@ ddg_goodie_test(
|
|||
)],
|
||||
|
||||
# Check trigger kicks in.
|
||||
"330 ohms" => test_zci("330\x{2126} (ohms) resistor colors: orange (3), orange (3), brown (\x{00D7}10)", html => qr/./),
|
||||
"330 ohm" => test_zci("330\x{2126} (ohms) resistor colors: orange (3), orange (3), brown (\x{00D7}10)", html => qr/./),
|
||||
"330 \x{2126}" => test_zci("330\x{2126} (ohms) resistor colors: orange (3), orange (3), brown (\x{00D7}10)", html => qr/./),
|
||||
"330ohms" => test_zci("330\x{2126} (ohms) resistor colors: orange (3), orange (3), brown (\x{00D7}10)", html => qr/./),
|
||||
"330ohm" => test_zci("330\x{2126} (ohms) resistor colors: orange (3), orange (3), brown (\x{00D7}10)", html => qr/./),
|
||||
"330\x{2126}" => test_zci("330\x{2126} (ohms) resistor colors: orange (3), orange (3), brown (\x{00D7}10)", html => qr/./),
|
||||
"330 ohms" => test_zci("330\x{2126} (ohms) resistor colors: orange (3), orange (3), brown (\x{00D7}10), gold (\x{00B1}5%)", html => qr/./),
|
||||
"330 ohm" => test_zci("330\x{2126} (ohms) resistor colors: orange (3), orange (3), brown (\x{00D7}10), gold (\x{00B1}5%)", html => qr/./),
|
||||
"330 \x{2126}" => test_zci("330\x{2126} (ohms) resistor colors: orange (3), orange (3), brown (\x{00D7}10), gold (\x{00B1}5%)", html => qr/./),
|
||||
"330ohms" => test_zci("330\x{2126} (ohms) resistor colors: orange (3), orange (3), brown (\x{00D7}10), gold (\x{00B1}5%)", html => qr/./),
|
||||
"330ohm" => test_zci("330\x{2126} (ohms) resistor colors: orange (3), orange (3), brown (\x{00D7}10), gold (\x{00B1}5%)", html => qr/./),
|
||||
"330\x{2126}" => test_zci("330\x{2126} (ohms) resistor colors: orange (3), orange (3), brown (\x{00D7}10), gold (\x{00B1}5%)", html => qr/./),
|
||||
|
||||
# Various multipliers
|
||||
"472000 ohms" => test_zci("470K\x{2126} (ohms) resistor colors: yellow (4), purple (7), yellow (\x{00D7}10K)", html => qr/./),
|
||||
"400000 ohms" => test_zci("400K\x{2126} (ohms) resistor colors: yellow (4), black (0), yellow (\x{00D7}10K)", html => qr/./),
|
||||
"12300 ohms" => test_zci("12K\x{2126} (ohms) resistor colors: brown (1), red (2), orange (\x{00D7}1K)", html => qr/./),
|
||||
"472000 ohms" => test_zci("470K\x{2126} (ohms) resistor colors: yellow (4), purple (7), yellow (\x{00D7}10K), gold (\x{00B1}5%)", html => qr/./),
|
||||
"400000 ohms" => test_zci("400K\x{2126} (ohms) resistor colors: yellow (4), black (0), yellow (\x{00D7}10K), gold (\x{00B1}5%)", html => qr/./),
|
||||
"12300 ohms" => test_zci("12K\x{2126} (ohms) resistor colors: brown (1), red (2), orange (\x{00D7}1K), gold (\x{00B1}5%)", html => qr/./),
|
||||
|
||||
# Rounding
|
||||
"1.2345 ohms" => test_zci("1.2\x{2126} (ohms) resistor colors: brown (1), red (2), gold (\x{00D7}0.1)", html => qr/./),
|
||||
"1.2555 ohms" => test_zci("1.3\x{2126} (ohms) resistor colors: brown (1), orange (3), gold (\x{00D7}0.1)", html => qr/./),
|
||||
"12.345 ohms" => test_zci("12\x{2126} (ohms) resistor colors: brown (1), red (2), black (\x{00D7}1)", html => qr/./),
|
||||
"12.555 ohms" => test_zci("13\x{2126} (ohms) resistor colors: brown (1), orange (3), black (\x{00D7}1)", html => qr/./),
|
||||
"123.45 ohms" => test_zci("120\x{2126} (ohms) resistor colors: brown (1), red (2), brown (\x{00D7}10)", html => qr/./),
|
||||
"125.55 ohms" => test_zci("130\x{2126} (ohms) resistor colors: brown (1), orange (3), brown (\x{00D7}10)", html => qr/./),
|
||||
"1234.5 ohms" => test_zci("1.2K\x{2126} (ohms) resistor colors: brown (1), red (2), red (\x{00D7}100)", html => qr/./),
|
||||
"1255.5 ohms" => test_zci("1.3K\x{2126} (ohms) resistor colors: brown (1), orange (3), red (\x{00D7}100)", html => qr/./),
|
||||
"12345 ohms" => test_zci("12K\x{2126} (ohms) resistor colors: brown (1), red (2), orange (\x{00D7}1K)", html => qr/./),
|
||||
"12555 ohms" => test_zci("13K\x{2126} (ohms) resistor colors: brown (1), orange (3), orange (\x{00D7}1K)", html => qr/./),
|
||||
"123450 ohms" => test_zci("120K\x{2126} (ohms) resistor colors: brown (1), red (2), yellow (\x{00D7}10K)", html => qr/./),
|
||||
"125550 ohms" => test_zci("130K\x{2126} (ohms) resistor colors: brown (1), orange (3), yellow (\x{00D7}10K)", html => qr/./),
|
||||
"1234500 ohms" => test_zci("1.2M\x{2126} (ohms) resistor colors: brown (1), red (2), green (\x{00D7}100K)", html => qr/./),
|
||||
"1255500 ohms" => test_zci("1.3M\x{2126} (ohms) resistor colors: brown (1), orange (3), green (\x{00D7}100K)", html => qr/./),
|
||||
"12345000 ohms" => test_zci("12M\x{2126} (ohms) resistor colors: brown (1), red (2), blue (\x{00D7}1M)", html => qr/./),
|
||||
"12555000 ohms" => test_zci("13M\x{2126} (ohms) resistor colors: brown (1), orange (3), blue (\x{00D7}1M)", html => qr/./),
|
||||
"123450000 ohms" => test_zci("120M\x{2126} (ohms) resistor colors: brown (1), red (2), purple (\x{00D7}10M)", html => qr/./),
|
||||
"125550000 ohms" => test_zci("130M\x{2126} (ohms) resistor colors: brown (1), orange (3), purple (\x{00D7}10M)", html => qr/./),
|
||||
"1234500000 ohms" => test_zci("1200M\x{2126} (ohms) resistor colors: brown (1), red (2), gray (\x{00D7}100M)", html => qr/./),
|
||||
"1255500000 ohms" => test_zci("1300M\x{2126} (ohms) resistor colors: brown (1), orange (3), gray (\x{00D7}100M)", html => qr/./),
|
||||
"1.2345 ohms" => test_zci("1.2\x{2126} (ohms) resistor colors: brown (1), red (2), gold (\x{00D7}0.1), gold (\x{00B1}5%)", html => qr/./),
|
||||
"1.2555 ohms" => test_zci("1.3\x{2126} (ohms) resistor colors: brown (1), orange (3), gold (\x{00D7}0.1), gold (\x{00B1}5%)", html => qr/./),
|
||||
"12.345 ohms" => test_zci("12\x{2126} (ohms) resistor colors: brown (1), red (2), black (\x{00D7}1), gold (\x{00B1}5%)", html => qr/./),
|
||||
"12.555 ohms" => test_zci("13\x{2126} (ohms) resistor colors: brown (1), orange (3), black (\x{00D7}1), gold (\x{00B1}5%)", html => qr/./),
|
||||
"123.45 ohms" => test_zci("120\x{2126} (ohms) resistor colors: brown (1), red (2), brown (\x{00D7}10), gold (\x{00B1}5%)", html => qr/./),
|
||||
"125.55 ohms" => test_zci("130\x{2126} (ohms) resistor colors: brown (1), orange (3), brown (\x{00D7}10), gold (\x{00B1}5%)", html => qr/./),
|
||||
"1234.5 ohms" => test_zci("1.2K\x{2126} (ohms) resistor colors: brown (1), red (2), red (\x{00D7}100), gold (\x{00B1}5%)", html => qr/./),
|
||||
"1255.5 ohms" => test_zci("1.3K\x{2126} (ohms) resistor colors: brown (1), orange (3), red (\x{00D7}100), gold (\x{00B1}5%)", html => qr/./),
|
||||
"12345 ohms" => test_zci("12K\x{2126} (ohms) resistor colors: brown (1), red (2), orange (\x{00D7}1K), gold (\x{00B1}5%)", html => qr/./),
|
||||
"12555 ohms" => test_zci("13K\x{2126} (ohms) resistor colors: brown (1), orange (3), orange (\x{00D7}1K), gold (\x{00B1}5%)", html => qr/./),
|
||||
"123450 ohms" => test_zci("120K\x{2126} (ohms) resistor colors: brown (1), red (2), yellow (\x{00D7}10K), gold (\x{00B1}5%)", html => qr/./),
|
||||
"125550 ohms" => test_zci("130K\x{2126} (ohms) resistor colors: brown (1), orange (3), yellow (\x{00D7}10K), gold (\x{00B1}5%)", html => qr/./),
|
||||
"1234500 ohms" => test_zci("1.2M\x{2126} (ohms) resistor colors: brown (1), red (2), green (\x{00D7}100K), gold (\x{00B1}5%)", html => qr/./),
|
||||
"1255500 ohms" => test_zci("1.3M\x{2126} (ohms) resistor colors: brown (1), orange (3), green (\x{00D7}100K), gold (\x{00B1}5%)", html => qr/./),
|
||||
"12345000 ohms" => test_zci("12M\x{2126} (ohms) resistor colors: brown (1), red (2), blue (\x{00D7}1M), gold (\x{00B1}5%)", html => qr/./),
|
||||
"12555000 ohms" => test_zci("13M\x{2126} (ohms) resistor colors: brown (1), orange (3), blue (\x{00D7}1M), gold (\x{00B1}5%)", html => qr/./),
|
||||
"123450000 ohms" => test_zci("120M\x{2126} (ohms) resistor colors: brown (1), red (2), purple (\x{00D7}10M), gold (\x{00B1}5%)", html => qr/./),
|
||||
"125550000 ohms" => test_zci("130M\x{2126} (ohms) resistor colors: brown (1), orange (3), purple (\x{00D7}10M), gold (\x{00B1}5%)", html => qr/./),
|
||||
"1234500000 ohms" => test_zci("1200M\x{2126} (ohms) resistor colors: brown (1), red (2), gray (\x{00D7}100M), gold (\x{00B1}5%)", html => qr/./),
|
||||
"1255500000 ohms" => test_zci("1300M\x{2126} (ohms) resistor colors: brown (1), orange (3), gray (\x{00D7}100M), gold (\x{00B1}5%)", html => qr/./),
|
||||
|
||||
# kilo and mega multipliers
|
||||
"27kohm" => test_zci("27K\x{2126} (ohms) resistor colors: red (2), purple (7), orange (\x{00D7}1K)", html => qr/./),
|
||||
"27Kohm" => test_zci("27K\x{2126} (ohms) resistor colors: red (2), purple (7), orange (\x{00D7}1K)", html => qr/./),
|
||||
"27 K ohm" => test_zci("27K\x{2126} (ohms) resistor colors: red (2), purple (7), orange (\x{00D7}1K)", html => qr/./),
|
||||
"4K2 ohm" => test_zci("4.2K\x{2126} (ohms) resistor colors: yellow (4), red (2), red (\x{00D7}100)", html => qr/./),
|
||||
"4.2K ohm" => test_zci("4.2K\x{2126} (ohms) resistor colors: yellow (4), red (2), red (\x{00D7}100)", html => qr/./),
|
||||
"27kohm" => test_zci("27K\x{2126} (ohms) resistor colors: red (2), purple (7), orange (\x{00D7}1K), gold (\x{00B1}5%)", html => qr/./),
|
||||
"27Kohm" => test_zci("27K\x{2126} (ohms) resistor colors: red (2), purple (7), orange (\x{00D7}1K), gold (\x{00B1}5%)", html => qr/./),
|
||||
"27 K ohm" => test_zci("27K\x{2126} (ohms) resistor colors: red (2), purple (7), orange (\x{00D7}1K), gold (\x{00B1}5%)", html => qr/./),
|
||||
"4K2 ohm" => test_zci("4.2K\x{2126} (ohms) resistor colors: yellow (4), red (2), red (\x{00D7}100), gold (\x{00B1}5%)", html => qr/./),
|
||||
"4.2K ohm" => test_zci("4.2K\x{2126} (ohms) resistor colors: yellow (4), red (2), red (\x{00D7}100), gold (\x{00B1}5%)", html => qr/./),
|
||||
|
||||
# Decimal points
|
||||
"2.9ohm" => test_zci("2.9\x{2126} (ohms) resistor colors: red (2), white (9), gold (\x{00D7}0.1)", html => qr/./),
|
||||
"2.9ohm" => test_zci("2.9\x{2126} (ohms) resistor colors: red (2), white (9), gold (\x{00D7}0.1), gold (\x{00B1}5%)", html => qr/./),
|
||||
|
||||
# Negative multipliers
|
||||
"1 ohm" => test_zci("1\x{2126} (ohm) resistor colors: brown (1), black (0), gold (\x{00D7}0.1)", html => qr/./),
|
||||
"29 ohms" => test_zci("29\x{2126} (ohms) resistor colors: red (2), white (9), black (\x{00D7}1)", html => qr/./),
|
||||
"1 ohm" => test_zci("1\x{2126} (ohm) resistor colors: brown (1), black (0), gold (\x{00D7}0.1), gold (\x{00B1}5%)", html => qr/./),
|
||||
"29 ohms" => test_zci("29\x{2126} (ohms) resistor colors: red (2), white (9), black (\x{00D7}1), gold (\x{00B1}5%)", html => qr/./),
|
||||
|
||||
# Zero special case
|
||||
"0 ohms" => test_zci("0\x{2126} (ohms) resistor colors: black (0), black (0), black (\x{00D7}1)", html => qr/./),
|
||||
"0 ohms" => test_zci("0\x{2126} (ohms) resistor colors: black (0), black (0), black (\x{00D7}1), gold (\x{00B1}5%)", html => qr/./),
|
||||
|
||||
# Range
|
||||
"99000M ohms" => test_zci("99000M\x{2126} (ohms) resistor colors: white (9), white (9), white (\x{00D7}1000M)", html => qr/./),
|
||||
"99000M ohms" => test_zci("99000M\x{2126} (ohms) resistor colors: white (9), white (9), white (\x{00D7}1000M), gold (\x{00B1}5%)", html => qr/./),
|
||||
"99500M ohms" => undef,
|
||||
"1.1 ohms" => test_zci("1.1\x{2126} (ohms) resistor colors: brown (1), brown (1), gold (\x{00D7}0.1)", html => qr/./),
|
||||
"1 ohms" => test_zci("1\x{2126} (ohm) resistor colors: brown (1), black (0), gold (\x{00D7}0.1)", html => qr/./),
|
||||
"1.1 ohms" => test_zci("1.1\x{2126} (ohms) resistor colors: brown (1), brown (1), gold (\x{00D7}0.1), gold (\x{00B1}5%)", html => qr/./),
|
||||
"1 ohms" => test_zci("1\x{2126} (ohm) resistor colors: brown (1), black (0), gold (\x{00D7}0.1), gold (\x{00B1}5%)", html => qr/./),
|
||||
"0.9 ohms" => undef,
|
||||
"-10 ohms" => undef,
|
||||
|
||||
|
@ -80,7 +80,7 @@ ddg_goodie_test(
|
|||
"ohm ma darling" => undef,
|
||||
|
||||
# Check the HTML. Just once.
|
||||
"1.5m ohm" => test_zci("1.5M\x{2126} (ohms) resistor colors: brown (1), green (5), green (\x{00D7}100K)", html =>
|
||||
"1.5m ohm" => test_zci("1.5M\x{2126} (ohms) resistor colors: brown (1), green (5), green (\x{00D7}100K), gold (\x{00B1}5%)", html =>
|
||||
"1.5MΩ (ohms) resistor colors: "
|
||||
. "<span style='display:inline-block;background-color:#964b00;"
|
||||
. "color:#fff;border:1px solid #c8c8c8;margin-top:-1px;padding:0px 4px;border-radius:4px;"
|
||||
|
@ -90,7 +90,10 @@ ddg_goodie_test(
|
|||
. "-webkit-border-radius:4px;-moz-border-radius:4px;'>green (5)</span> "
|
||||
. "<span style='display:inline-block;background-color:#9acd32;"
|
||||
. "color:#000;border:1px solid #c8c8c8;margin-top:-1px;padding:0px 4px;border-radius:4px;"
|
||||
. "-webkit-border-radius:4px;-moz-border-radius:4px;'>green (×100K)</span>"
|
||||
. "-webkit-border-radius:4px;-moz-border-radius:4px;'>green (×100K)</span> "
|
||||
. "<span style='display:inline-block;background-color:#cfb53b;"
|
||||
. "color:#000;border:1px solid #c8c8c8;margin-top:-1px;padding:0px 4px;border-radius:4px;"
|
||||
. "-webkit-border-radius:4px;-moz-border-radius:4px;'>gold (±5%)</span>"
|
||||
. "<br/><a href='http://resisto.rs/#1.5M' style='font-size:92.8%'>More at resisto.rs</a>"),
|
||||
|
||||
);
|
||||
|
|
Loading…
Reference in New Issue