Как объединить функционал двух кодов?

Как объединить функционал двух кодов(не трогая вычисления). Я новичок в прогромировании, помогите пожалуйста:

Это первый:
#include <LiquidCrystal.h>
#include <Wire.h>
#include “MAX30100_PulseOximeter.h”

// LCD pins connections
LiquidCrystal lcd(12, 11, 10, 9, 8, 13);

// MAX30100 Pulse Oximeter instance
PulseOximeter pox;

// Analog pin for voltage divider
const int voltageDividerPin = A0;

// IR LED and phototransistor pins
const int irLEDPin = 10;
const int phototransistorPin = 11;

// Serial communication for debugging and data output
const int debugSerialSpeed = 9600;
const int oximeterSerialSpeed = 115200;

void setup() {
Serial.begin(debugSerialSpeed);
lcd.begin(16, 2);
Serial.print(“Initializing LCD…”);
lcd.clear();
lcd.print(“Init…”);
delay(3000);
lcd.clear();
lcd.print(“OK”);

Serial.begin(oximetermSerialSpeed);
Serial.print(“Initializing pulse oximeter…”);
lcd.setCursor(0, 1);
lcd.print(“Init…”);
delay(3000);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print(“OK”);

// Initialize the PulseOximeter instance
if (!pox.begin()) {
Serial.println(“FAILED”);
while (1) delay(10);
} else {
Serial.println(“SUCCESS”);
pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);

// Register a callback for the beat detection
pox.setOnBeatDetectedCallback(onBeatDetected);

}

// Set up the input pins for the voltage divider
pinMode(voltageDividerPin, INPUT);
}

void loop() {
// Update pulse oximeter data
pox.update();
if (millis() - pox.tsLastReport > 10000) { // Report data every 10 seconds
Serial.print(“Heart rate:”);
Serial.print(pox.getHeartRate());
Serial.print(“bpm / SpO2:”);
Serial.print(pox.getSpO2());
Serial.println(“%”);

lcd.clear();
lcd.setCursor(0, 0);
lcd.print("BPM : ");
lcd.print(pox.getHeartRate());

lcd.setCursor(0, 1);
lcd.print("SpO2: ");
lcd.print(pox.getSpO2());
lcd.print("%");

pox.tsLastReport = millis();

}

// Read voltage from the voltage divider and print to serial
int voltage = analogRead(voltageDividerPin);
Serial.print("Voltage: ");
Serial.println(voltage);

// Check for contact on the electrodes
if ((digitalRead(irLEDPin) == 1) || (digitalRead(phototransistorPin) == 1)) {
lcd.clear();
lcd.print(“!”);
} else {
// Nothing to do here, the LCD is updated in the pulse oximeter loop
}

// Small delay to prevent reading too often
delay(10);
}

void onBeatDetected() {
Serial.println(“Beat!”);
lcd.clear();
lcd.print(“Heart Beat!”);
}

Это второй:

void setup()
{
Serial.begin(9600);
// L0+ и L0-, подключенные на 10 и 11 пины, являются выходами детектора контактов электродов
pinMode(10, INPUT); // Настройка выхода L0-
pinMode(11, INPUT); // Настройка выхода L0+
}
void loop()
{
// При отсутствии контакта на одном из 3 электродов
// в мониторе порта будет отображаться “!” на месте
// отображения значения этого электрода
if((digitalRead(10) == 1)||(digitalRead(11) == 1))
{
Serial.println(‘!’);
}
else{
// отправка аналоговых значений с датчиков
Serial.println(analogRead(A0));
}
// Небольшая задержка для получения значений с электродов
delay(1);
}

Первый совет - вставить код по правилам

Снимок экрана в 2023-03-05 17-05-33

Это первый

#include <LiquidCrystal.h>
#include <Wire.h>
#include "MAX30100_PulseOximeter.h"

// LCD pins connections
LiquidCrystal lcd(12, 11, 10, 9, 8, 13);

