Fully working sketch on Mega, warning errors compiling for Teensy 3.6

Status
Not open for further replies.

vfxwolf

Well-known member
I'm getting these errors when compiling a sketch that was working fine on the Mega earlier this afternoon:

/Volumes/G-DRIVE Main/Documents/Arduino/Wolf_GUI_v9_-_teensy/Wolf_GUI_v9_-_teensy.ino: In member function 'void FlashBox::Flasher()':
/Volumes/G-DRIVE Main/Documents/Arduino/Wolf_GUI_v9_-_teensy/Wolf_GUI_v9_-_teensy.ino:142:43: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if ((currentMillis - previousMillis >= OnTime) && (highlight == 0))
^
/Volumes/G-DRIVE Main/Documents/Arduino/Wolf_GUI_v9_-_teensy/Wolf_GUI_v9_-_teensy.ino:153:48: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
else if ((currentMillis - previousMillis >= OffTime) && (highlight == 1))

Be grateful if anyone could explain whats happening... the sketch seems to run, albeit much slower then it did on the Mega, which is surprising... but these warnings bother me.


Here's the code:

Code:
/*


  List of fonts: https://learn.adafruit.com/adafruit-gfx-graphics-library/using-fonts






  If you have the 128x64 version, you need to edit the file called Adafruit_SSD1306.h that is on the
  Adafruit_SSD1306-master folder. The library comes by default set to use the 128x32 display.
  For this reason you need to define the correct resolution like this:
  Quote:
   #define SSD1306_128_64
  //   #define SSD1306_128_32
  //   #define SSD1306_96_16
  Unquote.
  Notes the "//" before each line to comment the other resolutions that we are not going to use.




*/






#include <Adafruit_GFX.h>  // Include core graphics library for the display
#include <Adafruit_SSD1306.h>  // Include Adafruit_SSD1306 library to drive the display
#include <Metro.h>
#include <Encoder.h>
#include <Bounce2.h>
#include <Fonts/FreeSans9pt7b.h>  // Add a custom font


Adafruit_SSD1306 display;  // Create display




int Variable1;  // Create a variable to have something dynamic to show on the display


//                                        Time variables


uint32_t TotalSeconds = 0;
uint32_t remainingSeconds = 0;
uint32_t h        = 0;
uint32_t m        = 0;
uint32_t s        = 0;
uint32_t rem      = 0;
uint32_t TL_hours = 0;
uint32_t TL_mins  = 0;


//                                          Motor Variables


int16_t posX = 9999;
int16_t posY = 9999;
int16_t posZ = 9999;


int16_t destX;
int16_t destY;
int16_t destZ;


int16_t keyframeX[10];
int16_t keyframeY[10];
int16_t keyframeZ[10];


int32_t maxaccel = 99999;
int32_t maxspeed = 99999;






//                                          Menu Variables
boolean hlight = 0;
int menuMax    = 5;
int menuMode   = 0;
int menuDelay  = 500;
Metro blinkon  = Metro(1000);
Metro blinkoff = Metro(1000);
Metro debounce = Metro(10);


//                                          Encoder Variables


Encoder myEnc(10, 11);
int encState;
int encRead;                              //current encoder read
int encOld;                               //previous encoder read
const int EncButton = 12;                  //Pin # to which SW line is connected
byte oldButtonState = HIGH;               // set previous buttonestate to HIGH because of pull-up resistor
const unsigned long debounceTime = 10;    // milliseconds
unsigned long buttonPressTime;            // when the switch last changed state
boolean buttonPressed = 0;                // a flag variable




//                                          Graphic variables
int progress = 0;
String statusline[3] = {"Testing","Saved","Cleared"};




//                                          Mode variables


                  // Realtime Mode
                                            
char StartingKey;
char EndingKey;
String RT_status[5] = {"Homing", "Move > ","Saved: ","Clr: ","Ready"}; 






#define SMLFONT FreeSans9pt7b




Metro nextfunc = Metro(4000);


class FlashBox
{
    int OnTime;
    int OffTime;
    int x;
    int y;
    int w;
    int h;
    int highlight;
    unsigned long previousMillis;


