MATLAB+Arduino+LCD

Я пытаюсь отправить несколько целых чисел на ЖК-дисплей. Но это не работает. Пробовал в Протеусе. Пожалуйста помоги. Ниже я загрузил код MATLAB и Arduino.

Код MATLAB:

clear all
clc

 answer=1; % this is where we'll store the user's answer
 arduino=serial('COM1','BaudRate',9600); % create serial communication object on port COM4

fopen(arduino); % initiate arduino communication

while answer
fprintf(arduino,'%s',char(answer)); % send answer variable content to arduino
answer=input('Enter led value 1 or 2 (1=ON, 2=OFF, 0=EXIT PROGRAM): '); % ask user to enter value for variable answer
end

fclose(arduino); % end communication with arduino

Код Arduino:

#include <LiquidCrystal.h>
int matlabData;
LiquidCrystal lcd(12,11,5,4,3,2);

void setup() {
  lcd.begin(16,2);
  Serial.begin(9600);
}

void loop() {
  if(Serial.available()>0) {
    matlabData=Serial.read();
    lcd.print(matlabData);
  }
}

, 👍-1

Обсуждение

*Вздох* заставить последовательные порты работать с Matlab — это кошмар. Вы уверены, что эта часть работает правильно? Попробуйте подключить его к ПК и используйте приложение, такое как RealTerm или TerraTerm, чтобы убедиться, что устройство работает правильно., @RubberDuck


2 ответа


1

Вы можете использовать пакет поддержки Arduino от Matlab, который позволяет вам напрямую управлять Arduino без необходимости писать код в Arduino IDE. Я никогда не использовал его с ЖК-дисплеем. Вот ссылка, которая может помочь.

,

1
while answer
  fprintf(arduino,'%s',char(answer)); % send answer variable content to arduino
  answer=input('Enter led value 1 or 2 (1=ON, 2=OFF, 0=EXIT PROGRAM): ');
  % ask user to enter value for variable answer
end

Это только мне кажется, или нужно попросить пользователя ввести что-то перед печатью?

Кроме того, что более важно, разве fprintf(arduino, '%s', char(answer)); не печатает необработанные байты? В этом случае вы будете отправлять 0x01/0x02. Не очень хорошая идея... В коде Arduino выводите на Serial то, что вы получаете, в [шестнадцатеричном] десятичном формате, а не в виде char.

    matlabData=Serial.read();
    Serial.print("Received: [0x");
    if(matlabData<16)Serial.write('0');
    Serial.print(matlabData, HEX);
    Serial.println("]");

Это должно помочь вам лучше понять, получили ли вы что-нибудь, и если да, то что.

,