Go Down

Topic: SD Card e Sensor Hall Effect (Read 954 times) previous topic - next topic

TCPR

Alguém aqui já fez um programa que grave dados em um cartao SD e utilize um sensor hall com attachInterrupt() ao mesmo tempo?

Eu estou tendo dificuldade em fazer as duas coisas funcionarem junto! O que acontece é que quando ligo o sd card, o attachInterrupt() detecta muito mais sinais do que acontece de verdade.
Será que a conexão SPI atrapalha o attachInterrupt()?

Alguém pode me dar uma luz?
Abraços!

bubulindo

Onde é que ligaste tudo? Tens aí o código?
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

TCPR

Mudei as conexões aqui e melhorou o problema.
Mas aí conectei minha placa Xbee e voltou a sair apenas valores errados de novo..

Pelo jeito o problema não é o cartão SD.

Eu estou usando um sensor hall linear. Acho que por algum motivo quando eu utilizo mais componentes juntos (como o cartão e o Xbee) de alguma forma pertuba o sinal do sensor hall..
Um sensor hall do tipo switch talvez resolvesse meu problema, mas não tenho nenhum acessível para testar.

Vou testar com um pushbutton mais tarde pra eliminar ou confirmar essa minha hipótese..

tomasi

Opa,

vc mudou os pinos de interrupção ( pinos 2 ou 3)?

Será que um capacitor no sensor hall ajudaria?

TCPR

Não,  só troquei os fios, e to utilizando os pinos 2 e 3. Vou tentar com o 20 pra ver no que dá.

O pushbutton pra testar também não foi uma boa ideia.. a transição do contato do botão é imperfeita..

Vou tentar a dica do capacitor.

O código que estou utilizando para testar é esse: ( com uma arduino mega )

Code: [Select]
#include <SD.h>

const int chipSelect = 51;

volatile byte rpmcount_D1 = 0;
unsigned long timeold_D1 = 0;
float rpm_D1 = 0, V_D1 = 0;
const int rodaD1 = 2;

void setup()
{
 Serial.begin(57600);
 Serial.print("Initializing SD card...");
//  pinMode(53, OUTPUT);
 
 if (!SD.begin(chipSelect)) { Serial.println("Card failed, or not present"); return; }
 Serial.println("card initialized.");
 
// Velocidade das Rodas ------------------------------------------------------
 pinMode(rodaD1,INPUT);
 attachInterrupt(0, rev_add, FALLING);
// Velocidade das Rodas ------------------------------------------------------

}

void loop()
{
 
// Bloco do Sensor Hall ------------------------------------------------
 if (rpmcount_D1 >= 4) {
   rpm_D1 = 6283.19 / (millis() - timeold_D1) * rpmcount_D1/4;
   V_D1 = rpm_D1 * 0.9576; // V [Km/h]
   Serial.print("RPMcount: "); Serial.println(rpmcount_D1, DEC);
   Serial.print("DeltaT: "); Serial.println((millis()-timeold_D1), DEC);
   rpmcount_D1 = 0; timeold_D1 = millis();
   Serial.print("V: ");Serial.println(V_D1);
 }
// Bloco do Sensor Hall -------------------------------------------------

   // make a string for assembling the data to log:
   String dataString = "";
   // read three sensors and append to the string:
   
   //dataString += String(tempo);
  dataString += "DATA";
   dataString += ", "; // Adiciona o tempo no inicio da String
   for (int analogPin = 0; analogPin < 3; analogPin++) {
     int sensor = analogRead(analogPin);
     dataString += String(sensor);
     if (analogPin < 2) { dataString += ", "; }
   }
   // open the file. note that only one file can be open at a time,
   // so you have to close this one before opening another.
   File dataFile = SD.open("datalog.txt", FILE_WRITE);
   // if the file is available, write to it:
   if (dataFile) {
     dataFile.println(dataString);
     dataFile.close();
     // print to the serial port too:
     Serial.println(dataString);
   }  
   // if the file isn't open, pop up an error:
   else { Serial.println("Error opening datalog.txt"); }
}

// Funcoes do Sensor Hall --------------------------------------
void rev_add() { rpmcount_D1++; }

TCPR

Resolveu funcionar agora!
Não cheguei a mexer em nada!
Só tenho medo que volte a dar problema do mesmo jeito misterioso que passou a funcionar!

Go Up