Ora ho ripreso in mano il tutto e devo fare in modo che leggendo i dati di temperatura e luminosità (quello almeno lo so fare), si crei successivamente un file nella sd contenete i vari dati.
Sapete darmi qualche indicazione dove trovare qualche guida?
Ho cercato nel forum ma non ho trovato quello che mi interessava.
Il mio problema è aprire la sd e scriverci dentro.
Nel caricamento non da errore ma dice "Card failed, or not present"
#include <SD.h>
const int chipSelect = 4;
int pin = 0; // analog pin
int tempc = 0,tempf=0; // temperature variables
int samples[8]; // variables to make a better precision
int maxi = -100,mini = 100; // to start max/min temperature
int i;
void setup()
{
Serial.begin(9600); // start serial communication
while (!Serial) {
}
Serial.print("Initializing SD card...");
// make sure that the default chip select pin is set to
// output, even if you don't use it:
pinMode(10, OUTPUT);
// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
// don't do anything more:
return;
}
Serial.println("card initialized.");
}
void loop()
{
for(i = 0;i<=7;i++){ // gets 8 samples of temperature
samples[i] = ( 5.0 * analogRead(pin) * 100.0) / 1024.0;
tempc = tempc + samples[i];
delay(1000);
}
tempc = tempc/8.0; // better precision
tempf = (tempc * 9)/ 5 + 32; // converts to fahrenheit
if(tempc > maxi) {maxi = tempc;} // set max temperature
if(tempc < mini) {mini = tempc;} // set min temperature
Serial.print(tempc,DEC);
Serial.print(" Celsius, ");
Serial.print(tempf,DEC);
Serial.print(" fahrenheit -> ");
Serial.print(maxi,DEC);
Serial.print(" Max, ");
Serial.print(mini,DEC);
Serial.println(" Min");
tempc = 0;
{
// make a string for assembling the data to log:
String dataString = "";
// read three sensors and append to the 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:
}
}
Installando la sd direttamente su arduino funziona ma se invece faccio passare il tutto per la bb si blocca tutto.
Quando torno dalle ferie vi posto lo schema nel caso qualcuno riesca a darmi una mano.
Quanto ne so io i pin analogici possono essere definiti (per l' Arduino UNO) in vari modi: da 0 a 5, da A0 a A5 o da 14 a 19. Tutte le notazioni sono equivalenti.
Corretto. Ci pensa il core a controllare se il parametro passato rientra in quelli corretti.
A0 equivale a 14 e quando la funzione pinMode si trova per mano un valore di pin superiore al valore massimo di quelli digitali, ad esempio nella UNO superiore a 13, sottrae un valore prestabilito, nella UNO appunto 14, per farli rientrare nel range ammesso.