class PHOTORESISTOR{
  public:
    virtual void attach(int pin) = 0;
    virtual float lux();
    virtual float voltage();
    virtual float resistance();
};

class LDR : public PHOTORESISTOR{
  private:
    int pin; 
    const float GAMMA = 0.7, RL10 = 50;

    float voltage(){
      return analogRead(pin) / 1024. * 5;
    }
    float resistance(){
      return 2000 * voltage() / (1 - voltage() / 5);
    }
    float lux(){
      return pow(RL10 * 1e3 * pow(10, GAMMA) / resistance(), (1 / GAMMA));
    }

  public:
    void attach(int pin){
      this->pin = pin;
    }
    float regime(String property){
      if(property == "vol"){
        return voltage();
      }
      if(property == "res"){
        return resistance();
      }
      if(property == "lux"){
        return lux();
      }
    }


};

#define PIN A5
LDR photo;

void setup() {
  Serial.begin(9600);
  photo.attach(PIN);
}

void loop() {
  Serial.print(photo.regime("vol"));
  Serial.print(" ");
  Serial.print(photo.regime("res"));
  Serial.print(" ");
  Serial.println(photo.regime("lux"));
  delay(1000);

}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
ldr1:VCC
ldr1:GND
ldr1:DO
ldr1:AO