Função com registradores como parâmetro

Olá a todos,

Estou em dúvida sobre como eu posso passar um registrador como parâmetro de uma função. O que quero fazer é o seguinte:

bool get(PIN, bit) {
  unsigned long tempoInicial = millis();
  do {
    if (PIN & (1 << bit)) {  // Retorna o valor de RB0
      return false;
    }
  } while (millis() - tempoInicial < 20);
  return true;
}

void setup() {
  DDRB &= ~(1 << 0);  // RB0 como entrada
  DDRB |= (1 << 1);   // RB1 como saída
}

void loop() {
  if (get(PINB, 0)) {
    PORTB |= (1 << 1);  // RB1 para nível alto
  } else {
    PORTB &= ~(1 << 1);  // RB1 para nível baixo
  }
}

Obviamente a função get() não está compilando, pois não informei o tipo de parâmetro que ela recebe. O objetivo é que get() retorne true apenas se a entrada digital permanecer em nível baixo por um determinado tempo (20ms neste exemplo), ou retorne false caso a entrada receber nível alto em algum momento durante esse tempo.

Alguém consegue me ajudar com isso?

Não sei exatamente o que você quer fazer, mas tente assim:

bool get(byte PIN, byte bit) {
  //Serial.println(PIN, BIN);
  //Serial.println(bit, BIN);
  unsigned long tempoInicial = millis();
  do {
    if (PIN & (1 << bit)) {  // Retorna o valor de RB0
      return false;
    }
  } while (millis() - tempoInicial < 20);
  return true;
}

void setup() {
  //Serial.begin(115200);
  DDRB &= ~(1 << 0);  // RB0 como entrada
  DDRB |= (1 << 1);   // RB1 como saída
}

void loop() {

  if (get(PINB, 0)) {
    PORTB |= (1 << 1);  // RB1 para nível alto
  } else {
    PORTB &= ~(1 << 1);  // RB1 para nível baixo
  }
  //Serial.println(PORTB,HEX);
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.