Go Down

Topic: SD Card e Sensor Hall Effect (Read 1 time) 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?
This... is a hobby.

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