SD.begin(chipSelect) seems to be change blue LED pin mode

For the discussion of Arduino related topics.

Moderator: phalanx

Post Reply
FredY
Posts: 2
Joined: Fri Dec 07, 2018 10:20 pm

SD.begin(chipSelect) seems to be change blue LED pin mode

Post by FredY » Sun Dec 09, 2018 12:55 pm

First I am new to Arduino.
Second I am using the SparkFun RedBoard and SD Shield.
I am trying to use the blue LED to indicate what is happening as the program runs.
This problem exists with or without the SD Shield attached.
It is the call to this function that seems to cause the problem --- if (!SD.begin(chipSelect))

Below is my code stripped down to troubleshoot the problem.
About 2/3rds of the way down I bolded the two lines that create or cure the problem.
If I visual monitor the RX LED and the blue LED the call if (!SD.begin(chipSelect)) seems to be where it goes astray,
i.e. long blue LED, then nothing.
Hopefully somebody has seen this and can help.

Thanks, Fred

*****************************************************
#include <SPI.h> // include SPI library
#include <SD.h> // include the SD library:

// The Sparkfun microSD shield uses pin 8 for CS
const int chipSelect = 8;

// variables for dual temperature probe on A0 & A1
float Temp1, Temp2;
float constant = (5.0/1024.0)*100.0; //used to convert LM35 from C to F
long loop_count = 0; //passes through the loop

void setup()
{
// Note that even if it's not used as the CS pin, the hardware SS pin
// (10 on most Arduino boards, 53 on the Mega) must be left as an output
// or the SD library functions will not work.

pinMode(10, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT); //set blue LED pin to output

// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
Serial.println("Initializing SD card...");
delay(3000);
Blink_LED(3);

// see if the card is present and can be initialized:
// if (!SD.begin(chipSelect)) //when used - 3 blinks, long blue LED, no more blinks
if (1) //when used - 3 blinks, pause, then 3 blinks i.e. normal behavior

{
Serial.println("Card failed, or not present");
// don't do anything more:
delay(3000);
Blink_LED(3);
while (1);
}
Serial.println("card initialized.");

}

void loop(void)
{
while(1);
}

void Blink_LED (int times)
{
for (int i =0; i<times; i++)
{
Serial.println("Blink");
digitalWrite(LED_BUILTIN, HIGH);
delay(200);
digitalWrite(LED_BUILTIN, LOW);
delay(800);
}
}

sterretje
Posts: 41
Joined: Sun Dec 06, 2015 12:18 am

Re: SD.begin(chipSelect) seems to be change blue LED pin mode

Post by sterretje » Mon Dec 10, 2018 11:21 pm

The built in led is connected to pin 13; pin 13 is also the SPI clock used by the card reader.

You have to take a decision what is the important feature of your project ;) You can use a led + resistor on a different pin that is still free; for SPI, stay away from pins 10..13 and for the specific shield, pin 8 (the chip select in your code).

FredY
Posts: 2
Joined: Fri Dec 07, 2018 10:20 pm

Re: SD.begin(chipSelect) seems to be change blue LED pin mode

Post by FredY » Wed Dec 12, 2018 2:05 pm

Thanks for the clarification.
I thought that was the problem, but hoped the s/w keep track of it and set it back.
Another LED and resistor is the answer.

Cheers, Fred

Post Reply