Теряется строка
- Войдите на сайт для отправки комментариев
Сб, 27/06/2015 - 14:13
йуу
// библ SD карты
#include <SD.h>
File myFile;
#include <string.h>
char a_in[10]; ///символ для включения сохранения
char s_in[10]; // символ обороты двигателя
char h_in[10]; // символ скважности
int PowSd = 49; // включения питания карты памяти
int knopka2 = 43; // упровляющий сигнал для сохронения данных
int flag2 = 0; // флаг для упровляющего сигнала
void setup(){
pinMode(PowSd, OUTPUT);
digitalWrite(PowSd, HIGH);
pinMode(knopka2, INPUT);
Serial.begin(115200);
Serial3.begin(57600);
// открываем сд карту
while (!Serial) {
;
}
if (!SD.begin(4)) {
}
delay(10);
myFile = SD.open("test.txt", FILE_WRITE);
}
void loop(){
if(digitalRead(knopka2)==HIGH&&flag2==0)
{
//считываем что приходит в сериал и разбираем по запятым
int i=0;
char buffer[100];
//если есть данные - читаем
if(Serial3.available()){
//загоняем прочитанное в буфер
while( Serial3.available() && i< 99) {
buffer[i++] = Serial3.read();
}
//закрываем массив
buffer[i++]='\0';
}
delayMicroseconds(5000);
//если буфер наполнен
if(i>0){
//разбираем его на части отделенные запятой
sscanf(buffer, "%[^','],%[^','],%[^','],%", &a_in, &s_in, &h_in);
}
flag2=1;
}
int asd = atof(a_in);
int qwe = atof(s_in);
int zxc = atof(h_in);
//////////////////////////////////////////
if(digitalRead(knopka2)==LOW&&flag2==1)
{
myFile.print(" C ");
myFile.print(a_in);
myFile.print(" S ");
myFile.print(s_in);
myFile.print(" H ");
myFile.println(h_in);
// выводим данные разобранные после запятой
Serial.print(" A>");
Serial.print(asd);
Serial.print(" S>");
Serial.print(qwe);
Serial.print(" D>");
Serial.println(zxc);
// сбрасываем буфер
a_in [0] = '\0';
s_in [0] = '\0';
h_in [0] = '\0';
flag2=0;
}
}
Привет всем ,подскажите пожалуйста.
Данные приходят на порт 3 , с частотой 34 раза в секунду (123,123,123) , разбираем строку на части по запятым , выводим в порт и сохроняем на SD карту.
Иногда почемуто теряется строка?
Причём когда убираешь строки 136-145 сохранения на сд карту сбой пропадает!
Как решить эту проблему?
здравый смысл подсказывает, что где-то нужно добавлять задержки. 5 микросекунд это всётаки мало.
попробуйте для начала
-добавить что-нибудь вроде delay(1000); в строку № 147
- увеличить задержку перед записью на карту
- уменьшить скорость порта.
если не поможет, то уточните в какой именно момент теряются данные, и есть ли строгая периодичность потери данных.
не успевает записывать на карту (сам процесс довольно медленный).
Привет!
Мне нужно 34 раза в секунду записывать показания и delay(1000) тут не вариант.
Привет!
А как можно увеличить скорость записи на карту?
Привет!
А как можно увеличить скорость записи на карту?
скороть записи можно увеличить, увеличив скорость записи - это же очевидно.
Привет!
Мне нужно 34 раза в секунду записывать показания и delay(1000) тут не вариант.