Forum Rule: Always post complete source code & details to reproduce any issue!
Results 1 to 11 of 11

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

  1. #1

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

    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>)
    */

  2. #2
    Moderator KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    3,215
    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...

  3. #3
    Senior Member PaulStoffregen's Avatar
    Join Date
    Nov 2012
    Posts
    16,218
    Quote Originally Posted by vfxwolf View Post
    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);

  4. #4
    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.

  5. #5
    Thanks Kurt, that fixed it. I guess this is what Paul's talking about sloppy code being flagged on Teensy.. ;(

  6. #6
    Senior Member PaulStoffregen's Avatar
    Join Date
    Nov 2012
    Posts
    16,218
    Quote Originally Posted by vfxwolf View Post
    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>

  7. #7
    Crikey! The screen refresh is blistering now, Paul.. thanks! Exactly what did that line do?

  8. #8
    Senior Member PaulStoffregen's Avatar
    Join Date
    Nov 2012
    Posts
    16,218
    Kind of a longshot, but maybe try 1000000 instead of 400000....

  9. #9
    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?

  10. #10
    Senior Member PaulStoffregen's Avatar
    Join Date
    Nov 2012
    Posts
    16,218
    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.

  11. #11
    Senior Member PaulStoffregen's Avatar
    Join Date
    Nov 2012
    Posts
    16,218
    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.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •