Go Down

Topic: AJUDA COM PROGRAMAÇÃO (state ? bit : 0) (Read 647 times) previous topic - next topic

wizarcl

   Pessoal, estou estudando um pouco mais a fundo o arduindo e ja descobri mtas coisas legais, como por exemplo escrever duas saidas ao mesmo tempo, em fim... mas estou uma baita duvida, não encontrei nada a respeito disto, dentro do código do PulseIn tem a seguinte atribuição:
Code: [Select]
       unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout)
uint8_t bit = digitalPinToBitMask(pin);
[b] uint8_t stateMask = (state ? bit : 0);[/b]

O que esta interrogação e este dois pontos fazem com os bits?

LegendBR

É uma forma simplificada de fazer um if.

Essa linha:

Code: [Select]

uint8_t stateMask = (state ? bit : 0);


Funciona da mesmissima forma que o código abaixo:

Code: [Select]

uint8_t stateMask;
if (state)
   stateMask = bit;
else
   stateMask = 0;


Ou seja:

Code: [Select]

( condição ? valor_se_verdadeiro : valor_se_falso )

wizarcl

Muito obrigado amigo. Mais uma coisa, eu poderia então, fazer comparação utilizando uma linha apenas como esta para comparar um valor que não seja booleano também certo?
Code: [Select]
uint8_t stateMask = (state==valor_comparado ? bit : 0);



ou ainda posso tb acrescentar mais informações como mais se o valor for verdadeiro ou falso?
como eu pesquiso isto no google? Do que se trata afinal? Isso pode ser usado no C++  tb ou e especifico do ardu?
Vlw man!

LegendBR

Isso se chama operador ternário. O código que você postou funciona sem problemas, a ideia é isso mesmo.

Esse operador faz parte do C e derivados (C++, C#, etc.), e não somente do Arduino. Outras linguagens também têm esse operador.


Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy