Непонятная запись через com порт

КонстантинБ
Offline
Зарегистрирован: 02.11.2017

Здравствуйте, есть Ардуино, к ней подключена SD карта. Задача такова: записать данные, пришедшие в com порт на SD карту. Карта на 16гб. Для этого использую такой скетч на arduino:

#include <SPI.h>
#include <SD.h>
 
File dataFile;
 
void setup()
{
  Serial.begin(9600);
 
  if (!SD.begin(10)) 
  {
    Serial.println("Card failed, or not present");
    return;
  }
 
  dataFile = SD.open("commands.txt", FILE_WRITE);
}
 
void loop() 
{
  while (Serial.available() > 0)
  {
    char inData = Serial.read();
 
    dataFile.println(inData);
    
    if(inData == '*')
    {
      tone(4, 1500, 300);
      dataFile.close();
    }
  }
}

 

и такой код на C#

SerialPort SerialPort = new SerialPort("COM3", 9600);
 
SerialPort.Open();
Thread.Sleep(500);
 
SerialPort.DiscardInBuffer();
Thread.Sleep(500);
 
for (int i = 0; i < 4; i++)
{
    SerialPort.Write("2");
    Thread.Sleep(250);
}
 
SerialPort.WriteLine("*");
Thread.Sleep(500);
 
SerialPort.Close();

Проблема такова:

отправляю 4 цифры "2", из них записывается только 2. Переподключаю ардуино, отправляю 4 цифры "2" и записываются все. При этом, звездочка "*" записывается без каких-либо нареканий. При этом уменьшаю задержку в цикле. Может ли быть причина в нехватке скорости порта?

Как это решить, какова причина?

КонстантинБ
Offline
Зарегистрирован: 02.11.2017

Забыл сказать, использую ардуино nano, может ли быть ограничение в ней?

КонстантинБ
Offline
Зарегистрирован: 02.11.2017

Проблему решил. Все не работало из-за перезагрузки ардуино после подключения com порта - 

SerialPort.Open()

Добавил после открытия

Thread.Sleep(7000)

и все заработало. Тема закрыта.