c - error: invalid types 'uint16_t {aka short unsigned int}[uint8_t {aka unsigned char}]' for array subscript -


background: i'm working on gutting adafruit program 'uncanny eyes." intention able have couple of momentary switches draw static images pair of 1.5" oleds.

this program uses teensy 3.1 or 3.2.

i'm stuck after receiving error

in function 'void draweye(uint8_t, uint16_t)': uncannyeyes:146: error: invalid types 'uint16_t {aka short unsigned int}[uint8_t {aka unsigned char}]' array subscript p = img[screeny][screenx];

i'm new the stack exchange community, apologize if i've done incorrectly!

#include <spi.h> #include <adafruit_gfx.h>      // core graphics lib adafruit displays // enable 1 of these #includes -- huge graphics tables various eyes: //#include "defaulteye.h"        // standard human-ish hazel eye //#include "noscleraeye.h"       // large iris, no sclera //#include "dragoneye.h"         // slit pupil fiery dragon/demon eye #include "goateye.h"           // horizontal pupil goat/krampus eye // tweak settings below, e.g. change iris_min/max or disable tracking.  // display hardware config -------------------------------------------------  #include <adafruit_ssd1351.h>  // oled display library -or- //#include <adafruit_st7735.h> // tft display library (enable 1 only)  #ifdef _adafruit_st7735h_ typedef adafruit_st7735  displaytype; // using tft display(s) #else typedef adafruit_ssd1351 displaytype; // using oled display(s) #endif  #define display_dc      7 // data/command pin both displays #define display_reset   8 // reset pin both displays #define select_l_pin    9 // left eye chip select pin #define select_r_pin   10 // right eye chip select pin  // input config (for eye motion -- enable or comment out needed) --------  #define wink_l_pin      0 // pin left eye wink button #define blink_pin       1 // pin blink button (both eyes) #define wink_r_pin      2 // pin right eye wink button #define image_4      3 // pin right eye wink button #define image_5      4 // pin right eye wink button //#define autoblink         // if enabled, eyes blink autonomously  // don't need edit config below line, ----------------- // unless building single-eye project (pendant, etc.), in case 1 // of 2 elements in eye[] array further down can commented out.  // eye blinks tiny 3-state machine.  per-eye allows winks + blinks. #define noblink 0     // not engaged in blink #define enblink 1     // eyelid closing #define deblink 2     // eyelid opening typedef struct {   int8_t   pin;       // optional button here indiv. wink   uint8_t  state;     // noblink/enblink/deblink   int32_t  duration;  // duration of blink state (micros)   uint32_t starttime; // time (micros) of last state change } eyeblink;  struct {   displaytype display; // oled/tft object   uint8_t     cs;      // chip select pin   eyeblink    blink;   // current blink state } eye[] = { // ok comment out 1 of these single-eye display:   displaytype(select_l_pin,display_dc,0),select_l_pin,{wink_l_pin,noblink},   displaytype(select_r_pin,display_dc,0),select_r_pin,{wink_r_pin,noblink}, }; #define num_eyes (sizeof(eye) / sizeof(eye[0]))  uint8_t   prevbtn        = 99,  // button # pressed on last loop() iteration   btncount       = 0;   // number of iterations same button has been held  // initialization -- runs once @ startup ----------------------------------  void setup(void) {   uint8_t e;    serial.begin(115200);   randomseed(analogread(a3)); // seed random() floating analog input    // both displays share common reset line; 0 passed display   // constructor (so no reset in begin()) -- must reset manually here:   pinmode(display_reset, output);   digitalwrite(display_reset, low);  delay(1);   digitalwrite(display_reset, high); delay(50);    for(e=0; e<num_eyes; e++) { // deselect     pinmode(eye[e].cs, output);     digitalwrite(eye[e].cs, high);   }   for(e=0; e<num_eyes; e++) {     digitalwrite(eye[e].cs, low); // select 1 eye init #ifdef _adafruit_st7735h_ // tft     eye[e].display.initr(initr_144greentab); #else // oled     eye[e].display.begin(); #endif     if(eye[e].blink.pin >= 0) pinmode(eye[e].blink.pin, input_pullup);     digitalwrite(eye[e].cs, high); // deselect   } #ifdef blink_pin   pinmode(blink_pin, input_pullup); #endif  for(uint8_t i=0; i<=6; i++) {     pinmode(i, input);     digitalwrite(i, high); // enable pullup } } // eye-rendering function --------------------------------------------------  spisettings settings(24000000, msbfirst, spi_mode3); // teensy 3.1 max spi  void draweye(      // renders 1 eye.   uint8_t   e,     // eye array index; 0 or 1 left/right   uint16_t img) { // pointer image data    uint8_t  screenx, screeny;   uint16_t p;    // set raw pixel dump entire screen.  although such writes can wrap   // around automatically end of rect beginning, region   // reset on each frame here in case of spi glitch.   spi.begintransaction(settings); #ifdef _adafruit_st7735h_ // tft   eye[e].display.setaddrwindow(0, 0, 127, 127); #else // oled   eye[e].display.writecommand(ssd1351_cmd_setrow);    // y range   eye[e].display.writedata(0); eye[e].display.writedata(screen_height - 1);   eye[e].display.writecommand(ssd1351_cmd_setcolumn); // x range   eye[e].display.writedata(0); eye[e].display.writedata(screen_width  - 1);   eye[e].display.writecommand(ssd1351_cmd_writeram);  // begin write #endif   digitalwrite(eye[e].cs, low);                       // chip select   digitalwrite(display_dc, high);                     // data mode   // issue raw 16-bit values every pixel...    for(screeny=0; screeny<screen_height; screeny++) {     for(screenx=0; screenx<screen_width; screenx++) {       p = img[screeny][screenx];       // spi fifo technique paul stoffregen's ili9341_t3 library:       while(kinetisk_spi0.sr & 0xc000); // wait space in fifo       kinetisk_spi0.pushr = p | spi_pushr_ctas(1) | spi_pushr_cont;     }   }    kinetisk_spi0.sr |= spi_sr_tcf;         // clear transfer flag   while((kinetisk_spi0.sr & 0xf000) ||    // wait spi fifo drain        !(kinetisk_spi0.sr & spi_sr_tcf)); // wait last bit out   digitalwrite(eye[e].cs, high);          // deselect   spi.endtransaction(); }     // main loop -- runs continuously after setup() ----------------------------  void loop() {     uint8_t i;    // scan buttons 2-6 looking first button pressed...   for(i=0; (i<2) && (digitalread(i+2) == high); i++);    if(i < 2) {               // pressed?  yes!     if(i == prevbtn) {      // same last time checked?  good!       if(++btncount == 3) { // 3 passes 'debounce' button input         if(digitalread(2) == low) {           draweye(0, sclera[0][0]);           draweye(1, sclera[0][0]);         } //        if(digitalread(3) == low) { //          draweye(0, polar); //          draweye(1, polar); //        } //        if(digitalread(4) == low) { //          draweye(0, sclera[0][0]); //          draweye(1, polar[0][0]); //        } //        if(digitalread(5) == low) { //          draweye(0, polar[0][0]); //          draweye(1, sclera[0][0]); //        } //        if(digitalread(6) == low) { //          draweye(0, eyeimage[3]); //          draweye(1, eyeimage[3]); //        }       }     } else btncount = 0; // different button before - start count on     prevbtn = i;   } else prevbtn = 99;   // no buttons pressed  } 

and header goateye.h sans array data post massive

#define screen_height 128 #define screen_width 128   const uint16_t sclera[screen_height][screen_width] = {}; const uint16_t polar[screen_height][screen_width] = {}; 

thank help!

the problem here:

void draweye(      // renders 1 eye.   uint8_t   e,     // eye array index; 0 or 1 left/right   uint16_t img) { // pointer image data 

the function draweye expecting single uint16_t, not two-dimensional array. when try take array index of it, error because it's not array.

you need define function this:

void draweye(      // renders 1 eye.   uint8_t   e,     // eye array index; 0 or 1 left/right   const uint16_t img[screen_height][screen_width]) { // pointer image data 

and call this:

    if(digitalread(2) == low) {       draweye(0, sclera);       draweye(1, sclera);     } 

Comments

Popular posts from this blog

authentication - Mongodb revoke acccess to connect test database -

r - Update two sets of radiobuttons reactively - shiny -

ios - Realm over CoreData should I use NSFetchedResultController or a Dictionary? -