Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Sintaxe do IDE

Boa tarde, não compreendi completamente porque é preciso atribuir um parâmetro na função void piscaLed() com um nome distinto do declarado na contanste #define. Neste trecho do código: void piscaLed(int portaLed), a variável int portaLed tem a função de acessar a porta número 2, definida lá em cima, no escopo global, da constante #define LED_VERMELHO 2, certo? E porque um nome distinto? Fiz o teste e vi que própria sintaxe da linguagem não permite isto acontecer.

//int ledVerm = 2;
#define LED_VERMELHO 2
#define UM_SEGUNDO 1000
#define MEIO_SEGUNDO 500


void setup() {
  // put your setup code here, to run once:
  Serial.begin (9600);
  pinMode (LED_VERMELHO, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println(LED_VERMELHO);
  piscaLed(LED_VERMELHO);

}
//imagine que aqui seja colocada a constante LED_VERMELHO
void piscaLed(int portaLed){
  digitalWrite(portaLed, HIGH);
  delay(UM_SEGUNDO); 
  digitalWrite(portaLed, LOW);
  delay(MEIO_SEGUNDO); 
}
3 respostas
solução!

Olá José,

Não tenho certeza se compreendi a sua dúvida mas vamos lá: A função piscaLed() tem o propósito de fazer piscar QUALQUER led cuja porta seja passada como parâmetro para ela. Não apenas a 2. O parâmetro int portaLed é a variável que vai receber o número do pino informado pelo usuário. O propósito é deixá-la mais flexível para receber qualquer outro valor. Se deixássemos já pré-fixado o número 2, a função não serviria mais para piscar nenhum outro pino além do 2.

Oi Leonardo, acho que essa parte eu entendi, só não entendo extamante o porque da mudança de nome. Sobre deixar a variável int portaLed mais fléxivel. Por exemplo, vamos supor que eu nomei uma constante com outro nome, LED_AZUL, e que ele receba o valor 3, porta 3. Caso eu queria acessar o LED_AZUL, pasta eu digitar:

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println(LED_VERMELHO);
  piscaLed(LED_VERMELHO);
Serial.println(LED_AZUL);
  piscaLed(LED_AZUL);

}

E mais abaixo:

void piscaLed(int portaLed){
  digitalWrite(portaLed, HIGH);
  delay(UM_SEGUNDO); 
  digitalWrite(portaLed, LOW);
  delay(MEIO_SEGUNDO); 
}

Este trecho seria repetido duas vezes, tanto para o LED_AZUL quanto para o LED_VERMELHO. Não sei se ficou confuso. Mas a int portaLed é válida para as duas? tanto a porta 2(VERMELHO) quanto a 3 (AZUL)É isso?

Acho que eu entendi o que vocÊ quis dizer Leonardo. Fiz um teste aqui e meio que deu certo. Obrigado!

//int ledVerm = 2;
#define LED_VERMELHO 2
#define LED_AZUL 3
#define UM_SEGUNDO 1000
#define MEIO_SEGUNDO 500


void setup() {
  // put your setup code here, to run once:
  Serial.begin (9600);
  pinMode (LED_VERMELHO, OUTPUT);
  pinMode (LED_AZUL, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println(LED_VERMELHO);
  piscaLedV(LED_VERMELHO);
  Serial.println(LED_AZUL);
  piscaLedA(LED_AZUL);
}

void piscaLedV(int portaLed){
  digitalWrite(portaLed, HIGH);
  delay(UM_SEGUNDO); 
  digitalWrite(portaLed, LOW);
  delay(MEIO_SEGUNDO); 
}
void piscaLedA(int portaLed){
  digitalWrite(portaLed, HIGH);
  delay(UM_SEGUNDO); 
  digitalWrite(portaLed, LOW);
  delay(MEIO_SEGUNDO); 
}