    // constructor
  public:
    FlashBox(int xx, int yy, int width, int height, int on, int off)
    {
      x = xx;
      y = yy;
      w = width;
      h = height;
      OnTime = on;
      OffTime = off;
      highlight = 0;
      previousMillis = 0;
      blinkon.interval(OnTime);
      blinkon.reset();
      blinkoff.interval(OffTime);
      blinkoff.reset();
    }


    void Flasher()
    {
      unsigned long currentMillis = millis();


      //        if ((blinkon.check())  && (highlight == 0))
      if ((currentMillis - previousMillis >= OnTime)  && (highlight == 0))
      {


        display.drawRect(x, y, w, h, WHITE);
        display.display();
        highlight = 1;
        previousMillis = currentMillis;


        //delay (1000);
      }
      //          else if ((blinkoff.check()) && (highlight == 1))
      else if ((currentMillis - previousMillis >= OffTime) && (highlight == 1))
      {


        display.drawRect(x, y, w, h, BLACK);
        display.display();
        highlight = 0;
        previousMillis = currentMillis;
        //delay(1000);
      }


    }
};




void setup()  // Start of setup
{
  // Encoder setup
  pinMode(EncButton, INPUT);
  digitalWrite(EncButton, HIGH); // Pull-Up resistor for switch


  // Display Setup
  delay(100);  // This delay is needed to let the display to initialize
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // Initialize display with the I2C address of 0x3C
  display.clearDisplay();  // Clear the buffer
  display.setTextColor(WHITE);  // Set color of the text
  display.setRotation(0);  // Set orientation. Goes from 0, 1, 2 or 3
  display.setTextWrap(false);  // By default, long lines of text are set to automatically “wrap” back to the leftmost column.
  // To override this behavior (so text will run off the right side of the display - useful for
  // scrolling marquee effects), use setTextWrap(false). The normal wrapping behavior is restored
  // with setTextWrap(true).


  display.dim(0);  //Set brightness (0 is maximun and 1 is a little dim)


}  // End of setup




void loop()  // Start of loop
{


  getMenuMode();   // 0: Run Mode A 1: Run Mode B 2: Live Mode




}  // End of loop


