Code Reorganization and Breakages

I am in the midst of a complete reorganiation of the code base. There is a breakage in new code. I am trying to initializ an array of structs, which is not working right now. I do not yet understand what I am doing wrong, but the Arduino IDE is not happy with me.

The following are code exerpts I am working with. I am pretty sure I am not supposed to be initializing the array if Web_Page_Infor structs this way. I might have to define the array and initialize it in setup().

#define INFO_PAGE_BASE                0

#define PAGE_HOME_ID                  INFO_PAGE_BASE
#define PAGE_HOME_NAME                "Robot Smart Home Controller"
#define PAGE_HOME_TITLE               PAGE_HOME_NAME

#define PAGE_ENVIRONMENT_ID           INFO_PAGE_BASE + 1
#define PAGE_ENVIRONMENT_NAME         "Robot Smart Home Controller: Environment"
#define PAGE_ENVIRONMENT_TITLE        PAGE_ENVIRONMENT_NAME

#define PAGE_SWITCHES_ID              INFO_PAGE_BASE + 2
#define PAGE_SWITCHES_NAME            "Robot Smart Home Controller: Switches"
#define PAGE_SWITCHES_TITLE           PAGE_SWITCHES_NAME

#define PAGE_POTENTIOMETER_ID         INFO_PAGE_BASE + 3
#define PAGE_POTENTIOMETER_NAME       "Robot Smart Home Controller: Potentiometer"
#define PAGE_POTENTIOMETER_TITLE      PAGE_POTENTIOMETER_NAME

#define PAGE_LIGHT_ID                 INFO_PAGE_BASE + 4
#define PAGE_LIGHT_NAME               "Robot Smart Home Controller: Light/Lux"
#define PAGE_LIGHT_TITLE              PAGE_LIGHT_NAME

#define PAGE_IMU_BNO055_ID            INFO_PAGE_BASE + 5
#define PAGE_IMU_BNO055_NAME          "Robot Smart Home Controller: BNO055 IMU"
#define PAGE_IMU_BNO055_TITLE         PAGE_IMU_BNO055_NAME

#define PAGE_IMU_LSM6DSOX_ID          INFO_PAGE_BASE + 6
#define PAGE_IMU_LSM6DSOX_NAME        "Robot Smart Home Controller: LSM6DSOX IMU"
#define PAGE_IMU_LSM6DSOX_TITLE       PAGE_IMU_LSM6DSOX_NAME

#define PAGE_NO_DATA_ID               INFO_PAGE_BASE + 7
#define PAGE_NO_DATA_NAME             "Robot Smart Home Controller: NO DATA AVAILABLE"
#define PAGE_NO_DATA_TITLE            PAGE_NO_DATA_NAME

#define PAGE_ERROR_404_ID             INFO_PAGE_BASE + 8
#define PAGE_ERROR_404_NAME           "Page Not Found"
#define PAGE_ERROR_404_TITLE          PAGE_ERROR_404_NAME

#define PAGE_ERROR_405_ID             INFO_PAGE_BASE + 9
#define PAGE_ERROR_405_NAME           "Unknown"
#define PAGE_ERROR_405_TITLE          PAGE_ERROR_405_NAME

#define LAST_INFO_PAGE_ID             PAGE_ERROR_405_ID

#define MAX_NUM_INFO_PAGES            LAST_INFO_PAGE_ID + 1

struct Web_Page_Info {
  uint8_t id;
  String html;
  String name;
  String title;
};

Web_Page_Info Web_Pages[MAX_NUM_INFO_PAGES] = {
  { PAGE_HOME_ID, String(HTML_CONTENT_HOME), PAGE_HOME_NAME, PAGE_HOME_TITLE },
  { PAGE_ENVIRONMENT_ID, String(HTML_CONTENT_ENVIRONMENT), PAGE_ENVIRONMENT_NAME, PAGE_ENVIRONMENT_TITLE },
  { PAGE_SWITCHES_ID, String(HTML_CONTENT_SWITCHES), PAGE_SWITCHES_NAME, PAGE_SWITCHES_TITLE },
  { PAGE_POTENTIOMETER_ID, String(HTML_CONTENT_POTENTIOMETER), PAGE_POTENTIOMETER_NAME, PAGE_POTENTIOMETER_TITLE },
  { PAGE_LIGHT_ID, String(HTML_CONTENT_LIGHT), PAGE_LIGHT_NAME, PAGE_LIGHT_TITLE },
  { PAGE_IMU_BNO055_ID, String(HTML_CONTENT_IMU_BNO055), PAGE_IMU_BNO055_NAME, PAGE_IMU_BNO055_TITLE },
  { PAGE_IMU_LSM6DSOX_ID, String(HTML_CONTENT_IMU_LSM6DSOX), PAGE_IMU_LSM6DSOX_NAME, PAGE_IMU_LSM6DSOX_TITLE },
  { PAGE_NO_DATA_ID, String(HTML_CONTENT_NO_DATA), PAGE_NO_DATA_NAME, PAGE_NO_DATA_TITLE },
  { PAGE_ERROR_404_ID, String(HTML_CONTENT_404), PAGE_ERROR_404_NAME, PAGE_ERROR_404_TITLE },
  { PAGE_ERROR_405_ID, String(HTML_CONTENT_405), PAGE_ERROR_405_NAME, PAGE_ERROR_405_TITLE }
};

/*
  Set up the empty page for when there is no data - sensor is not
    available.
*/
String set_empty_page (QWIICMUX mx, Web_Page_Info page_info, uint16_t sequence_nr) {
  String date_time, html;

  html =  page_info[PAGE_NO_DATA_ID].html;    // Line 523
  date_time = timestamp(mx, page_info[PAGE_NO_DATA_ID].name, SHOW_FULL_DATE, SHOW_12_HOURS, SHOW_LONG_DATE, SHOW_SECONDS);
  Serial.println(page_info[PAGE_NO_DATA_ID].name);
  html.replace("PAGE_NAME_MARKER", page_info[PAGE_NO_DATA_ID].name);
  html.replace("DATESTAMP_MARKER", date_time);
  html.replace("SEQUENCE_COUNT_MARKER", String(sequence_nr));

  return html;
}

This is the error I am getting:

D:\Dropbox\Arduino\SketchBook\Arduino_Portenta_C33\Robot_Smart_Home_Controller\Robot_Controller_Split_Code_V070\Robot_Controller_Split_Code_V070.ino: In function 'arduino::String set_empty_page(QWIICMUX, Web_Page_Info, uint16_t)':
D:\Dropbox\Arduino\SketchBook\Arduino_Portenta_C33\Robot_Smart_Home_Controller\Robot_Controller_Split_Code_V070\Robot_Controller_Split_Code_V070.ino:523:20: error: no match for 'operator[]' (operand types are 'Web_Page_Info' and 'int')
   html =  page_info[PAGE_NO_DATA_ID].html;

<
Blog Archive
Archive of all previous blog posts
>
Next Post
Personal Raspberry Pi AI System