Ich versuche, Daten von meinem Arduino Leonardo zu Matlab zu senden, dann plotten es. Ich habe versucht, eine Sinuswelle an die analogen Eingänge zu übergeben, und ich konnte es auf dem seriellen Plotter sehen. Das Problem ist, dass, wann immer ich die Daten an Matlab sende und grafisch darstelle, der Plot keine Sinuswelle mehr ist.Arduino Matlab plotten
Hier ist mein Arduino Code, ich habe es mit Hilfe dieser link eingestellt bei 1kHz zu probieren, die nicht die seriellen Plotter Ergebnisse beeinflußte die
#define INTERVAL_LENGTH_US 1000UL
unsigned long previousMicros;
#define FASTADC 1
int recValue;
// defines for setting and clearing register bits
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
double t = 0;
void setup() {
int start ;
int i ;
#if FASTADC
// set prescale to 16
sbi(ADCSRA, ADPS2) ;
cbi(ADCSRA, ADPS1) ;
cbi(ADCSRA, ADPS0) ;
#endif
Serial.begin(115200) ;
while (1)
{
if (Serial.available() > 0)
{
recValue = Serial.read();
if (recValue == 1) // If use will send value 1 from MATLAB
{ //delay(10);
Serial.println("g");
break;
}
}
}
void loop()
{
unsigned long currentMicros = micros();
if ((currentMicros - previousMicros) >= INTERVAL_LENGTH_US)
{
previousMicros += INTERVAL_LENGTH_US;
int val_a0 = analogRead(A0);
int val_a1 = analogRead(A1);
int val_a2 = analogRead(A2);
int val_a3 = analogRead(A3);
Serial.println(val_a0);
Serial.println(val_a1);
Serial.println(val_a2);
Serial.println(val_a3);
}
}
EDIT much.`: Ich habe die Karte in eine UNO-Karte geändert (benutzt keinen virtuellen Kommunikationsport), und ich habe es geschafft, sie zu übertragen. Aber als ich es in Echtzeit geplottet habe, habe ich es geschafft, für eine kurze Zeit zu plotten (700 Samples). Ich weiß, dass der Arduino die Sinuswelle fortwährend sendet, nur in Matlab bekomme ich nur einen Teil davon. Hier ist ein Screenshot von dem, was ich meine:
Der Code, den ich in Matlab verwendet zu empfangen und plotten es ist die folgende:
clear all;
s = serial('COM4', 'BaudRate', 250000); % setup comport
fopen(s);
t=[0]; v1=[0]; v2=[0];v2=[0];v3=[0]; v4=[0]; % same as in Arduino IDE
n=1;h1=0; h2=0; h3=0; h4=0; base=0.0; x=[]; reply = '1';
% signalling to Arduino to start reading inputs
servalue= input('Enter the value 1 to start reading :');
pause(1);tic;
fprintf(s,servalue);
%Arduino will send an acknowledgment
reply = fgetl(s);
if(reply~='g')
disp('fail')
end
%%%%%%%%%%%%%%%%%%setting the plots%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
figure; subplot(411) ;
h1 = plot(v1, 'r-');
%animatedline(nan,nan); % Save handle to the line
title('Channel 1');
ylabel('Amplitude(V)');
subplot(412); h2= plot(v2, 'r-');
%animatedline(nan,nan); % Save handle to the line
title('Channel 2');
ylabel('Amplitude(V)');
subplot(413); h3= plot(v3, 'r-');
%animatedline(nan,nan); % Save handle to the line
title('Channel 3');
ylabel('Amplitude(V)');
subplot(414); h4= plot(v4, 'r-');
%animatedline(nan,nan); % Save handle to the line
title('Channel 4');
xlabel('Time (seconds)');
ylabel('Amplitude(V)');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
while(toc<50)
v1 = [v1, str2double(fgetl(s))*(5.0/1023.0)];
v2 = [v2, str2double(fgetl(s))*(5.0/1023.0)];
v3 = [v3, str2double(fgetl(s))*(5.0/1023.0)];
v4 = [v4,str2double(fgetl(s))*(5.0/1023.0)];
%% %%%%%%%updating plots%%%%%%%%%%%%%%%%%%
set(h1, 'ydata', v1); % Update plot
set(h2, 'ydata', v2); % Update plot
set(h3, 'ydata', v3); % Update plot
set(h4, 'ydata', v4); % Update plot
drawnow;
n=n+1;
end
fclose(s);
Hier ist die Antwort der 4 Kanäle: 4 channels' response
Welche 5 möglichen Werte werden im Excel-Diagramm gezeichnet? –
Senden und empfangen Sie 1 oder 4 Signale gleichzeitig? –
4, ich habe die anderen drei vorher kommentiert, weil ich zuerst einen Kanal testen wollte, ich habe vergessen, das in der Frage zu bearbeiten, es ist jetzt alles behoben. – Isra