Autor Tema: POR FAVOR SE SOLICITA AYUDA SENSOR SCD30  (Leído 4713 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado GAMCH333

  • PIC10
  • *
  • Mensajes: 10
POR FAVOR SE SOLICITA AYUDA SENSOR SCD30
« en: 12 de Noviembre de 2025, 13:43:22 »

 :? :? :?

Hola,deseándoles lo mejor en sus actividades, tengo un pequeño problema.

Estoy intentando  usar el sensor SDC30 para medir dióxido de carbono (CO2), humedad y temperatura mediante el protocolo I2C.

No me funciona.

¿por favor podrían ayudarme?

Intenté pedir ayuda allí, pero no obtuve respuesta.

Les pido ayuda por aquí.

Tengo dos resistencias pull-up I2C de 1.7 kΩ a 3.3 V.


ME ESTOY TOMANDO LA LIBERTAD DE USAR ESTE CÓDIGO QUE SE ENCUENTRA PRECISAMENTE EN EL FORO

//LCD PUERTO B

#define LCD_RS_PIN PIN_B0
#define LCD_RW_PIN PIN_B1
#define LCD_ENABLE_PIN PIN_B2
#define LCD_DATA4 PIN_B3
#define LCD_DATA5 PIN_B4
#define LCD_DATA6 PIN_B5
#define LCD_DATA7 PIN_B6



#include <16F877A.h>
#device ADC=8
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#use delay(crystal=4000000)
#use i2c(MASTER, sda=pin_C4, scl=pin_C3)
# include <lcd.c>
# include <stdint.h>

char concentracionco2,temperatura;
byte dataco2,datatemp,datahum;

void main()
{
   set_tris_d(0);
   
   while(TRUE)
   {
      set_tris_c(0b11111111);
      lcd_init();
      delay_ms(2000);
      printf(lcd_putc,"hola" );
      delay_ms(500);                         // Le damos un retardo de 500 ms
      lcd_putc("\f");
      printf(lcd_putc,"hola222222" );
      delay_ms(500);                         // Le damos un retardo de 500 ms
      lcd_putc("\f");
      delay_ms(500);   
      output_high(pin_a0);
      delay_ms(100);
      delay_ms(200);
      output_low(pin_a0);
      delay_ms(200);
      i2c_start();
      delay_ms(200);
      i2c_write(0xC2);
      delay_ms(200);
      i2c_write(0x00);
      delay_ms(200);
      i2c_write(0x10);
      delay_ms(200);
      i2c_stop();
      delay_ms(2000);
      i2c_start();
      delay_ms(200);
      i2c_write(0xC3); // le decimos que vamos a leer
      delay_ms(200);
// Nivel de CO2
      dataco2 = i2c_read() << 24  ;
      delay_ms(200);
      dataco2 += i2c_read() << 16;
      delay_ms(200);
      i2c_read(); // El CRC
      delay_ms(200);
      dataco2 += i2c_read() << 8  ;
      delay_ms(200);
      dataco2 += i2c_read();
      delay_ms(200);
      i2c_read(); // El CRC
      delay_ms(200);
      printf(lcd_putc,"hola 2 para co2" );
      delay_ms(200);
      delay_ms(500);                         // Le damos un retardo de 500 ms
      delay_ms(200);
      lcd_putc("\f");
      delay_ms(200);
      delay_ms(500);
// Temperatura
      datatemp = i2c_read() << 24  ;
      datatemp += i2c_read() << 16;
      i2c_read(); // El CRC
      datatemp += i2c_read() << 8  ;
      datatemp += i2c_read();
      i2c_read(); // El CRC
      printf(lcd_putc,"hola3" );
      delay_ms(500);                         // Le damos un retardo de 500 ms
      lcd_putc("\f");
      delay_ms(500);
// Humedad
      datahum = i2c_read() << 24  ;
      datahum += i2c_read() << 16;
      i2c_read(); // El CRC
      datahum += i2c_read() << 8  ;
      datahum += i2c_read();
      i2c_read(); // El CRC
      i2c_stop();
      printf(lcd_putc,"hola444" );
      delay_ms(500);                         // Le damos un retardo de 500 ms
      lcd_putc("\f");
      delay_ms(500);
 
      delay_ms(100);
      lcd_gotoxy(1,1);
      printf(lcd_putc,"%d",concentracionco2);  // aqui en el lcd imprime un cero
      delay_ms(2000);
      lcd_gotoxy (1,2);                       //
      printf(lcd_putc,"%u,%u,%u", datahum,temperatura,dataco2 ); // aqui en el lcd me imprime 221 , 0, 221
      delay_ms(500);                         //
      lcd_putc("\f");
      delay_ms(500);

   }

}


Gracias