Hola a todos! Estoy haciendo un pequeño proyecto de asistente virtual y por ahora todo separado funciona sin errores.
Sin embargo debo utilizar 3 componentes que requieren el bus SPI para comunicarse:
- Shield vs1053
- LoRa
- Pantalla 1.8 SPI
La idea por ahora, para poder empezar con la comunicación de distintos components SPI, es que en la pantalla aparezca un logo, luego se pinte verde por 5 segundos, después rojo por 5 segundos y después suene una canción por una hora. Me recomendaron usar millis, por eso no ocupo delay.
Tengo el siguiente código:
/*
Pines Para Pantalla:
* LED = 3.3V
* SCK = 13 (MEGA 52)
* SDA = 11 (MEGA 51)
* A0 = 2
* RESET = 3
* CS = 22
* GND = GND
* VCC = 5V
*/
#include "Ucglib.h"
#include <ThreeWire.h>
#include <SPI.h>
#include <SdFat.h>
#include <vs1053_SdFat.h>
int PANTALLA_CS = 22;
int MP3_CS = 9;
unsigned long tiempo;
bool orden1;
bool orden2;
bool musica;
SdFat sd;
vs1053 MP3player;
Ucglib_ST7735_18x128x160_HWSPI ucg(2, 22, 3);
void crearPantalla()
{
//CREA EL LOGO
}
void logoVerde(){
//PINTA EL LOGO VERDE
}
void logoRojo(){
//PINTA EL LOGO ROJO
}
void domaDormir(){
//APAGA LA PANTALLA
}
//No creo que sea necesario colocar el codigo de los logos ya que no tienen problema.
void setup(){
Serial.begin(115200);
SPI.begin();
tiempo = millis();
pinMode(PANTALLA_CS,OUTPUT);
pinMode(MP3_CS,OUTPUT);
//PANTALLA INICIALIZADA
digitalWrite(MP3_CS, HIGH);
digitalWrite(PANTALLA_CS, LOW);
domaDormir();
crearPantalla();
orden1 = true;
orden2 = false;
musica = false;
//MP3 INCIALIZADO
digitalWrite(PANTALLA_CS, HIGH);
digitalWrite(MP3_CS, LOW);
sd.begin(SD_SEL,SPI_HALF_SPEED);
MP3player.begin();
MP3player.setVolume(0,0);
}
void loop(void)
{
if (orden1){
digitalWrite(MP3_CS, HIGH);
digitalWrite(PANTALLA_CS, LOW);
logoVerde();
if (millis()-tiempo > 5000){
orden1 = false;
orden2 = true;
musica = false;
tiempo = millis();
}
}
if (orden2){
digitalWrite(MP3_CS, HIGH);
digitalWrite(PANTALLA_CS, LOW);
logoRojo();
if (millis()-tiempo > 5000){
orden1 = false;
orden2 = false;
musica = true;
tiempo = millis();
}
}
if (musica){
digitalWrite(PANTALLA_CS, HIGH);
digitalWrite(MP3_CS, LOW);
MP3player.playTrack(3);
if (millis()-tiempo > 360000){
orden1 = true;
orden2 = false;
musica = false;
tiempo = millis();
}
}
}
Cuando corro el programa me sale el siguiente error:
If you get this error, you likely do not have a sd.begin in the main sketch, See Trouble Shooting Guide!
http://mpflaga.github.com/Sparkfun-MP3-Player-Shield-Arduino-Library/#Troubleshooting
Claramente tengo el sd.begin(...), y me meto al link pero no aparece nada que me pueda ayudar.
Y cuando corro el ejemplo, modificado me sale el siguiente error:
Can't access SD card. Do not reformat.
SD errorCode: 0X43,0X5
Busqué los errores y no encontré ninguna solución.
Cualquier persona que haya ocupado estos componentes o tengo alguna idea lo agradecería muchísimo.