SD voorbeeldprogramma:'Datalogging'

Hoi iedereen,

Ik heb weer enige tijd stil gezeten en dat is te merken! Nu wou ik de draad weer opnemen door wat voorbeeldjes te bekijken (De voorbeeldjes hebben natuurlijk betrekking tot mijn project). Maar ik begrijp er niet zoveel van…

Mijn vragen bij de volgende code zijn: Die ‘while (1)’ functie heb’k even gegoogeld en zou een oneindige “delay” zijn? Zouden ze dan niet beter een “return” gebruiken? Of word die ‘oneindige delay’ onderbroken nadat de voorwaarde binnen de haakjes niet meer voldaan is?

Ook heb ik een vraag bij wanneer ze 3verschillende sensors gaan inlezen en wegschrijven…

ik begrijp het zo:
Dus ze zeggen dat “analogPin” een integer is die op 0 begint en stijgt zolang hij onder 3 blijft. En zolang hij onder 2 blijft schrijft hij een komma ertussen?

Hierna zeggen ze dat “sensor” ook een integer is waarin “analogPin” wordt weggeschreven? (Ik zie niet waarom ze dit zouden doen, want dan doe je toch niks met de waarde van je sensor? Dan schrijf je toch gewoon “0,1,2 …” in je file?)

en die “dataString += String(sensor)” wilt zeggen dat die String(sensor) gewoon bij dataString bij schrijft

Ik heb ze al gegoogeld maar als ik ‘dataString’ google dan komt ik enkel ‘string’ of ‘String…’ en een hoop dingen achter die string, uit.

Alle hulp is dus welkom!

// 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:
    while (1) ;
  }
  Serial.println("card initialized.");
  
  // Open up the file we're going to log to!
  dataFile = SD.open("datalog.txt", FILE_WRITE);
  if (! dataFile) {
    Serial.println("error opening datalog.txt");
    // Wait forever since we cant write data
    while (1) ;
  }
}

void loop()
{
  // 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 += ","; 
    }
  }

Hoi.

While (1) is een oneindige lus die nauwelijks doorbroken kan worden. Je zegt daar namelijk: Zolang de 1 een 1 is, doe het volgende:

Er word dus niets gedaan na de bovenstaande dubbele punt. Omdat er niets gedaan word, kan deze lus ook niet doorbroken worden. En het duurt heeeeel lang voordat een 1 iets anders word dan een 1.

Je mist een belangrijk punt in het lezen van de rest van de code. analogPin is een integer die van nul tot 3 telt (de 3 telt dus niet mee). Het is een hulpmiddel. Je gebruikt het om 3 analoge waardes uit te lezen op 3 pinnen. Deze waardes worden van elkaar gescheiden door een komma (je maakt een CSV bestand). Meer dan dat word er hier niet gedaan.

Ik vermoed dat even verderop deze string naar de SD kaart word geschreven. Ik zie niet dat er meer dan 3 waardes in het bestandje terecht komen, maar dat krijg je als er maar een klein stukje code bekend is.

Defink:
Hierna zeggen ze dat “sensor” ook een integer is waarin “analogPin” wordt weggeschreven? (Ik zie niet waarom ze dit zouden doen, want dan doe je toch niks met de waarde van je sensor? Dan schrijf je toch gewoon “0,1,2 …” in je file?)

Je programma doet iets anders.

 for (int analogPin = 0; analogPin < 3; analogPin++) {
    int sensor = analogRead(analogPin);
    dataString += String(sensor);
    if (analogPin < 2) {
      dataString += ","; 
    }
 }

De waarde analogPin is 0, 1 of 2 als het programma deze lus doorloopt en daarmee wordt het pin nummer aangegeven. Die waarden blijven inderdaad hetzelfde.

In de volgende regel wordt het voltage gemeten van de betreffende pin met de functie analogRead().
Uitkomst wordt in de variabele sensor gezet en die kan dus wel verschillend zijn.