buena noche comunidad espero esten muy bien, mi tema es que estoy haciendo un proyecto y tengo inconvenientes en trabajar un modulo sd y un display lcd128x64 ambos al tiempo mediante comunicacion spi, trabajando uno al tiempo me funcionan de maravilla, pero al trabajarlos juntos no se si es por que se interfiere la comunicacion spi de ambos y ninguno me funciona, el modulo sd no me reconoce y el display lcd no muestra imagen, tambien noto que se detiene el void loop por que si pongo un comentario por comunicacion serial no me envia, como si estuviera detenido el codigo en el void loop, enseño mi codigo ojala alguien me pueda dar un consejo de que estoy haciendo mal
muchas gracias por cualquier ayuda que me puedan dar
//libreria para modulo microsd
#include <SPI.h> // incluye libreria interfaz SPI
#include <SD.h> // incluye libreria para tarjetas SD
//defino pin para el select slave del modulo microsd
#define SSpin 10 // Slave Select en pin digital 10
File archivo; // objeto archivo del tipo File
//chip select señal de reloj master in slave out master out slave in
//cs 10 sck 13 miso 11 mosi 12
//libreria para display
#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
//U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, /* enable clock=*/13, /* RW data=*/11, /* RS CS=*/7, /* reset=*/8); //no deja, da error con liberia sd
//chip select señal de reloj master in slave out master out slave in reset
//cs 7 sck 13 miso - mosi 11 rs 8
U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, /* enable clock=*/4, /* RW data=*/3, /* RS CS=*/2, /* reset=*/5); //al poner otros pines diferentes a los del modulo sd el problema persiste
void setup() {
//Comunicacion serial
Serial.begin(9600);
//inicializo el modulo sd
Serial.println("Inicializando tarjeta ..."); // texto en ventana de monitor
if (!SD.begin(SSpin)) { // inicializacion de tarjeta SD
Serial.println("fallo en inicializacion !"); // si falla se muestra texto correspondiente y
return; // se sale del setup() para finalizar el programa
}
Serial.println("inicializacion correcta"); // texto de inicialización correcta
//inicializo la libreria del display
u8g2.begin();
//Serial.println("salio void setup");
}
void loop() {
//Serial.println("voidloop"); //esta parte es la que digo que se deja de enviar cuando pongo ambos modulos juntos, parece que se detiene el void loop
//mostramos las mediciones tomadas en el display
u8g2.firstPage();
do {
//proceso();
u8g2.setFont(u8g2_font_6x10_tf); //definimos el tipo de letra
u8g2.drawStr(0, 10, "Estacion fotovoltaica");
u8g2.drawStr(0, 20, "hora:");
u8g2.drawStr(0, 30, "humedad temp.");
u8g2.drawStr(0, 40, "lum diam");
u8g2.drawStr(0, 50, "volt amp ");
u8g2.drawStr(0, 60, "pot in pot out");
} while (u8g2.nextPage());
}
void proceso() {
//aqui leo info de los modulos y ya, elimine esto para que no quede muy largo el codigo
//escribimos los valores en la sd
archivo = SD.open("datos.txt", FILE_WRITE); // apertura para lectura/escritura de archivo datos.txt
if (archivo) {
// guardamos los valores ya leidos
archivo.println(String(temp) + "," + String(hum) + "," + String(lux));
archivo.close(); // cierre de archivo
} else {
Serial.println("error en apertura de datos.txt"); // texto de falla en apertura de archivo
}
}