/* 孤独的二进制
   面向对象点灯
*/
class Led {
  private: //self and friends
    byte _pin;

  public:
    void setPin(byte pin_param);
    byte getPin() const;
    void on() const;
    void off() const;
    void toggle() const;
};

void Led::setPin(byte pin_param)  {

  if ((pin_param < 40) && (pin_param >= 0)) {
    _pin = pin_param;
    pinMode(_pin, OUTPUT);
  } else {
    _pin = 2;
    Serial.println("invalid pin number, use default pin 2 instead");
  }

}

byte Led::getPin() const {
  return _pin;
}

void Led::on() const {
  digitalWrite(_pin, HIGH);
}

void Led::off() const {
  digitalWrite(_pin, LOW);
}

void Led::toggle() const {
  digitalWrite(_pin, !digitalRead(_pin));
}

Led ledGreen, ledYellow, ledRed;

void setup() {
  Serial.begin(115200);

  ledGreen.setPin(33);
  ledYellow.setPin(26);
  ledRed.setPin(27);

  //on
  // digitalWrite(33, HIGH);
  ledGreen.on();
  ledYellow.on();
  ledRed.on();
  delay(1000);

  //off
  // digitalWrite(33, LOW);
  ledGreen.off();
  ledYellow.off();
  ledRed.off();
  delay(1000);

  Serial.print(sizeof(ledGreen));
  Serial.println(" Bytes");
}

void loop() {
  //toggle
  //digitalWrite(33,!digitalRead(33));
  ledGreen.toggle();
  ledYellow.toggle();
  ledRed.toggle();
  delay(100);

}
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C