O método digitalRead
não retorna um valor booleano. Ele retorna um inteiro.
Pelo que me lembro dentro do Arduino.h, os valores de LOW
e HIGH
são definidos como sendo simplesmente inteiros 0
e 1
.
#define HIGH 0x1 # define LOW 0x0
Acho que foi alterado para um Enum chamado PinStatus
, mas Enum pode ser tratado como um inteiro.
Isso significa que você deve armazenar os resultados de digitalRead
dentro da variável Integer.
int value = digitalRead (8);
Foi projetado dessa forma para converter facilmente valores entre Inteiro e Booleano. Por (muito inteligente) escolha de design Valor inteiro de 0
( LOW
) será convertido em false
e todos os outros valores (por exemplo 1
ou HIGH
) será lançado em true
.
O operador !
(Boolean NOT) pode ser usado apenas com variáveis booleanas, portanto, o compilador precisa realizar vários "casts implícitos". Quando for inteligente o suficiente, ele assumirá que você sabe o que está fazendo e adicionará o elenco sozinho.
Ao ler o erro, vejo que o problema está acontecendo quando o compilador tenta converter o valor booleano em inteiro. Portanto, isso é implicitamente avaliado corretamente como um valor booleano
! DigitalRead (pin_enable_line)
Mas quando você tenta colocá-lo dentro de um lugar para PinStatus, você obtém a exceção
não pode converter 'bool' em 'PinStatus'
Tente adicionar um "elenco explícito" a PinStatus:
digitalWrite (pin_enable_line, (PinStatus)! digitalRead (pin_enable_line));
Isso deve corrigir o problema. Mas sugiro dividir o código em várias linhas e adicionar uma variável temporária. Isso torna a depuração muito mais fácil. Confie no otimizador de código que está embutido no compilador. Ele entenderá o que você deseja fazer e o código de máquina real será o mesmo.