Pages: [1]   Go Down
Author Topic: Aiuto comprensione SD Shield  (Read 1115 times)
0 Members and 1 Guest are viewing this topic.
Veneto
Offline Offline
Full Member
***
Karma: 1
Posts: 104
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti,
molto tempo fa ho comprato uno shield sd (http://www.hwkitchen.com/products/sd-card-shield-for-arduino-v2-1/) e poi tra problemi di lavoro ed altro ho bloccato tutte le mie idee.

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.

Grazie a tutti

Logged

Veneto
Offline Offline
Full Member
***
Karma: 1
Posts: 104
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vi posto il codice che ho prodotto.

Nel caricamento non da errore ma dice "Card failed, or not present"

Code:
#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:

  } 

  } 

Cosa avrò mai combinato?
Logged

Monselice PD Italy
Offline Offline
Faraday Member
**
Karma: 26
Posts: 5500
фон Крыса
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Cambia questo :
Code:
  pinMode(10, OUTPUT);
in
Code:
  pinMode(4, OUTPUT);
E' l'unico errore evidente, se ci dici che shield usi potremmo esserti più d'aiuto...
Logged

Se corri veloce come un fulmine, ti schianterai come un tuono.

Veneto
Offline Offline
Full Member
***
Karma: 1
Posts: 104
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Lo shiel è questo

http://www.hwkitchen.com/products/sd-card-shield-for-arduino-v2-1/

Logged

Italy (Venice)
Offline Offline
Edison Member
*
Karma: 24
Posts: 1320
Quello che non c'è non si può rompere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Cambia questo :
Code:
  pinMode(10, OUTPUT);
in
Code:
  pinMode(4, OUTPUT);
E' l'unico errore evidente, se ci dici che shield usi potremmo esserti più d'aiuto...


non serve perchè in Spi.cpp c'è già l'inizializzazione:   pinMode(SS_PIN, OUTPUT);
il difetto deve essere nel connettore SD o nella SD
Logged

Veneto
Offline Offline
Full Member
***
Karma: 1
Posts: 104
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Grazie
Logged

Italy (Venice)
Offline Offline
Edison Member
*
Karma: 24
Posts: 1320
Quello che non c'è non si può rompere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Infatti è una cosa hardware, dopo che hai illustrato i collegamenti si vedrà
Logged

Selvazzano Dentro - Padova
Offline Offline
Edison Member
*
Karma: 45
Posts: 1407
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Credo però ci sia un altro errore:

Code:
int pin = 0; // analog pin

Il pin non dovrebbe essere A0?
Logged

Italy (Venice)
Offline Offline
Edison Member
*
Karma: 24
Posts: 1320
Quello che non c'è non si può rompere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

int pin.....   è la dichiarazione di una variabile di nome pin non di un un ingresso analogico
Logged

Selvazzano Dentro - Padova
Offline Offline
Edison Member
*
Karma: 45
Posts: 1407
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
int pin.....   è la dichiarazione di una variabile di nome pin non di un un ingresso analogico

Vero, è una variabile ma usata per identificare un ingresso analogico:

Code:
samples[i] = ( 5.0 * analogRead(pin) * 100.0) / 1024.0;
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 263
Posts: 21601
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Ciao Uwe
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 328
Posts: 22762
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Selvazzano Dentro - Padova
Offline Offline
Edison Member
*
Karma: 45
Posts: 1407
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Uwe, Leo avete ragione non è un errore.

Tuttavia credo che specificare espressamente la natura del pin migliori la leggibilità del listato, non trovate?
Logged

Pages: [1]   Go Up
Jump to: