Pe ecranul de monitorizare seriala avem informatiile urmatoare:
iar pe cardul SD in documentul fisier.txt sunt scrise aceleasi informatii...
Sketch-ul de receptor este:
/*.............................................................Sending Multiple Variables Using VirtualWire. ReceiverAuthor: Rodrigo Mompo RedoliFor http://controlrobotics.rodrigomompo.comThe SD circuit: * SD card attached to SPI bus as follows: ** MOSI - pin 11 ** MISO - pin 12 ** CLK - pin 13 ** CS - pin 4 created Nov 2010 by David A. Mellis modified 9 Apr 2012 by Tom Igoealse, I use SD example from http://www.roroid.roadapted sketch by niq_ro (Nicu FLORICA) from http://nicuflorica.blogspot.com..............................................................*/
#include <VirtualWire.h> // use Virtual library for decode signal from Rx module
#include <Time.h> // use Time library for control the time between data from receiver
#include <SD.h> // use SD libraryFile fisier;
// Sensors int Sensor1Data;
int Sensor2Data;
int Sensor3Data;
int Sensor4Data;
int suma;
char StringReceived[22];
// other int led = 13; //pin for LEDint j=1; // count the messagesvoidsetup() {
// set the time for record time and valuesetTime(0,0,0,25,9,13); // set time to Saturday 8:29:00am Jan 1 2011pinMode(led, OUTPUT);
// VirtualWire // Initialise the IO and ISR// Required for DR3100// Bits per secvw_setup(2000);
// set pin for connect receiver module vw_set_rx_pin(7);
// Start the receiver PLL runningvw_rx_start();
Serial.begin(9600);
Serial.println("Receptorul lui niq_ro e pregatit sa primeasca mesaje, ");
Serial.print("pregatesc si cardul de memorie SD...");
// On the Ethernet Shield, CS is pin 4. It's set as an output by default.// Note that even if it's not used as the CS pin, the hardware SS pin // (10 on most Arduino boards, 53 on the Mega) must be left as an output // or the SD library functions will not work. pinMode(10, OUTPUT);
if (!SD.begin(4)) {
Serial.println("dar a aparut o eroare...");
return;
}
Serial.println("care este si el gata.");
File fisier = SD.open("niq_ro.txt", FILE_WRITE); // open a new fileif (fisier) { //daca fisierul este disponibil vom scrie in el
fisier.println("www.tehnic.go.ro");
fisier.println("o noua sesiune de teste de receptie cu module RF");
fisier.close();
Serial.println("www.tehnic.go.ro");
Serial.println("o noua sesiune de teste de receptie cu module RF");
Serial.println("---------------------------------------------------");
}
// if is an errorelse {
Serial.println("Nu am putut deschide fisierul niq_ro.txt");
}
} // END void setupvoidloop(){
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
//Taking the data from the control baseif (vw_get_message(buf, &buflen))
{
digitalWrite(led, HIGH);
Serial.print("Pachet date nr. "); // print a messageSerial.print(j); // number of messageSerial.print(": ");
int i;
// Message with a good checksum received, dump it. for (i = 0; i < buflen; i++)
{
// Fill Sensor1CharMsg Char array with corresponding // chars from buffer.
StringReceived[i] = char(buf[i]);
// Serial.print(StringReceived[i]);
}
sscanf(StringReceived, "%d,%d,%d,%d,%d,%d",&Sensor1Data, &Sensor2Data,&Sensor3Data,&Sensor4Data); // Converts a string to an array//Serial.print();if (hour()<10) Serial.print("0");
Serial.print(hour());
Serial.print(":");
if (minute()<10) Serial.print("0");
Serial.print(minute());
Serial.print(":");
if (second()<10) Serial.print("0");
Serial.print(second());
Serial.print(" : ");
digitalWrite(led, LOW);
Serial.print(Sensor1Data);
Serial.print(" + ");
Serial.print(Sensor2Data);
Serial.print(" + ");
Serial.print(Sensor3Data);
Serial.print(" + ");
Serial.print(Sensor4Data);
Serial.print(" = ");
suma = Sensor1Data + Sensor2Data + Sensor3Data + Sensor4Data;
Serial.println(suma);
// write on SD cardif (hour()<10) fisier.print("0");
fisier.print(hour());
fisier.print(":");
if (minute()<10) fisier.print("0");
fisier.print(minute());
fisier.print(":");
if (second()<10) fisier.print("0");
fisier.print(second());
fisier.print(" : ");
//digitalWrite(led, LOW);
fisier.print(Sensor1Data);
fisier.print(" + ");
fisier.print(Sensor2Data);
fisier.print(" + ");
fisier.print(Sensor3Data);
fisier.print(" + ");
fisier.print(Sensor4Data);
fisier.print(" = ");
fisier.println(suma);
// Turn off light to and await next message
j=j++; // count the message
}
memset( StringReceived, 0, sizeof( StringReceived));// This line is for reset the StringReceived
}
Sketch-ul de emitator este ultimul din prima parte. Pentru a putea conecta modulul SD, care folosea pinul D11, a trebuit sa conectez receptorul la alt pin liber si am ales pe D7. Mesajul de pe monitorizarea seriala, respectiv din fisierul text creat sunt:
Partea de cod (sketch-uri) sunt cele din articolul mentionat initial, acolo doar foloseam alt modul, care continea si partea de retea... In tutotrialul KitMicroSD de pe ROROID gasiti tot ce trebuie...
01.10.2013
Un captura de ecran arata astfel:
si o captura de ecran cu exemplul de citire al infomatiilor despre un card SD
Primul programior (sketch) pe care l-am testat este "ReadWrite", cel in care se creeaza un fisier text, se scrie in el ceva, se salveaza, apoi se deschide si se citeste textul..
am modificat repede textul de scris, obtinand:
Am deschis si programiorul din exemplele librariei SD, numit "CardInfo":
Avand deja realizata partea de indicare pe ecranul LCD 16x2 a temperaturii si umiditatatii oferite de senzorul DTH11, a orei si datei oferite de ceasul de timp real DS1307, am conectat si placa de retea care are si inscriptor de memorie microSD.
Dupa combinarea mai multor sketch-uri si ceva "sudoare", am realizat partea de scriere pe monitorizarea seriala si intr-un fisier pe cardul de memorie microSD:
Sketch-ul meu este:
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
Dupa ce am lasat conectat montajul mai multe ore, am constatat uneori ca apar erori la citirea datelor din RTC (ore si minute) si apoi la scriere, m-am gandit e cam mare consumul, asa ca am inlocuit cablul usb cu prelungitor cu un cablu de cca. 1m de la un scanner si, totodata, sting lumina de fundal al afisajului cu cristale lichide cand se face scrierea...
O alta solutie, pentru reducerea consumului, este aceea in care sa folosesc doar un modul de microSD...
Sketch-ul modificat este:
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib