int R2R_pins[] = {2, 3, 4, 5, 6, 7, 8, 9}; // Pins connected to R-2R ladder
const float V_REF = 5.0; // Voltage reference for DAC
const int RESOLUTION = 256; // Number of output levels for DAC

// 2-9 are 0-7 pins, 10 is out

void setup() {
  Serial.begin(9600); // Start serial communication
  for (int i = 0; i < 8; i++) {
    pinMode(R2R_pins[i], OUTPUT); // Set R-2R ladder pins as output
  }
}

void loop() {
  for (int i = 0; i < RESOLUTION; i++) {
    setVoltage(i); // Set DAC output to current level
    Serial.println(i * V_REF / (RESOLUTION - 1), 2); 
    // Print voltage to serial monitor
    // Use serial monitor graph function to see the wave
    delay(10); // Wait for some time before next level
  }
}

void setVoltage(int level) {
  for (int i = 0; i < 8; i++) {
    if (level & (1 << i)) {
      digitalWrite(R2R_pins[i], HIGH); // Set R-2R ladder bit to 1
    } else {
      digitalWrite(R2R_pins[i], LOW); // Set R-2R ladder bit to 0
    }
  }
}

// i*v_ref /resoulation - 1 == (0 to 255 iter)*5/(256-1)
// [,2 means round it to 2 decimal pont]
$abcdeabcde151015202530354045505560fghijfghij