1 de maio de 2021

Calculadora de Cores de Resistores

O valor de um resistor é indicado através de um código cores. Vamos criar uma calculadora onde poderemos informar o valor do resistor e verificarmos quais são as suas cores.

Esse é um bom exemplo para estudos de lógica de programação.
Trabalharemos com os tipos de variáveis String, long e int, e utilizaremos substring e conversão de variáveis.

O cálculo do valor do resistor é realizado através de uma tabela de cores, onde devemos verificar a cor de cada faixa.
As duas primeiras faixas indicam os dois primeiros dígitos, e a terceira faixa indica o fator multiplicador. A faixa mais distante indica o valor da tolerância, em porcentagem, que a resistência pode divergir do valor teórico.

Para calcularmos o valor devemos seguir a tabela abaixo:

Um resistor com as cores Marrom, Preto e Vermelho, conforme a imagem, a primeira faixa representa o número 1, a segunda faixa representa o número 0, e a terceira faixa representa o multiplicador 100.
Assim: 1 0 x 100 = 1000 Ohms ou 1 Kiloohms.

A lógica do programa fará o cálculo inverso, onde através da comunicação serial do Arduino, vamos informar o valor do resistor e teremos como resultado a sua cor correspondente.

 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
/*---------------------------------------------------------
  Programa : CALCULADORA DE CORES DE RESISTORES (3 FAIXAS)
  Autor    : Fellipe Couto [ http://www.efeitonerd.com.br ]
  Data     : 01/05/2021
  ---------------------------------------------------------*/
void setup() {
  Serial.begin(115200);
  Serial.println("CALCULADORA DE CORES DE RESISTORES (3 FAIXAS)");
  Serial.println("www.efeitonerd.com.br\n");
  Serial.println("Informe o valor do resistor em ohms:\n");
}

void loop() {
  String strSerial = "";

  //Recebe a string da serial
  while (Serial.available() > 0) {
    strSerial += Serial.readString();
    delay(15);
  }
  if (strSerial.length() > 0) {
    colors(strSerial.toInt());
  }
}

void colors(long valueOhms) {
  String colorName[10] = {"Preto", "Marrom", "Vermelho", "Laranja", "Amarelo", "Verde", "Azul", "Violeta", "Cinza", "Branco"};
  String strOhm = " Ohms: ";

  if (valueOhms < 10) {
    Serial.println(String(valueOhms) + strOhm + colorName[0] + ", " + colorName[valueOhms] + ", " + colorName[0]);
  } else if (valueOhms >= 10) {
    int color1 = String(valueOhms).substring(0, 1).toInt();
    int color2 = String(valueOhms).substring(1, 2).toInt();
    int color3 = String(valueOhms).substring(2, 99).length();
    String strValue = String(color1) + String(color2);
    for (int i = 0; i < color3; i++) strValue += "0";

    //Exibe em KiloOhms e MegaOhms
    if (valueOhms >= 1000 && valueOhms < 1000000) {
      strOhm = " K Ohms: ";
      strValue = (double)valueOhms / 1000;
    } else if (valueOhms >= 1000000) {
      strOhm = " M Ohms: ";
      strValue = (double)valueOhms / 1000000;
    }
    Serial.println(strValue + strOhm + colorName[color1] + ", " + colorName[color2] + ", " + colorName[color3]);
  }
}

2 comentários:

  1. strValue' was not declared in this scope

    ResponderExcluir
    Respostas
    1. Boa tarde! strValue declarada na linha 36, dentro da função colors().

      Excluir