Erreditare la delay in una classe

Salve, vorrei erreditare la funzione delay mettendola in una classe.

ora il codice è questo:

ledlib.h

#ifndef LEDLIB_H
#define LEDLIB_H

class LEDLIB {
  public:
    void setup(int pin);
    void on();
    void off();
    void blink(int tempo_di_ripetizione);
    
  private:
    int pinGlobal;
    int delayGlobal;
};

#endif  // LEDLIB

ledlib.cpp

#include <Arduino.h>
#include "LEDLIB.h"


void LEDLIB::setup(int pin)
{
    pinGlobal = pin;
    pinMode(pinGlobal, OUTPUT);
}

void LEDLIB::on()
{
    digitalWrite(pinGlobal, HIGH);
}

void LEDLIB::off()
{
    digitalWrite(pinGlobal, LOW);
}

void LEDLIB::blink(int tempo_di_ripetizione)
{
    on();
    delay(tempo_di_ripetizione);
    off();
    delay(tempo_di_ripetizione);
}

ora ho fatto cosi:

void LEDLIB::delay(int delayGlobal)
{
    delay(delayGlobal);
}

e nel file h è cosi:

void delay(int delayGlobal);

come mai se metto led.delay(1000);
non funziona?.
come devo fare per erreditare la delay.
Grazie mille e buon sabato.

quando lo fai, la funzione delay() all'interno della classe nasconde la funzione delay() globale fornita da arduino. Quindi quello che succede è che entri in un ciclo infinito

Per fare riferimento a una funzione esterna a una classe, viene utilizzato scope resolution operator ::.

void LEDLIB::delay(unsigned long tempo)
{
  ::delay(tempo); // scope resolution, global scope
}

puoi provarlo qui e vedere cosa è stampato

2 Likes

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