# Array Error Message

**URL:** <https://forum.arduino.cc/t/array-error-message/1273193>\
**Category:** Programming\
**Created:** [June 18, 2024, 10:14pm UTC](https://forum.arduino.cc/t/array-error-message/1273193 "2024-06-18T22:14:15Z")\
**Posts on this page:** 1\
**Showing post:** 17

<div class="post-metadata">

**Author:** ![feraltek](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/feraltek/32/1057825_2.png) [@feraltek](https://forum.arduino.cc/u/feraltek)\
**Post date:** [June 20, 2024, 11:03am UTC](https://forum.arduino.cc/t/array-error-message/1273193/17 "2024-06-20T11:03:51Z")

</div>

The whole code with the for loop commented out following the four individual lines in the format -  
"wheel[n] = wheels[dir][m];

It uses example 5 from a great tutorial I found for parsing serial input -

> [@Serial Input Basics - updated](https://forum.arduino.cc/t/serial-input-basics-updated/382007):
>
> Updated Version Please note that this is a revised version of the advice in [this earlier Thread](http://forum.arduino.cc/index.php?topic=288234.0) which has become very long. As far as possible I have kept the code examples identical or simplifed them slightly. It should not be necessary to refer to the older Thread, but feel free to do so. Contents The following sections are in this Tutorial Introduction Serial data is slow by Arduino standards Example 1 - Receiving single characters Why code is organized into functions Exampl…

Serial input is in the format \<speed1, speed2, speed3, speed4, dir\>

```cpp
// Adafruit Motor Shield

#include <Adafruit_MotorShield.h>

// Create the motor shield object with the default I2C address
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_DCMotor *motRF = AFMS.getMotor(1);
Adafruit_DCMotor *motRR = AFMS.getMotor(2);
Adafruit_DCMotor *motLR = AFMS.getMotor(3);
Adafruit_DCMotor *motLF = AFMS.getMotor(4);

int speed[4] = {0, 0, 0, 0}; // 0 <= n <= 255
int wheel[4] = {4, 4, 4, 4}; // fore (1), rev (2), stop (4)
int dir = 0; // compass directions, 1 to 16 cw & 17/18 rot
#define for 1 // FORWARD in Adafruit_MotorShield.cpp
#define rev 2 // BACKWARD in Adafruit_MotorShield.cpp
#define halt 4 // RELEASE in Adafruit_MotorShield.cpp

int wheels[19][4] {
  {halt, halt, halt, halt}, // All Stop
  {for, for, for, for }, // N
  {for, for, for, for }, // NNE
  {halt, for, halt, for }, // NE
  {rev, for, rev, for }, // ENE
  {rev, for, rev, for }, // E
  {rev, for, rev, for }, // ESE
  {rev, halt, rev, halt}, // SE
  {rev, rev, rev, rev }, // SSE
  {rev, rev, rev, rev }, // S
  {rev, rev, rev, rev }, // SSW
  {halt, rev, halt, rev }, // SW
  {for, rev, for, rev }, // WSW
  {for, rev, for, rev }, // W
  {for, rev, for, rev }, // WNW
  {for, halt, for, halt}, // NW
  {for, for, for, for }, // NNW
  {rev, rev, for, for }, // CW
  {for, for, rev, rev } // CCW
};

// Handle data input via serial
const byte numChars = 32;
char receivedChars[numChars];
char tempChars[numChars]; // temporary array for use when parsing
boolean newData = false;

void setup() {
  Serial.begin(9600); // Set up Serial library at 9600 bps
  AFMS.begin(1000); // PWM Frequency 1.0KHz
}

void loop() {
  recvWithStartEndMarkers();
  if (newData == true) {
    strcpy(tempChars, receivedChars);
    // this temporary copy is necessary to protect the original data
    // because strtok() used in parseData() replaces the commas with \0
    parseData();
    showParsedData();
    newData = false;
  }

  wheel[0] = wheels[dir][0];
  wheel[1] = wheels[dir][1];
  wheel[2] = wheels[dir][2];
  wheel[3] = wheels[dir][3];
// for (int i = 0; i < 4; i++) {
// wheel[i] = wheels[dir][i];
// }

  motLFgo();
  motLRgo();
  motRRgo();
  motRFgo();
}

// Functions ================================

void motLFgo() {
  motLF ->setSpeed(speed[0]);
  motLF ->run(wheel[0]);}

void motLRgo() {
  motLR ->setSpeed(speed[1]);
  motLR ->run(wheel[1]);}

void motRRgo() {
  motRR ->setSpeed(speed[2]);
  motRR ->run(wheel[2]);}

void motRFgo() {
  motRF ->setSpeed(speed[3]);
  motRF ->run(wheel[3]);}

// Data input
void recvWithStartEndMarkers() {
  static boolean recvInProgress = false;
  static byte ndx = 0;
  char startMarker = '<';
  char endMarker = '>';
  char rc;

  while (Serial.available() > 0 && newData == false) {
    rc = Serial.read();
    if (recvInProgress == true) {
      if (rc != endMarker) {
        receivedChars[ndx] = rc;
        ndx++;
        if (ndx >= numChars) {
          ndx = numChars - 1;
        }
      }
      else {
        receivedChars[ndx] = '\0'; // terminate the string
        recvInProgress = false;
        ndx = 0;
        newData = true;
      }
    }
    else if (rc == startMarker) {
      recvInProgress = true;
    }
  }
}

void parseData() { // split the data into its parts
  char * strtokIndx; // this is used by strtok() as an index

  strtokIndx = strtok(tempChars,","); // get the first part - the string
  speed[0] = atoi(strtokIndx); // convert this part to an integer

  strtokIndx = strtok(NULL, ","); // continue where the previous call left off
  speed[1] = atoi(strtokIndx); // convert this part to an integer

  strtokIndx = strtok(NULL, ",");
  speed[2] = atoi(strtokIndx); // convert this part to an integer

  strtokIndx = strtok(NULL, ",");
  speed[3] = atoi(strtokIndx); // convert this part to an integer

  strtokIndx = strtok(NULL, ",");
  dir = atoi(strtokIndx); // convert this part to an integer
}

void showParsedData() {
  Serial.print("speed [0]:");
  Serial.print(speed[0]);
  Serial.print(" [1]:");
  Serial.print(speed[1]);
  Serial.print(" [2]:");
  Serial.print(speed[2]);
  Serial.print(" [3]:");
  Serial.print(speed[3]);
  Serial.print(" dir:");
  Serial.println(dir);
}

```

---

_[View the full topic](https://forum.arduino.cc/t/array-error-message/1273193)._
