Protocol for avoiding pointers

there's no need. structures can be statically initialized

output:

     4  5 For      0  Motor-B
     6  7 Rev      0  Motor-C
     8  9 Rev      0  Motor-A

code:

struct Motor {
  const byte    StepPin;
  const byte    DirPin;
  const char   *Desc;

  bool          forward;
  int           pos;
};

enum { For = 1, Rev = 0 };

Motor motors [] = {
    { 4, 5, "Motor-B", For },
    { 6, 7, "Motor-C" },
    { 8, 9, "Motor-A" },
};
const int Nmotor = sizeof(motors)/sizeof(Motor);

char s [90];

// -----------------------------------------------------------------------------
void disp () {
    Motor *p = motors;

    for (int n = 0; n < Nmotor; n++, p++)  {
        sprintf (s, "    %2d %2d %3s %6d  %s", p->StepPin, p->DirPin,
            p->forward ? "For" : "Rev", p->pos, p->Desc);
        Serial.println (s);
    }
}

// -----------------------------------------------------------------------------
void setup ()
{
    Serial.begin (9600);

    for (int n = 0; n < Nmotor; n++)  {
        pinMode (motors [n].StepPin, OUTPUT);
        pinMode (motors [n].DirPin,  OUTPUT);
    }

    disp();
}

void loop () { }
1 Like