void getMenuMode() {
  int mode = 1;
  display.clearDisplay();  // Clear the display so we can refresh
  display.setFont(&SMLFONT);  // Set a custom font
  display.setTextSize(1);  // Set text size. We are using a custom font so you should always use the text size of 0
  display.setTextColor(WHITE);


  do {
    encRead = myEnc.read() >> 2; // bitwise divide by 4


    if (encRead < encOld)
    {
      mode--;
      if (mode < 1) mode = 1;
      encOld = encRead;
    }




    if (encRead > encOld)
    {
      mode++;
      if (mode > menuMax) mode = menuMax;
      encOld = encRead;
    }






    switch (mode) {
      case 1:
        display.clearDisplay();  //          REALTIME Mode()  menuMode = 1
        //drawgrid();
        
        display.drawCircle(84, 12, 3, WHITE);
        display.drawCircle(74, 12, 3, WHITE);
        display.drawCircle(64, 12, 3, WHITE);
        display.drawCircle(54, 12, 3, WHITE);
        display.drawCircle(44, 12, 3, WHITE);
        display.fillCircle(44, 12, 1, WHITE);
        
        display.drawRoundRect(0, 0, 128, 64, 8, WHITE);
        display.setCursor(48, 12);  // (x,y)
        display.setFont();
        //display.print("SELECT");
        //display.print(mode);
        display.setFont(&SMLFONT);
        display.setCursor(20, 38);  // (x,y)
        display.println("REALTIME");
        display.setCursor(44, 55);  // (x,y)
        display.println("Mode");
        display.display();
        //            RunMode('A','B');
        break;


      case 2:
        display.clearDisplay();  //          RECORD Mode()  menuMode = 2
        //drawgrid();
        display.drawCircle(84, 12, 3, WHITE);
        display.drawCircle(74, 12, 3, WHITE);
        display.drawCircle(64, 12, 3, WHITE);
        display.drawCircle(54, 12, 3, WHITE);
        display.drawCircle(44, 12, 3, WHITE);
        display.fillCircle(54, 12, 1, WHITE);
        display.drawRoundRect(0, 0, 128, 64, 8, WHITE);
        display.setCursor(48, 12);  // (x,y)
        display.setFont();
        //display.print("SELECT");
        //display.print(mode);
        display.setFont(&SMLFONT);
        display.setCursor(27, 38);  // (x,y)
        display.println("RECORD");
        display.setCursor(44, 55);  // (x,y)
        display.println("Mode");
        display.display();


        break;


      case 3:
        display.clearDisplay();  //           LIVE mode  menuMode = 3
        //drawgrid();
        display.drawCircle(84, 12, 3, WHITE);
        display.drawCircle(74, 12, 3, WHITE);
        display.drawCircle(64, 12, 3, WHITE);
        display.drawCircle(54, 12, 3, WHITE);
        display.drawCircle(44, 12, 3, WHITE);
        display.fillCircle(64, 12, 1, WHITE);
        display.drawRoundRect(0, 0, 128, 64, 8, WHITE);
        display.setCursor(48, 12);  // (x,y)
        display.setFont();
        //display.print("SELECT");
        //display.print(mode);
        display.setFont(&SMLFONT);
        display.setCursor(47, 38);  // (x,y)
        display.println("LIVE");
        display.setCursor(44, 55);  // (x,y)
        display.println("Mode");
        display.display();
        checkSwitch();
        if (buttonPressed) {
          buttonPressed = 0;
          display.drawRect(0, 0, 128, 64, WHITE);
          display.display();
          delay(menuDelay);
          menuMode = 3;
          LiveMode();
        }
        break;


      case 4:
        display.clearDisplay();  //           SET TimeLapse  menuMode = 4
        //drawgrid();
        display.drawCircle(84, 12, 3, WHITE);
        display.drawCircle(74, 12, 3, WHITE);
        display.drawCircle(64, 12, 3, WHITE);
        display.drawCircle(54, 12, 3, WHITE);
        display.drawCircle(44, 12, 3, WHITE);
        display.fillCircle(74, 12, 1, WHITE);
        display.drawRoundRect(0, 0, 128, 64, 8, WHITE);
        display.setCursor(48, 12);  // (x,y)
        display.setFont();
        //display.print("SELECT");
        //display.print(mode);
        display.setFont(&SMLFONT);
        display.setCursor(13, 38);  // (x,y)
        display.println("TIMELAPSE");
        display.setCursor(30, 55);  // (x,y)
        display.println("Program");
        display.display();
        checkSwitch();
        if (buttonPressed) {
          buttonPressed = 0;
          display.drawRect(0, 0, 128, 64, WHITE);
          display.display();
          delay(menuDelay);
          menuMode = 4;
          LapseModeSet();
        }
        break;


      case 5:
        display.clearDisplay();  //            RUN Timelapse  MenuMode = 5
        //drawgrid();
        display.drawCircle(84, 12, 3, WHITE);
        display.drawCircle(74, 12, 3, WHITE);
        display.drawCircle(64, 12, 3, WHITE);
        display.drawCircle(54, 12, 3, WHITE);
        display.drawCircle(44, 12, 3, WHITE);
        display.fillCircle(84, 12, 1, WHITE);
        display.drawRoundRect(0, 0, 128, 64, 8, WHITE);
        display.setCursor(48, 12);  // (x,y)
        display.setFont();
        //display.print("SELECT");
        //display.print(mode);
        display.setFont(&SMLFONT);
        display.setCursor(13, 38);  // (x,y)
        display.println("TIMELAPSE");
        display.setCursor(49, 55);  // (x,y)
        display.println("Run");
        display.display();
        checkSwitch();
        if (buttonPressed) {
          buttonPressed = 0;
          display.drawRect(0, 0, 128, 64, WHITE);
          display.display();
          delay(menuDelay);
          menuMode = 5;
          LapseModeRun();
        }
        break;


    }
  } while (menuMode == 0);
}