// MAX30100 Pulse Oximeter instance
PulseOximeter pox;

// Analog pin for voltage divider
const int voltageDividerPin = A0;

// IR LED and phototransistor pins
const int irLEDPin = 10;
const int phototransistorPin = 11;

// Serial communication for debugging and data output
const int debugSerialSpeed = 9600;
const int oximeterSerialSpeed = 115200;

void setup() {
  Serial.begin(debugSerialSpeed);
  lcd.begin(16, 2);
  Serial.print("Initializing LCD...");
  lcd.clear();
  lcd.print("Init...");
  delay(3000);
  lcd.clear();
  lcd.print("OK");

  Serial.begin(oximetermSerialSpeed);
  Serial.print("Initializing pulse oximeter...");
  lcd.setCursor(0, 1);
  lcd.print("Init...");
  delay(3000);
  lcd.clear();
  lcd.setCursor(0, 1);
  lcd.print("OK");

  // Initialize the PulseOximeter instance
  if (!pox.begin()) {
    Serial.println("FAILED");
    while (1) delay(10);
  } else {
    Serial.println("SUCCESS");
    pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);

    // Register a callback for the beat detection
    pox.setOnBeatDetectedCallback(onBeatDetected);
  }

  // Set up the input pins for the voltage divider
  pinMode(voltageDividerPin, INPUT);
}

void loop() {
  // Update pulse oximeter data
  pox.update();
  if (millis() - pox.tsLastReport > 10000) { // Report data every 10 seconds
    Serial.print("Heart rate:");
    Serial.print(pox.getHeartRate());
    Serial.print("bpm / SpO2:");
    Serial.print(pox.getSpO2());
    Serial.println("%");

    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("BPM : ");
    lcd.print(pox.getHeartRate());
    
    lcd.setCursor(0, 1);
    lcd.print("SpO2: ");
    lcd.print(pox.getSpO2());
    lcd.print("%");

    pox.tsLastReport = millis();
  }

  // Read voltage from the voltage divider and print to serial
  int voltage = analogRead(voltageDividerPin);
  Serial.print("Voltage: ");
  Serial.println(voltage);

  // Check for contact on the electrodes
  if ((digitalRead(irLEDPin) == 1) || (digitalRead(phototransistorPin) == 1)) {
    lcd.clear();
    lcd.print("!");
  } else {
    // Nothing to do here, the LCD is updated in the pulse oximeter loop
  }

  // Small delay to prevent reading too often
  delay(10);
}

void onBeatDetected() {
  Serial.println("Beat!");
  lcd.clear();
  lcd.print("Heart Beat!");
}

Это второй:


void setup()
{
  Serial.begin(9600);
  // L0+ и L0-, подключенные на 10 и 11 пины, являются выходами детектора контактов электродов
  pinMode(10, INPUT); // Настройка выхода L0-
  pinMode(11, INPUT); // Настройка выхода L0+
}
void loop()
{
  // При отсутствии контакта на одном из 3 электродов
  // в мониторе порта будет отображаться "!" на месте
  // отображения значения этого электрода
  if((digitalRead(10) == 1)||(digitalRead(11) == 1))
  {
    Serial.println('!');
  }
  else{
    // отправка аналоговых значений с датчиков
      Serial.println(analogRead(A0));
  }
  // Небольшая задержка для получения значений с электродов
  delay(1);
}

в сетап первого добавь что в сетапе второго, в луп первого добавь что в лупе второго, очевидно жеж

Написать новый скетч, который реализует нужный функционал.

На самом деле вопрос с самого начала неправильно задан: первое что нужно, это сформулировать своими словами, какой именно нужен функционал.

И - да, просто переписать - не получится: нужен контроллер, у которого будет не менее двух последовательных портов.

Объединить эти два кода невозможно, поскольку первый содержит кучу задержек, а значит измерения потенциала из второго кода будут идти с перерывами

1 лайк