SD card uitlezen

Geef hier suggesties voor extra onderwerpen of andere dingen die je graag gewijzigd zou willen zien
Berichten: 12
Geregistreerd: 24 Mrt 2017, 16:28

SD card uitlezen

Berichtdoor DreArduino » 10 Apr 2017, 18:54

Ik heb een sketch die gegevens van een energiemeter leest en opslaat op een SD card.
Deze gegevens worden als textfile opgeslagen op de kaart.
Ik wil de VOLLEDIGE tekst mailen
Alles werkt , alleen kan ik het volledig tekstbestand niet terug uit de kaart krijgen. ( Enkel de eerste regels )
Iemand een idee ?

Advertisement

Gebruikers-avatar
Berichten: 4827
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: SD card uitlezen

Berichtdoor nicoverduin » 10 Apr 2017, 18:56

Hoe heet het bestand?
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 12
Geregistreerd: 24 Mrt 2017, 16:28

Re: SD card uitlezen

Berichtdoor DreArduino » 10 Apr 2017, 19:38

Mijn sketch:
cpp code
#include <Ethernet2.h> 
#include <ModbusMaster.h>
#include <SoftwareSerial.h>
#include <SPI.h>
#include <SD.h>
File myFile;
ModbusMaster node;
////////////////////////////SoftwareSerial portOne(2,3);

byte mac[] = { 0x90, 0xA2, 0xDA, 0x10, 0x3C, 0x24};

IPAddress ip( 192, 168, 0, 212 );
IPAddress gateway( 192, 168, 0, 1 );
IPAddress subnet( 255, 255, 255, 0 );

char server[] = "smtp.telenet.be";

EthernetClient client;
const int buttonPin = 8;
int buttonState = 0;
String INHOUD ;

void setup() {
Serial.begin(9600);
while (!Serial) {
;
}

Serial.println("SETUP");
pinMode(buttonPin, INPUT);


Ethernet.begin(mac, ip, gateway, gateway, subnet);
delay(2000);


Serial.print("Initializing SD card...");
Serial.println("start1");
if (!SD.begin(4)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
delay(1000);

Serial1.begin(9600);
node.begin(5, Serial1);

}
void loop() {
uint16_t result;
uint16_t SPA ;
uint16_t STROOM;
float STR ;
uint16_t FR;
Serial.println("LOOP");
Serial.println("start");

result = node.readHoldingRegisters(50520,10);

if (result == node.ku8MBSuccess) {

Serial.print("Spanning Volt : ");
SPA = (node.getResponseBuffer(1)/100);
Serial.println(SPA);

Serial.print("Stroom A : ");
STROOM = (node.getResponseBuffer(9));
STR = (float)STROOM / 1000.0;
Serial.println(STR);

Serial.print("Frequentie Hz : ");
FR = (node.getResponseBuffer(7)/100);
Serial.println(FR);

}
delay(500);

myFile = SD.open("test.txt", FILE_WRITE);

if (myFile) {
Serial.println("WRITING TO test.txt...");

myFile.println ( "Spanning Volt : " );
myFile.println ( SPA );


myFile.println ( "Stroom A : " );
myFile.println ( (float)STROOM / 1000.0);

myFile.println ( "Frequentie Hz : " );
myFile.println ( FR );

myFile.close();
Serial.println("DONE");
} else {
Serial.println("error opening test.txt");
}
myFile = SD.open("test.txt");
if (myFile) {
Serial.println("FILE TERUG GELEZEN");

while (myFile.available()) {

INHOUD += myFile.readStringUntil('\n');

}
myFile.close();
} else {
Serial.println("error opening test.txt");
}


buttonState = digitalRead(buttonPin);
if (buttonState == LOW) {
{
if(sendEmail()) Serial.println(F("Email sent"));
else Serial.println(F("Email failed"));
}
buttonState == HIGH;
}

Serial.print("INHOUD : ");
Serial.println(INHOUD);
delay(1000);
}

byte sendEmail()
{
byte thisByte = 0;
byte respCode;


if(client.connect(server,25) == 1) {
Serial.println(F("connected"));
} else {
Serial.println(F("connection failed"));
return 0;
}
Serial.println(F("Sending From"));
// change to your email address (sender)
client.println(F("MAIL From: <drewouters2@gmail.com>"));

// change to recipient address
Serial.println(F("Sending To"));
client.println(F("RCPT To: <andre.wouters6@telenet.be>"));

Serial.println(F("Sending DATA"));
client.println(F("DATA"));

Serial.println(F("Sending email"));
// change to recipient address
client.println(F("To: You <andre.wouters6@telenet.be>"));
// change to your address
client.println(F("From: Dré <drewouters2@gmail.com>"));
client.println(F("Subject: Arduino email test\r\n"));
client.println(INHOUD);
client.println(F("."));
client.stop();
Serial.println(F("disconnected"));
return 1;
}

Het gaat over de regel : INHOUD += myFile.readStringUntil('\n');
"INHOUD" zou het volledige tekstbestand moeten zijn dat weldegelijk goed op de SD card staat, maar ik zie slechts de eerste 2 regels...

Gebruikers-avatar
Berichten: 4827
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: SD card uitlezen

Berichtdoor nicoverduin » 10 Apr 2017, 20:03

Hoe groot is dat bestand? En op welke Arduino draait het?
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 1726
Geregistreerd: 06 Aug 2016, 01:03

Re: SD card uitlezen

Berichtdoor Koepel » 10 Apr 2017, 21:21

Geen "helo" of "EHLO" aan het begin en geen "QUIT" aan het einde, en je wacht tussendoor niet op een reactie van de mail server. Kan dat allemaal zo maar ?

Ik ben hier mee begonnen: http://playground.arduino.cc/Code/Email

Heb je de mail server met telnet met losse commando's uitgeprobeerd ?

Berichten: 12
Geregistreerd: 24 Mrt 2017, 16:28

Re: SD card uitlezen

Berichtdoor DreArduino » 11 Apr 2017, 00:04

Koepel,
Mijn Email gedeelte werkt perfect, maar ik kan niet het volledige tekstbestand doorsturen ( en het staat volledig op de SD card, want die kan ik met een computer uitlezen ... )

Nico,
Mijn arduino is een "Leonardo Eth" en die werkt perfect, het gaat alleen om wat ik wil mailen, het volledige tekstbestand dus dat op de kaart staat : ik noem de string " INHOUD" en wil ik het tekstbestand in krijgen...
hier dus :

Serial.println("FILE TERUG GELEZEN");

while (myFile.available()) {

INHOUD += myFile.readStringUntil('\n');

}
myFile.close();

Gebruikers-avatar
Berichten: 1726
Geregistreerd: 06 Aug 2016, 01:03

Re: SD card uitlezen

Berichtdoor Koepel » 11 Apr 2017, 02:28

@DreArduino, het werkt niet perfect, want dan zou het werken ;) Het gaat er om het geheel wat er gebeurt, dat er voor zorgt dat niet de hele INHOUD wordt verstuurd.

Kun je dan op internet een voorbeeld vinden van code die niet op de reactie van de server wacht (en die ook geen delay heeft) en toch werkt ?
Je kunt zelf in telnet de commando's typen om te kijken of het werkt. Of dezelfde lange tekst zoals die in het bestand staat gebruiken, maar dan gewoon vanuit de sketch. Krijg je wel de volledige INHOUD op de seriële monitor te zien ?

Gebruikers-avatar
Berichten: 4827
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: SD card uitlezen

Berichtdoor nicoverduin » 11 Apr 2017, 06:00

Dus hoe groot is die text file?
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar Forum suggesties

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast