Termometro de temperatura Corporal

Bom dia! Sou do primeiro ano de ensino médio e estou iniciando em programação com Arduino.

Tenho o seguinte código:
#define COMMON_ANODE
int redPin = 8;
int bluePin = 7;
int greenPin = 6;
int yellowPin = PIND;

void setup()
{
Serial.begin(9600);
pinMode(bluePin, OUTPUT);
pinMode (redPin, OUTPUT);
pinMode (greenPin, OUTPUT);
pinMode (yellowPin, OUTPUT);
pinMode (A0, INPUT);
}
void setColor(int vermelho, int verde, int azul, int amarelo)
{
vermelho = 255 - vermelho;
verde = 255 - verde;
azul = 255 - azul;
amarelo = 255 - amarelo;

analogWrite(redPin, vermelho);
analogWrite(greenPin, verde);
analogWrite(bluePin, azul);
analogWrite(yellowPin, amarelo);

}
void loop()
{
float TempC = ((analogRead(A0)(5.0 / 1023))- 0.5) 100;
if (TempC>38)
{
setColor(255, 0, 0);
Serial.println(“sua temperatura corporal e de, indicando um estado”);
Serial.println(TempC);
Serial.println(“voce esta com febre alta”);
digitalWrite (redPin, HIGH);
delay (1000);
}

else if (TempC >= 36 && TempC <= 37)
{
setColor(0, 255, 0);
Serial.println(“sua temperatura corporal e de, indicando um estado”);
Serial.println(TempC);
Serial.println(“estado normal”);
digitalWrite (greenPin, HIGH);
delay (1000);
}

else if (TempC<36)
{
setColor(0, 0, 255);
Serial.println(“sua temperatura corporal e de, indicando um estado”);
Serial.println(TempC);
Serial.println(“estado hipotermico”);
digitalWrite (bluePin, HIGH);
delay (1000);
}
else if (TempC >= 37 && TempC <= 38)
{
setColor(255, 255, 0);
Serial.println(“sua temperatura corporal e de, indicando um estado”);
Serial.println(TempC);
Serial.println(“estado febril”);
digitalWrite (yellowPin , HIGH);
delay (1000);
}

else
{
digitalWrite (bluePin, LOW);
digitalWrite (redPin, LOW);
digitalWrite (greenPin, LOW);
digitalWrite (yellowPin, LOW);
delay (1000);
}

}

E que está apresentando o seguinte erro:

In function ‘void loop()’:
38:25: error: too few arguments to function ‘void setColor(int, int, int, int)’
19:6: note: declared here
48:23: error: too few arguments to function ‘void setColor(int, int, int, int)’
19:6: note: declared here
58:24: error: too few arguments to function ‘void setColor(int, int, int, int)’
19:6: note: declared here
67:27: error: too few arguments to function ‘void setColor(int, int, int, int)’
19:6: note: declared here
exit status 1

Nínguem sabe para me ajudar?

Falai @liags, tudo blz?
O que seu problema foi quantidade de parâmetros na sua chamada de função. Você definiu 4 parâmetros e nas chamadas só definiu 3. Só adicionar o 4º parâmetro que tudo fica de boa.

#define COMMON_ANODE
int redPin = 8;
int bluePin = 7;
int greenPin = 6;
int yellowPin = PIND;

void setup()
{
Serial.begin(9600);
pinMode(bluePin, OUTPUT);
pinMode (redPin, OUTPUT);
pinMode (greenPin, OUTPUT);
pinMode (yellowPin, OUTPUT);
pinMode (A0, INPUT);
}

/* A sua funcao setColor possui 4 parametros*/

void setColor(int vermelho, int verde, int azul, int amarelo) 
{
vermelho = 255 - vermelho;
verde = 255 - verde;
azul = 255 - azul;
amarelo = 255 - amarelo;

analogWrite(redPin, vermelho);
analogWrite(greenPin, verde);
analogWrite(bluePin, azul);
analogWrite(yellowPin, amarelo);

}
void loop()
{
float TempC = ((analogRead(A0) *(5.0 / 1023))- 0.5)*  100;
if (TempC>38)
{

/* AKI abaixo vc só passou 3 */

    setColor(255, 0, 0);
    Serial.println(“sua temperatura corporal e de, indicando um estado”);
    Serial.println(TempC);
    Serial.println(“voce esta com febre alta”);
    digitalWrite (redPin, HIGH);
    delay (1000);
    }

    else if (TempC >= 36 && TempC <= 37)
    {

/* AKI abaixo vc só passou 3 */

setColor(0, 255, 0);
Serial.println(“sua temperatura corporal e de, indicando um estado”);
Serial.println(TempC);
Serial.println(“estado normal”);
digitalWrite (greenPin, HIGH);
delay (1000);
}

else if (TempC<36)
{

/* AKI abaixo vc só passou 3 */

setColor(0, 0, 255);
Serial.println(“sua temperatura corporal e de, indicando um estado”);
Serial.println(TempC);
Serial.println(“estado hipotermico”);
digitalWrite (bluePin, HIGH);
delay (1000);
}
else if (TempC >= 37 && TempC <= 38)
{

/* AKI abaixo vc só passou 3 */

setColor(255, 255, 0);
Serial.println(“sua temperatura corporal e de, indicando um estado”);
Serial.println(TempC);
Serial.println(“estado febril”);
digitalWrite (yellowPin , HIGH);
delay (1000);
}

else
{
digitalWrite (bluePin, LOW);
digitalWrite (redPin, LOW);
digitalWrite (greenPin, LOW);
digitalWrite (yellowPin, LOW);
delay (1000);
}

} 

Abraços
Max

Então eu fiquei realizando varias tentativas e erros, e cheguei nesse código final, porém apesar dele mudar as cores do lede conforme a temperatura, ele não está apresentando da forma correta.

Code: [Select]


#define COMMON_ANODE
int redPin = 8;
int bluePin = 7;
int greenPin = 6;
int yellowPin = PIND;


void setup()
 {
  Serial.begin(9600);  
  pinMode(bluePin, OUTPUT);
  pinMode (redPin, OUTPUT);
  pinMode (greenPin, OUTPUT);
  pinMode (yellowPin, OUTPUT);
  pinMode (A0, INPUT);
 }
void setColor(int redPin, int greenPin, int bluePin)
{ 
    redPin = 255 - redPin; 
    greenPin = 255 - greenPin; 
    bluePin = 255 - bluePin;
   yellowPin = 255 - yellowPin;
  

  analogWrite(redPin, 8); 
  analogWrite(greenPin, 6); 
  analogWrite(bluePin, 7);
  
 
}
void loop()                    
{
float TempC = ((analogRead(A0)(5.0 / 1023))- 0.5) 100;
    if (TempC > 38)
{
      setColor(255, 0, 0);
  Serial.println("sua temperatura corporal e de, indicando um estado");
  Serial.println(TempC);
  Serial.println("voce esta com febre alta");
  digitalWrite (redPin, HIGH);
    delay (2000);
   }
 
  else if (TempC >= 36 && TempC <= 37)
  {
    setColor(0, 255, 0);
     Serial.println("sua temperatura corporal e de, indicando um estado");
  Serial.println(TempC);
  Serial.println("estado normal");
  digitalWrite (greenPin, HIGH);
    delay (2000);
  }
 
  else if (TempC < 36)
  {
     setColor(0, 0, 255);
    Serial.println("sua temperatura corporal e de, indicando um estado");
  Serial.println(TempC);
  Serial.println("estado hipotermico");
  digitalWrite (bluePin, HIGH);
    delay (2000);
  }
    else if (TempC >= 37 && TempC <= 38)
  {
      setColor(255, 255, 0);
    Serial.println("sua temperatura corporal e de, indicando um estado");
  Serial.println(TempC);
  Serial.println("estado febril");
   digitalWrite (yellowPin , HIGH);
    delay (2000);
  }

    else
{
  digitalWrite (bluePin, LOW);
  digitalWrite (redPin, LOW);
  digitalWrite (greenPin, LOW);
  digitalWrite (yellowPin, LOW);
    delay (2000);
} 
 
}

Ola,

imagino que você está utilizando leds simples, com cores específicas e não um LED RGB, correto?
e considero que sua ideia é:

  • somente vermelho para febre alta
  • somente amarelo para estado febril
  • somente verde para normal
  • somente azul para estado hipotermico

Tem algumas formas para codificar estas intensões. Se mudar muito o conceito do seu código, minhas sugestões:

  1. Como não é RGB, utilize apenas LOW(0)=Desligado ou HIGH(1)=Ligado
  2. Acerte a função setColor para atuar nos 4 LEDs e faça as chamadas passando o parametro para os 4 LEDs
  3. Utilize apenas a função setColor. Não utilize também o digitalWrite dentro dos “Ifs”

Dica de lógica em geral:

  • Como em todas as condições você quer um delay (2000), coloque apenas 1 no final

Dúvida:

  • Por que você usa int yellowPin = PIND;? Por que PIND e não a porta específica?