Запись данных в файл с акселерометра на ESP32+ADXL103

Нет. Спасибо!!! Не учитывал.

Иногда вообще такая ерунда приходит
1234
1122
11яя

“Тот же” - это “такие же потери” или “все числа, полученные от акселерометра, присутствуют в Экселе”? Постарайтесь не отвечать так двусмысленно - диагноз поставить невозможно.

Если уйти от serial порта, по полноценному BT или WiFi можно было бы передать с частотой 5 КГц? Например, по 2 байта.

Кстати, а нужно ли вам 12бит разрядности? Судя по программе, у вас все числа предполагаются 4хзначными - то есть диапазоне 1000 - 4096. Может сместить этот диапазон на 4 бита вправо, чтобы значения помещались в байт - выиграете в скорости передачи в 5 раз

В любом случае от передачи в виде строк “1123” надо уходить. Передавайте бинарные данные - во-первых это 2 байта вместо 4х, а во-вторых экономите время на конверсии

Иногда, да. Я через Termite 3.4 сохраняю в txt.
Вот что получаю в терминал:
1000

0000
0000
0000
0яяя
END
Сейчас без датчика

Спасибо!!! Передавать в бинарном виде. А как сместить, пжт, подскажите.

myFile.print ((uint8_t)(analogRead(27)>>4), DEC);  // wrong!!!  see below

и, кстати, разделитель станет не нужен

1 лайк

DEC (не BIN)

нет, вообще не так

myFile.write((uint8_t)(analogRead(27)>>4));

не print а write, и никакие DEC BIN не надо

1 лайк

Спасибо!!! Пробую.

на приемнике будут бинарные данные, а не символы - приемку менять придется

Хорошо. Я понял.

#include "BluetoothSerial.h"
#include "FS.h"
#include "SPIFFS.h"

BluetoothSerial ACC_BT;
File myFile;

void setup(){
  Serial.begin(9600); 
  SPIFFS.begin();
  ACC_BT.begin("Accelerometer");
  SPIFFS.format(); 
}

void loop(){
  if (ACC_BT.available()){
    if (ACC_BT.read() == 49){
      myFile = SPIFFS.open("/file.txt", FILE_WRITE);
      for (int i = 0; i < 1024; i++){
        myFile.write((uint8_t)(analogRead(27)>>4));
        delayMicroseconds(200);        
      }
      myFile.close();
      myFile = SPIFFS.open("/file.txt", FILE_READ);
      while(myFile.available()){
        ACC_BT.write(myFile.read());
      }
      myFile.close();
      SPIFFS.remove("/file.txt");
      ACC_BT.println("END");
    }
  }
}

Чтобы получить опрос четко 5КГц, правильно использовать millis() вместо delay?

правильно читать через таймер и прерывание, код на прежнем форуме был

1 лайк

Пжт, дайте ссылку. Читал несколько примеров, не смог разобраться. Или пример, хотя бы несколько строк.

читать читал, но мне без надобности ни код ни ссылки не сохранял
вот к примеру

1 лайк

Спасибо!

А ты даташит прочитал, “хотелось бы”?