void TimeCalc( uint32_t seconds ) {
  uint32_t t = seconds;


  h =  (uint32_t)t / (uint32_t)3600L;
  rem =  (uint32_t)t %  (uint32_t)3600L;
  m = rem / 60;
  s = rem % 60;


//
//  h = t / 3600;
//  rem = t % 3600;
//  m = rem / 60;
//  s = rem % 60;
}


void RunMode ( char startKF, char endKF ) {
  nextfunc.reset();
  TotalSeconds = 740;
  do {
    Variable1++;  // Increase variable by 1
    if (Variable1 > 150) // If Variable1 is greater than 150
    {
      Variable1 = 0;  // Set Variable1 to 0
    }


    display.clearDisplay();  // Clear the display so we can refresh




    display.setFont(&SMLFONT);  // Set a custom font
    display.setTextSize(1);  // Set text size. We are using a custom font so you should always use the text size of 0
    display.setTextColor(WHITE);




    // Print text:
    display.setCursor(0, 12);  // (x,y)
    display.print("Running "); display.print(startKF); display.print("<->"); display.print(endKF);  // print start and end keyframes
    display.setFont();
    display.setCursor(0, 30);  // (x,y)
    //        display.println("TIME REMAINING");  // Text or value to print
    display.setCursor(0, 29);
    display.println(" HOURS   MIN.    SEC.");
    display.drawLine(0, 43, 128, 43, WHITE);  // Draw Horizontal line
    display.drawLine(42, 43, 42, 64, WHITE);  // Draw Vertictal line
    display.drawLine(84, 43, 84, 64, WHITE);  // Draw Vertictal line
    display.setFont(&SMLFONT);
    TimeCalc(TotalSeconds);
    display.setCursor(5, 62);
    display.println(h);    // Hours
    display.setCursor(54, 62);
    display.println(m);      // Minutes
    display.setCursor(97, 62);
    display.println(s);      // Seconds
    --TotalSeconds;




    // Draw Progress Bar rectangle:
    display.drawRect(0, 22, 128, 1, WHITE);  // Draw rectangle (x,y,width,height,color)
    display.fillRect(0, 21, progress, 3, WHITE);  // It draws from the location to down-right
    progress++;
    if (progress > 127) {
      progress = 0;
    }


    //display.setFont(&FreeMonoBold12pt7b);  // Set a custom font


    // Print variable with left alignment:
    display.setFont();




    display.display();  // Print everything we set previously
    checkSwitch();      // check encoder switch
    if (buttonPressed) {
      Variable1 = 0;
      progress = 0;
      display.clearDisplay();
      display.display();
      return;
    }
  } while (Variable1 < 128);




}


void LiveMode() {


  
  while (menuMode == 3) 
  {
// Poll Joystick


// Poll Pushbuttons


// update variables


    screen_Live();    
    //    statusblock(statusline[x]);        
    
    
    display.display();    
    checkSwitch();
    if (buttonPressed)
    {
      buttonPressed = 0;
      menuMode = 0;
    }
    
  }
  return;
}


void RecordMode() {
  // display.fillRect(0, 0, 128, 64, WHITE);
  display.setFont(&SMLFONT);
  display.setTextSize(0);
  display.clearDisplay();
  display.setCursor(10, 20);  // (x,y)
  display.setTextColor(WHITE);
  while (!buttonPressed) {
    display.println("Recording..");
    display.display();
  }
  return;
}


void LapseModeSet() {


  screen_Lapse();


  FlashBox hours(1, 36, 63, 27, 200, 200); // Construct flashing box (Hours)
  FlashBox mins(65, 36, 62, 27, 200, 200); // Construct flashing box (Minutes)
  FlashBox TL_set(0, 0, 128, 64, 300, 300); // Construct TL Done flashing box
  int mode = 0;  // 0 = hours selected   1 = minutes selected
  int valuechange = 0;


  encOld = 0;
  buttonPressed = 0;
  myEnc.write(0);
  do {




    do {


      encRead = myEnc.read() >> 2; // bitwise divide by 4
      if (encRead < encOld)
      {
        mode--;
        if (mode < 0) mode = 0;
        encOld = encRead;
        screen_Lapse();
      }
      if (encRead > encOld)
      {
        mode++;
        if (mode > 2) mode = 2;
        encOld = encRead;
        screen_Lapse();
      }




      switch (mode)
      {
        case 0:
          hours.Flasher();    // flash Hours Box
          break;
        case 1:
          mins.Flasher();     // flash Minutes Box
          break;
        case 2:
          TL_set.Flasher();   // flash whole screen Box
          break;
      }


      checkSwitch();
      if (buttonPressed)
      {
        buttonPressed = 0;
        valuechange = 1;
        if (mode == 0) myEnc.write(TL_hours);
        if (mode == 1) myEnc.write(TL_mins);
        screen_Lapse();
      }


    } while (!valuechange);




//                                     ADJUSTMENT loop
    do {
      if (mode == 0)   // Adjust Hours
      {
        display.drawRect(1, 36, 63, 27, WHITE);
        encRead = myEnc.read() >> 2; // bitwise divide by 4
        TL_hours = constrain(encRead, 0, 100);
        screen_Lapse();
        checkSwitch();
        if (buttonPressed)
        {
          valuechange = 0;
          buttonPressed = 0;
        }
      }


      if (mode == 1)   // Adjust Minutes
      {
        display.drawRect(65, 36, 62, 27, WHITE);
        encRead = myEnc.read() >> 2; // bitwise divide by 4
        TL_mins = constrain(encRead, 0, 59);
        screen_Lapse();
        checkSwitch();
        if (buttonPressed)
        {
          valuechange = 0;
          buttonPressed = 0;
        }
      }


      if (mode == 2)   // Quit to Main Menu
      {


        valuechange = 0;
        buttonPressed = 0;
        menuMode = 0;
        remainingSeconds = ((TL_hours * 60) * 60) + (TL_mins * 60);


      }


    } while (valuechange);










  } while (menuMode == 4);


}


void LapseModeRun() {
  //  Serial.begin(9600);
  TotalSeconds = remainingSeconds;
  int percent = 0;


  do {






    display.clearDisplay();  // Clear the display so we can refresh
    display.setFont(&SMLFONT);  // Set a custom font
    display.setTextSize(1);  // Set text size. We are using a custom font so you should always use the text size of 0
    display.setTextColor(WHITE);
    display.setCursor(0, 12);  // (x,y)
    display.print("Running ");
    display.setFont();
    display.setCursor(0, 30);  // (x,y)
    //        display.println("TIME REMAINING");  // Text or value to print
    display.setCursor(0, 29);
    display.println(" HOURS   MIN.    SEC.");
    display.drawLine(0, 43, 128, 43, WHITE);  // Draw Horizontal line
    display.drawLine(42, 43, 42, 64, WHITE);  // Draw Vertictal line
    display.drawLine(84, 43, 84, 64, WHITE);  // Draw Vertictal line
    display.setFont(&SMLFONT);
    TimeCalc(remainingSeconds);
    //Serial.print(h); Serial.print(" ");Serial.print(m); Serial.print(" ");Serial.println(s);
    display.setCursor(5, 62);
    display.println(h);    // Hours
    display.setCursor(54, 62);
    display.println(m);      // Minutes
    display.setCursor(97, 62);
    display.println(s);      // Seconds




    // Draw Progress Bar rectangle:
    progress = abs((((float)remainingSeconds / (float)TotalSeconds) * 128) - 128);
    percent = ((float)progress / 128) * 100;
    display.drawRect(0, 22, 128, 1, WHITE);  // Draw rectangle (x,y,width,height,color)
    display.fillRect(0, 21, progress, 3, WHITE);  // It draws from the location to down-right




    //display.setFont(&FreeMonoBold12pt7b);  // Set a custom font


    // Print variable with left alignment:
    display.setFont();
    display.setCursor(100, 5);
    display.print(percent);
    display.println("%");
    //    display.setCursor(80, 5);
    //    display.print(remainingSeconds);


    display.display();  // Print everything we set previously


    if (remainingSeconds == 0)
    {
      //display.getTextBounds("Running ",0,12,int x, int y, int ww, int hh);
      display.fillRect(0, 0, 70, 20, BLACK);
      display.setFont(&SMLFONT);
      display.setCursor(0, 12);  // (x,y)
      display.print("DONE ");
      display.display();
      delay(50000);
      menuMode = 0;
    }




    remainingSeconds--;             //          TICK!










    checkSwitch();      // check encoder switch
    if (buttonPressed) {
      buttonPressed = 0;
      menuMode = 0;
      display.clearDisplay();
      display.display();
      return;
    }
  } while (menuMode == 5);




}


