Sketch with Alarm.timerRepeat hangs up

Hello,
I have been working on a sketch to eventually measure temperature and humidity and graph on OLED (with eventually scrolling real time on x axis). The individual components of the sensor, real time clock and oled all work. When measurement and display functions were in the loop with delay, everything worked. I changed to timer.Repeat and when there is no Alarm.delay the code works…but there isn’t enough time to read the screen. What am I missing or not understanding? Am I using the repeat wrong?
Mega with wifi board not used incurrent sketch.

#include <Wire.h>                               // I2C
#include <Adafruit_GFX.h>                       // Graphics
#include <Adafruit_SSD1306.h>                   // OLED
#include <RTClib.h>                             // clock 
#include <TimeLib.h>                            // TimeAlarms 1.5.0
#include <TimeAlarms.h>
#include "DHT.h"                                // Temp Humidity sensor


//  Declare objects
#define OLED_ADDR   0x3C                        // OLED display 0x3C
Adafruit_SSD1306 display(128, 64, &Wire, -1);   // OLED  no reset pin; set to -1

RTC_DS1307 RTC;                                 // clock 0x68  memory 0x57
DHT dht(26, DHT21);                             // AM2301 (DHT 21) Temp humidity yellow wire Mega D26

//  Variables
char dbuffer[12] = "";                          // day of week    print buffer
char mbuffer[14] = "";                          // month and date print buffer
char tbuffer[9] = "";                           // time           print buffer
float h;                                        // temperature
float t;                                        // humidity
int d;                                          // data number

char wday [7][10] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
char monName [12][10] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};

//  Graph variables
const int MAX = 60;
int tempArray[MAX];
int humArray[MAX];
//                                          END OF DECLARATIONS
//====================================================================================================
void setup() {
  Serial.begin(9600);
  Wire.begin();
  dht.begin();

  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);                     // initialize and clear display
  display.clearDisplay();         display.display();
  display.setTextSize(1);         display.setTextColor(WHITE);        // set text attributes
  display.setCursor(10, 25);       display.print("Starting up...");
  display.display();

  RTC.begin();                                                        // initialize clock
  DateTime current = RTC.now();                                       // compare with compile time
  DateTime compiled = DateTime(__DATE__, __TIME__);
  if (current.unixtime() < compiled.unixtime()) {                     // update time if needed
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
  Alarm.delay(250);

  d = 0;                                                              // initialize array
  for ( int i = 0; i < MAX; i++)
  {
    tempArray[ i ] = 0;
    humArray[ i ] = 0;
  }

  Alarm.timerRepeat ( 10, displayDatetime );                          // timers and alarms
  Alarm.timerRepeat ( 30, displayData );
  Alarm.timerRepeat (  5, storeData );
  Alarm.timerRepeat ( 10, drawTemp );
  Alarm.timerRepeat ( 10, drawHum ) ;
}
//                                          END OF SETUP
//=====================================================================================================

void loop() {
  Alarm.delay(0);                            // MUST call Alarm.delay() in loop to monitor triggers
  DateTime now = RTC.now();
  setTime(now.hour(), now.minute(), now.second(), now.day(), now.month(), now.year());

  sprintf(dbuffer, "%s", wday[now.dayOfTheWeek()]);                                     // day of the week
  sprintf(mbuffer, "%s %02d", monName[now.month() - 1], now.day());                     // month date
  sprintf(tbuffer, "%02d:%02d:%02d", now.hour(), now.minute(), now.second() );          // time string
}
//                                          END OF LOOP
//======================================================================================================

