using BlinkWithoutDelay with multiple sensors, LCD and SD card

Hi!

The whole code and project are bigger but I reduced it to the main issue, if the whole Sketch would help I will post it on request.
I am new to Arduino and coding so I hope it is a easy to solve problem.

What I have:
1x Arduino Uno
1x K30 Co2 sensor
2x DHT22 temperature/humidity sensor
1x SD card shield
1x 4x20 LCD

The sketch I made so far reads all sensors, writes to SD card, prints on LCD shield and has a delay of 7 seconds for everything.

What I want to achieve:
Read from the K30 every 0,5 sec (with the value from the sensor, I also want soon to control a Co2 bottle, that’s why I want to read more often than displaying on the LCD)
Read from the DHT22 every 2 sec
Print all values to LCD every 2 seconds
write all values to SD every 60 seconds

I thought the solution for this would be to use the principle from BlinkWithoutDelay, which I understand how it works but not with this requirements.

I would be very happy for pointers in the right direction or example how to modify my code.

#include "DHT.h"
#include <LiquidCrystal.h>
#include "kSeries.h"
#include <SD.h>
#include <Wire.h>

#define DHTPIN A0     
#define DHT2PIN A1
#define DHTTYPE DHT22   
kSeries K_30(8,9);
const int chipSelect = 10;

DHT dht1(DHTPIN, DHTTYPE);
DHT dht2(DHT2PIN, DHTTYPE);
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

void setup() 
{
    Serial.begin(9600);
   lcd.begin(20, 4);            // set up the LCD's number of columns and rows: 
  dht1.begin();
  dht2.begin();
  Wire.begin();
  pinMode(10, OUTPUT);
}

void loop() 
{
 delay(7000);
 double co2 = K_30.getCO2('p');
  float h1 = dht1.readHumidity();
  float t1 = dht1.readTemperature();
  float h2 = dht2.readHumidity();
  float t2 = dht2.readTemperature();
  
lcd.setCursor(3, 0);                       
lcd.print(t1,0); 
lcd.setCursor(3, 1);                       
lcd.print(t2,0); 
lcd.setCursor(3, 2);            
lcd.print(h1,0);    
lcd.setCursor(3, 3);                      \
lcd.print(h2,0); 
lcd.setCursor(14, 1);
lcd.println(co2,0);


 File dataFile = SD.open("datalog.csv", FILE_WRITE);
      dataFile.print(t1);
      dataFile.print(",");
      dataFile.print(t2);
      dataFile.print(",");
      dataFile.print(h1,0);
      dataFile.print(",");
      dataFile.print(h2,0);
      dataFile.print(",");
      dataFile.println(co2);
      dataFile.close();
}

The BWD principle will work fine for what you want to do. The BWD sketch times only one thing so there is only one start time and one interval but there is no reason why you cannot have many different start times and intervals.

See Demonstration code for several things at the same time