void checkSwitch() {
  // Check Encoder Switch


  byte buttonState = digitalRead(EncButton);
  if (buttonState != oldButtonState)
  {
    if (millis () - buttonPressTime >= debounceTime)
    { // debounce
      buttonPressTime = millis ();                      // when we closed the switch
      oldButtonState =  buttonState;                    // remember for next time
      if (buttonState == LOW)
      {
        //        Serial.println ("Button pressed");               // DEBUGGING: print that button has been closed
        buttonPressed = 1;
      }
      else
      {
        //        Serial.println ("Button released");               // DEBUGGING: print that button has been opened
        buttonPressed = 0;
      }
    }  // end if debounce time up
  } // end of state change
}


void screen_Lapse() {
  display.setFont(&SMLFONT);
  display.setTextSize(0);
  display.clearDisplay();
  display.drawRect(0, 0, 128, 64, WHITE);  // Draw Border
  display.setCursor(4, 15);  // (x,y)
  display.setTextColor(WHITE);
  display.println("Set Timelapse");
  display.setFont();
  display.setCursor(0, 25);
  display.println("   HOURS     MINUTES");
  display.drawLine(0, 35, 128, 35, WHITE);  // Draw Horizontal line
  display.drawLine(64, 35, 64, 64, WHITE);  // Draw Vertictal line
  display.setFont(&SMLFONT);
  display.setCursor(17, 55);
  display.println(TL_hours);
  display.setCursor(85, 55);
  display.println(TL_mins);
  display.display();


}


void screen_Live() {
//  display.setFont(&SMLFONT);
  
  display.clearDisplay();
  display.setFont();
  display.setTextSize(0);
  display.drawRect(0, 0, 128, 64, WHITE);  // Draw Border
//  display.setCursor(4, 15);  // (x,y)
  display.setTextColor(WHITE);
  display.setCursor(10, 28);display.print("SLIDE: ");display.print(posX);
  display.setCursor(10, 38);display.print("  PAN: ");display.print(posY);
  display.setCursor(10, 48);display.print(" TILT: ");display.print(posZ);


  display.setCursor(88, 13);display.print("SPEED");
  display.setCursor(88, 23);display.print(maxspeed);
  display.setCursor(88, 38);display.print("ACCEL");
  display.setCursor(88, 48);display.print(maxaccel);
  
  
  //display.drawRect(1, 1, 81, 22, WHITE);
  display.drawLine(82, 0, 82, 64, WHITE);  // Draw Vertictal line
  
  //display.display();


}


void statusblock(String &string) { //        status line function (Live mode)
  
  display.drawRect(1, 1, 81, 21, BLACK);
  display.setFont(&SMLFONT);
  display.setCursor(3, 17);
  display.print(string);
}


void drawgrid() {//                         screen alignment grid
  display.drawRect(0, 0, 128, 64, WHITE);
  display.drawLine(64, 0, 64, 128, WHITE);
  display.drawLine(0, 32, 128, 32, WHITE);
}