void storeData() {                           // measure and store data
  //display.clearDisplay();
  //display.setCursor(0,20); display.print("Storing data number ");display.setCursor(55,35);display.print(d);
  //display.display();
  Serial.println();
  Serial.print("Storing data number  "); Serial.print(d); Serial.print("   "); Serial.print(tbuffer);

  t = dht.readTemperature();        String temp = String(t);  // read humidity and temp
  h = dht.readHumidity();           String hum  = String(h);  // strings for Thingspeak

  static int i = 0;
  if ( i < MAX )                  //
  {
    tempArray[ i ] = t;
    humArray[ i ]  = h;
    i++;
    Serial.println(); Serial.println(d); Serial.println(i); Serial.println(t); Serial.println(h);
  }
  d = d + 1;
}
//************************************************************************************************************
void displayDatetime() {                      //  display date and time
  display.clearDisplay();
  display.setCursor(25, 10);      display.print(dbuffer);
  display.setCursor(25, 30);      display.print(mbuffer);
  display.setCursor(25, 50);      display.print(tbuffer);
  display.display();
  Alarm.delay(500);

  Serial.println(); Serial.print("displayDatetime function called  "); Serial.println(tbuffer);
}

void displayData() {
  display.clearDisplay();
  display.setCursor(8, 10);  display.print("Temperature  ");  display.print(t, 1); display.print(char(247)); display.print("C");
  display.setCursor(8, 25);  display.print("Humidity     ");  display.print(h, 1); display.print(" %");
  display.setCursor(8, 40);  display.print("Data Number    "); display.print(d);
  display.display();
  Alarm.delay(1000);

  Serial.println();   Serial.print("displayData function called    ");  Serial.println(tbuffer);
}

//********************************************************************************************************
//  data graphs by data number  not to scale

void drawTemp()  {                      //  draw temperature graph
  drawGraph();
  display.print("Temperature "); display.print(char(247)); display.print("C");
  //  X axis tick labels
  display.setCursor(0, 40);      display.print("20");     //  Y axis tick labels  10 pixels/degree
  display.setCursor(0, 20);      display.print("22");

  for (int j = 0; j < MAX; j++ )
    //display.drawFastHLine( 128 - MAX * 2 + i * 2, 64 - tempArray[ i ] * 2, 2, WHITE );
    display.drawFastHLine( 128 + 10 - MAX * 2 + j * 2, 64 + 20 - tempArray[ j ] * 2, 2, WHITE ); //+number offset
  display.display();

  Serial.println(); Serial.print("drawTemp function called  "); Serial.println(tbuffer);
  Alarm.delay(1000);
}

void drawHum()    {                      //  draw humidity graph
  drawGraph();
  display.print("  Humidity %");
  //  X axis tick labels
  display.setCursor(0, 50);      display.print("30");  //  Y axis tick labels
  display.setCursor(0, 30);      display.print("40");
  display.setCursor(0, 10);      display.print("50");

  for (int k = 0; k < MAX; k++)
    display.drawFastHLine( 128 + 10 - MAX * 2 + k * 2, 64 - humArray[ k ] / 2, 2, WHITE);
  display.display();

  Serial.println(); Serial.print("drawHum function called   "); Serial.println(tbuffer);
}

void drawGraph()    {                     //   graph axes on OLED
  display.clearDisplay();

  display.drawFastHLine( 12, 56, 110, WHITE );       //  X axis
  display.drawFastVLine( 12, 6, 50, WHITE );         //  Y axis

  display.setCursor (25, 57);     display.print("00");      // time 24 hour clock
  display.setCursor (55, 57);     display.print("06");
  display.setCursor (85, 57);     display.print("12");
  display.setCursor(115, 57);     display.print("18");

  display.drawPixel(  6, 13, WHITE );             // Y axis tick labels
  display.drawPixel(  6, 23, WHITE );
  display.drawPixel(  6, 33, WHITE );
  display.drawPixel(  6, 43, WHITE );

  display.drawPixel( 47, 62, WHITE );             // X axis tick labels
  display.drawPixel( 87, 62, WHITE );
  display.drawPixel( 107, 62, WHITE );

  display.setCursor(30, 0);                       // location of title
  display.display();
}

Any help would be appreciated. Thank you.

Using an Uno/Mega and want task switching try the thing about Demonstration code for several things at the same time https://forum.arduino.cc/index.php?topic=223286.0?

Using a Due, try uMT.

Using an ESP32 use freeRTOS.