Что мне не хватает? Отправка данных из Matlab в Arduino на Micro SD

Прежде всего. Это ни в коем случае не классовое задание. Это моя личная работа и исследование. Я просто хочу избавиться от этого.

Я учусь использовать Matlab с различными проектами Arduino. Я опытный пользователь Matlab, но я новичок во всем пространстве Arduino.

Я пытаюсь отправить некоторые числовые данные из Matlab (через графический интерфейс) на мой Arduino Uno и заставить Arduino записать их на мою карту micro SC. Это временный шаг к моему более масштабному проекту. Однако нет необходимости вдаваться в эти подробности, поскольку они выходят за рамки моих вопросов.

Я вполне уверен, что код Matlab работает, а код Arduino немного изменен из другого проекта, который я делал, где я записывал и считывал случайные числа с моей карты micro SD.

Однако, когда я запускаю код Matlab, Arduino мигает, как будто он получает данные, но после того, как я проверяю карту micro SD, он остается пустым.

Я уверен, что мой Arduino правильно подключен к адаптеру карты micro SD, поскольку он остается таким же, как и в моем предыдущем проекте.

Поэтому я уверен, что мне не хватает чего-то тривиального, чтобы заставить его работать.

Я исследовал несколько веб-сайтов по этой теме, и их методы и мои, похоже, очень хорошо совпадают.

Я вполне уверен, что проблема в условном операторе:

if (Serial.available() > 0) {

Как вы увидите.

Код Matlab приведен ниже:

arduinoCom = serial('COM3', 'BaudRate', 115200);  
sendData = 5;
fopen(arduinoCom);
fprintf(arduinoCom,'%i',sendData); %this will send 5 to the arduino
fclose(arduinoCom); 
delete(arduinoCom);

Код Arduino выглядит следующим образом:

#include <SD.h> // загружаем SD-библиотеку

int chipSelect = 4;  // Контакт выбора чипа для адаптера карты MicroSD
int incomingByte = 0; // для входящих последовательных данных.
File SDF; // Здесь сохраняются полученные последовательные данные.


void setup() {
     Serial.begin(115200); // запускаем последовательное соединение для распечатки отладочных сообщений и данных
     pinMode(chipSelect, OUTPUT); // вывод выбора чипа должен быть установлен в режим OUTPUT
     if (!SD.begin(chipSelect)) { // Инициализируем SD-карту
        Serial.println("Could not initialize SD card."); // если возвращаемое значение ложно, что-то пошло не так.
     }
     while (!Serial) {
     }
}

void loop() {
        // Открыть файл, записать данные, закрыть файл только при получении данных
        if (Serial.available() > 0) {
           incomingByte = Serial.read();
           SDF = SD.open("SerialDataFile.txt", FILE_WRITE); // открываем «SerialDataFile.txt» для записи данных
           SDF.println(incomingByte, DEC); // записываем десятичное число в кодировке ASCII в файл
           SDF.close(); // закрываем файл
           }
}  

Ожидаемым результатом будет файл SerialDataFile.txt, хранящийся на моей карте micro SD со значением 5.

Спасибо за помощь!

, 👍0

Обсуждение

Комментарии не предназначены для расширенного обсуждения; этот разговор был [перенесен в чат](https://chat.stackexchange.com/rooms/88725/discussion-on-question-by-dsmalenb-what-am-i-missing-send-data-from-matlab- к-а)., @Nick Gammon

Слушайте, это не форум. **Пожалуйста, воздержитесь** от ответа на вопрос или внесения предложений в комментариях. Комментарии под вопросом предназначены для разъяснения любых запутанных частей вопроса и запроса дополнительной информации., @Nick Gammon

*Я не вижу способа проверить этот ответ как полный.* - существует какая-то задержка. Зайдите завтра., @Nick Gammon


1 ответ


Лучший ответ:

0

Плата перезагружается при новом USB-соединении с помощью fopen. Подождите 2 секунды между fopen и fprintf в коде Mathlab.

,