/*/ Adafruit Graphic library code references




// Draw triangle:
// display.drawTriangle(40,40,   50,20,   60,40, WHITE);  // Draw triangle. X, Y coordinates for three corner points defining the triangle, followed by a color


// Draw filled triangle:
//display.fillTriangle(0,35,   15,45,   30,63, WHITE);  // Draw filled triangle. X, Y coordinates for three corner points defining the triangle, followed by a color


// Draw line:
//  display.drawLine(0, 18, 128, 18, WHITE);  // Draw line (x0,y0,x1,y1,color)


// Draw circle:
// display.drawCircle(47, 36, 20, WHITE);  //  Draw circle (x,y,radius,color). X and Y are the coordinates for the center point


// Draw a filled circle:
// display.fillCircle(12, 27, 10, WHITE);  // Draw filled circle (x,y,radius,color). X and Y are the coordinates for the center point


// Draw rectangle:
// display.drawRect(58, 0, 18, 18, WHITE);  // Draw rectangle (x,y,width,height,color)
// It draws from the location to down-right


// Draw rounded rectangle and fill:
// display.fillRoundRect(58, 0, 18, 18, 5, WHITE);  // Draw filled rounded rectangle (x,y,width,height,color)
// It draws from the location to down-right
// Draw rounded rectangle:
//display.drawRoundRect(79, 37, 49, 27, 8, WHITE);  // Draw rounded rectangle (x,y,width,height,radius,color)
// It draws from the location to down-right


// Print variable with right alignment:
//  display.setCursor(83, 60);  // (x,y)
//  display.println(string);  // Text or value to print




//


//  // Convert Variable1 into a string, so we can change the text alignment to the right:
//  // It can be also used to add or remove decimal numbers.
//  char string[10];  // Create a character array of 10 characters
//  // Convert float to a string:
//  dtostrf(Variable1, 3, 0, string);  // (<variable>,<amount of digits we are going to use>,<amount of decimal digits>,<string name>)
*/
 
In your code I see: int OffTime;
So offTime is signed and CurrentMillis and previousMillis are unsigned long variables. as such you are doing a comparison of signed vs unsigned...
 
Be grateful if anyone could explain whats happening...

Arduino defaults to hiding compiler warnings. You can turn warnings on from File > Preferences. But many authors never do this, and they might not even know there is such a preferences box in Arduino. As a result, many programs and libraries have sloppy code or minor mistakes which could have been easily avoided.

On Teensy, compiler warnings are always shown. It's slightly annoying to see them, but the long-term effect is widely used programs and libraries get cleaned up and improved.

the sketch seems to run, albeit much slower then it did on the Mega, which is surprising

Perhaps Adafruit's library is using I2C in 100 kHz mode?

Try adding this in setup(), right after display.begin(SSD1306_SWITCHCAPVCC, 0x3C):

Wire.setClock(400000);
 
Paul,

The compile goes nuts when I add in that line...


/Volumes/G-DRIVE Main/Documents/Arduino/Wolf_GUI_v9_-_teensy/Wolf_GUI_v9_-_teensy.ino: In function 'void setup()':
/Volumes/G-DRIVE Main/Documents/Arduino/Wolf_GUI_v9_-_teensy/Wolf_GUI_v9_-_teensy.ino:176:3: error: 'Wire' was not declared in this scope
Wire.setClock(400000);
^
Error compiling for board Teensy 3.6.


Then screams about Multiple libraries found...

take out the line, and all's quiet on the western front.
 
Thanks Kurt, that fixed it. I guess this is what Paul's talking about sloppy code being flagged on Teensy.. ;(
 
The compile goes nuts when I add in that line...

/Volumes/G-DRIVE Main/Documents/Arduino/Wolf_GUI_v9_-_teensy/Wolf_GUI_v9_-_teensy.ino: In function 'void setup()':
/Volumes/G-DRIVE Main/Documents/Arduino/Wolf_GUI_v9_-_teensy/Wolf_GUI_v9_-_teensy.ino:176:3: error: 'Wire' was not declared in this scope
Wire.setClock(400000);

Also add this at the beginning of the program (near all the other #include lines)

#include <Wire.h>
 
Is there an upper limit to the Wire.setClock() command? I just took it to 600000 and seems to be getting even faster. How will I know I've gone too far?
 
There are only 3 speeds, 100000, 400000 and 1000000.

Maybe someday in the future we'll support finer steps, but for now those are the only 3. All other numbers round down to the nearest of those 3, or use the slowest if under 100000.
 
I've put this change into our copy of Adafruit_SSD1306, and sent a pull request to Adafruit. In the future nobody should hit this slow speed.
 
I've put this change into our copy of Adafruit_SSD1306, and sent a pull request to Adafruit. In the future nobody should hit this slow speed.

Are there any other changes you've made to the library to optimize it for the Teensy? I got the version I'm using from the IDE..
 
Status
Not open for further replies.
Back
Top