Convert Arduino code to XOD

From what I see in your latest code, I see no reason why it should not work. I guess it will. Try it.

If I made this node, I would put everything in a single node with nine inputs. Arguably, it would make the node more self-contained and easier to understand:

{{#global}}
// Escape to the global scope because ISR’s should be there

volatile unsigned int channel[9] = {
  // these are initial valued=s
  2000, 2400, 2600, 2800, 3000, 3200, 3600, 4000, 21400
};

volatile unsigned int ch = 0;

ISR(TIMER1_OVF_vect) {
  OCR1A = channel[ch] ;
  ch = ( ch++ > 8) ? 0 : ch;
}
{{/global}}

struct State {};

{{ GENERATED_CODE }}

void evaluate(Context ctx) {
    if (isSettingUp) {
      noInterrupts();           // disable all interrupts
      TCCR1A = 0;
      TCCR1B = 0;
      TIFR1  |= (1 << OCF1A);  // clear any pending interrupts;
      TCCR1A |= (1 << COM1B1); // Toggle on B compare
      TCCR1A |= (1 << WGM10) | (1 << WGM11);   // Fast PWM mode, TOP = OCR1A
      TCCR1B |= (1 << WGM12) | (1 << WGM13);   // Fast PWM mode, TOP = OCR1A
      TCCR1B |= (1 << CS11);  // 8 prescaler gives 500us tick size, i.e. 2 ticks per ms.
      TIMSK1 |= (1 << TOIE1);    // enable overflow vector
      DDRB   |= (1 << DDB2); // for Nano - turn on output pin 10 = OC1B (PB2).
      //DDRB   |= (1 << DDB6); // for Mega - turn on output pin 13 = OC1B (PB6)
      OCR1B = 600; // for separator pulse of 300us - double for 8 prescaler
      interrupts(); // enable all interrupts
    }

    // setting up or update on an input pin
    // we refer the global array `channel`, so the ISR will have access to it
    channel[0] = getValue<input_CH1>(ctx) * 2 + 1000;
    channel[1] = getValue<input_CH2>(ctx) * 2 + 1000;
    // ...
    channel[8] = getValue<input_CH9>(ctx) * 2 + 1000;
}