Em todos os casos faz-se necessária uma validação de o cartão SD está realmente inserido no soquete. Pesquisando nas decentralizadas informações do site do Netduino consegui encontrar na wiki um artigo sobre isso: http://wiki.netduino.com/Detecting-the-presence-of-an-SD-Card.ashx
Esse código ainda não possuí todos os melhoramentos que se deve, mas já é um inicio, em relação ao código final da primeira parte desse artigo sobre escrita no cartão SD; esse software faz o LED da placa piscar continuamente se o cartão SD for removido ajudando a identificar o problema, não fiz a opção por continuar a salvar os dados, tão somente deixei de aquistá-los.
_________________________________________________________________________________________________using System;using System.IO;using System.Net;using System.Net.Sockets;using System.Threading;using Microsoft.SPOT;using Microsoft.SPOT.Hardware;using SecretLabs.NETMF.IO;using SecretLabs.NETMF.Hardware;using SecretLabs.NETMF.Hardware.NetduinoPlus;namespace SD_Card_Example_2{public class Program{//Inicialização do códigopublic static void Main(){//Inicializa o Led e o Botão da placaInputPort bord_button = new InputPort(Pins.ONBOARD_SW1, false,Port.ResistorMode.Disabled);//Cria a Data AtualDateTime CurrentDate = new DateTime(2012, 06, 17, 14, 08, 00);Int32 InterruptTime = 10000;//Criando o Evento periódico de tempo que chama a função LightCheckProcessEvents//para escrever no cartão a condição de luz e o tempoAutoResetEvent autoEvent = new AutoResetEvent(false);LightCheck LightCheckObject = new LightCheck(CurrentDate, InterruptTime);TimerCallback LightCheckCallBack = LightCheckObject.LightCheckProcessEvents;Timer LightCheckTimer = new System.Threading.Timer(LightCheckCallBack, autoEvent, InterruptTime, InterruptTime);//Inifinito!Thread.Sleep(Timeout.Infinite);}}public class LightCheck{private static System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();//Cria o pino de interruçãoprivate static InterruptPort sdCardStatusPort = new InterruptPort((Cpu.Pin)57, false,Port.ResistorMode.PullUp,Port.InterruptMode.InterruptEdgeBoth);// GlobalBoolean SDCardIsOk = true;DateTime InternalDate;Int32 InternalInterruptTime;OutputPort bord_led = new OutputPort(Pins.ONBOARD_LED, false);InputPort bord_ldr = new InputPort(Pins.GPIO_PIN_D0, false, Port.ResistorMode.Disabled);///
/// Contrutor, passa a data corrente paa inicio dos registros///
/// Data Atual/// Tempo da Interrupção em milisegundospublic LightCheck(DateTime date, Int32 InterruptTime){InternalDate = date;InternalInterruptTime = InterruptTime;//Cria o chamado do pino de interrupção quando o Cartão SD é movidosdCardStatusPort.OnInterrupt += sdCardStatusPort_OnInterrupt;}///
/// Processa os eventos basenados na interrupção periódica///
/// Objeto que Chamapublic void LightCheckProcessEvents(object o){//quando chama aumenta o tempoInternalDate = InternalDate.AddMilliseconds((double)InternalInterruptTime);//Se o cartão Sd está acessível então:if (sdCardStatusPort.Read() == false){//Acessa o Cartão SD e cria/acessa (cria se não existir ainda) um arquivo//chamdo "fileTest.txt" onde os dados serão salvosFileStream log_file = new FileStream(@"\SD\light.txt", FileMode.Append);//Cria uma mensagem de teste que será escrita toda a vez que o botão for//precionado na placa do netduinostring msg = InternalDate.ToString("G") + "\t" + bord_ldr.Read().ToString() + "\n";//Escreve o dado no arquivolog_file.Write(encoding.GetBytes(msg), 0, msg.Length);//Fecha o acesso ao cartãolog_file.Flush();log_file.Close();log_file.Dispose();//Pisca o Led 10x para comprovar que o o dado foi escrito mesmo.Int16 i = 0;bord_led.Write(false);for (i = 0; i < 10; i++){bord_led.Write(!bord_led.Read());Thread.Sleep(100);}}}///
/// Interrupção de Remoção do Cartão SD///
/// ?/// ?/// Momento em que o cartão foi removidopublic void sdCardStatusPort_OnInterrupt(uint data1, uint data2, DateTime time){//Se o cartão foi removidoif (sdCardStatusPort.Read() == true){SDCardIsOk = false;//Pisca o Led Infinitamente enquanto o cartão estiver fora da placawhile (sdCardStatusPort.Read() == true){bord_led.Write(!bord_led.Read());Thread.Sleep(200);}}else{SDCardIsOk= true;}bord_led.Write(false);}}}
_________________________________________________________________________________________________
Nenhum comentário:
Postar um comentário