Go Down

Topic: presentar valores del max30100 en lcd 16x2 (Read 262 times) previous topic - next topic

nuribe108

hola soy nuevo en el foro, estoy desarrollando un proyecto con diversos tipos de sensores, y e aquí mi problema, uno de mis sensores en este caso el max 30100 no logra presentar los resultados en el lcd, les dejo aqui el codigo, lo que me sucede es que al presionar se queda estatico en lo que anterior mente presento, en cambio si elimino esa parte se presentan las palabaras que estan presentes en el bucle for pero no los valores del sensor, estoy usando un modulo ardunio uno si es de ayuda..desde ya muchas gracias !!

Code: [Select]

#include <CircularBuffer.h>
#include <MAX30100.h>
#include <MAX30100_BeatDetector.h>
#include <MAX30100_Filters.h>
#include <MAX30100_PulseOximeter.h>
#include <MAX30100_Registers.h>
#include <MAX30100_SpO2Calculator.h>
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
int p,pulsado,i;
LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7,3,POSITIVE);
 #define REPORTING_PERIOD_MS     1000
PulseOximeter pox;
uint32_t tsLastReport = 0;

void pulso(void);
void setup()
{
 
  // Indicar a la libreria que tenemos conectada una pantalla de 16x2
  lcd.begin(16,2);
  // Mover el cursor a la primera posición de la pantalla (0, 0)
  lcd.home ();
  // Imprimir "Hola Mundo" en la primera linea
  lcd.print("BIENVENIDO");
  // Mover el cursor a la segunda linea (1) primera columna
  lcd.setCursor ( 0, 1 );
  // Imprimir otra cadena en esta posicion
  lcd.print("A HEALTHY LIFE");
  // Esperar un segundo
  delay(3000);
  Serial.begin (9600);
  pinMode(13,INPUT);
}
 
void loop()
{
 do
 {
 lcd.clear();
 lcd.setCursor(0,0);
 lcd.write("Pulse el boton 1");
 lcd.setCursor(0,1);
 lcd.write("para SO2");
 delay(1000);
 p=digitalRead(13);
 }while(p==HIGH);
 
 p=digitalRead(13);
 if(p==LOW);
 {
  pulsado=1;
 }
 
 if (p==LOW&&pulsado==1)
 {
   pulso();
  }
}

void pulso(void)
{
  for(i=0;i<10;i++)
  {
 pox.update();
 
    if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
        lcd.clear();
        lcd.setCursor(0,0);
   
        lcd.print("HR: ");
        lcd.print(pox.getHeartRate());
        lcd.print(" bpm");
 
        lcd.setCursor(0,1);
   
        lcd.print("SpO2: ");
        lcd.print(pox.getSpO2());
        lcd.print("%");
 
        tsLastReport = millis();
    }
  }
}


surbyte

Esto esta mal

Code: [Select]
if (p==LOW);
 {
  pulsado=1;
 }


debe ser asi

Code: [Select]
if (p==LOW)
 {
  pulsado=1;
 }

nuribe108

gracias por responder !! pero lamentablemente esa no es la solución ya que lo arregle en mi programa y sigue realizando la misma acción, una vez presionado el pulsador (pin 13) la imagen sigue estática 

surbyte

Yo te dije que esa era la solución?
Escribí,
Quote
Esto esta mal
Acabo de reescribir tu programa a ver si de esta manera se visualiza correctamente.
cada vez que presiones, mostrará o el aviso de pulsar el boton o la información cada 1 segundo

Code: [Select]
#include <CircularBuffer.h>
#include <MAX30100.h>
#include <MAX30100_BeatDetector.h>
#include <MAX30100_Filters.h>
#include <MAX30100_PulseOximeter.h>
#include <MAX30100_Registers.h>
#include <MAX30100_SpO2Calculator.h>
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>

#define BOTON 13
int i;
bool p, p_Ant = false;
bool pulsado;

LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7,3,POSITIVE);

#define REPORTING_PERIOD_MS     1000UL
PulseOximeter pox;

uint32_t tsLastReport = 0;

void pulso(void);

void setup() {
  // Indicar a la libreria que tenemos conectada una pantalla de 16x2
  lcd.begin(16,2);
  // Mover el cursor a la primera posición de la pantalla (0, 0)
  lcd.home ();
  // Imprimir "Hola Mundo" en la primera linea
  lcd.print("BIENVENIDO");
  // Mover el cursor a la segunda linea (1) primera columna
  lcd.setCursor ( 0, 1 );
  // Imprimir otra cadena en esta posicion
  lcd.print("A HEALTHY LIFE");
  // Esperar un segundo
  delay(3000);
  Serial.begin (9600);
  pinMode(BOTON,INPUT);
  pulsado = false;
}
 
void loop() {
  p = digitalRead(BOTON);
  if (!p && p_Ant) {   // flanco de 1 a 0?
      pulsado = !pulsado;
  }
  p_Ant = p;

  if (!pulsado) {
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.write("Pulse el boton 1");
       lcd.setCursor(0,1);
       lcd.write("para SO2");
       delay(1000);
       p = digitalRead(BOTON);
  }
  else
      pulso();
}

void pulso(void) {
  for (i=0;i<10;i++)   {
      pox.update();
   
      if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
          lcd.clear();
          lcd.setCursor(0,0);
     
          lcd.print("HR: ");
          lcd.print(pox.getHeartRate());
          lcd.print(" bpm");
   
          lcd.setCursor(0,1);
     
          lcd.print("SpO2: ");
          lcd.print(pox.getSpO2());
          lcd.print("%");
   
          tsLastReport = millis();
      }
  }
}

Go Up