WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

vektor in Schleife einsetzen

 

muellerschneider
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 01.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2014, 02:59     Titel: vektor in Schleife einsetzen
  Antworten mit Zitat      
Hallo allerseits Smile,

ich habe ein Projekt mit Matlab und einem Arduino Uno. Nun will ich mittels Schieberegister 20 LED's zum leuchten bringen. Um dabei das Schieberegister mit einem Muster zu versehen, bedien ich mich einer for Schleife. Das muster steht dabei in einer 20x1 cell Datei, mit Namen 'wert150'. Die Schleife sieht dabei so aus:

%Eingang des Schieberegisters auf pin 3, Clk auf 4

Code:

            for index =1:20 %anzahl der led's = 20
                u.digitalWrite(3,cell2mat(wert150(index)));
               
                u.digitalWrite(4,1);
                u.digitalWrite(4,0); % Eingang weiterschieben
            end
 

Das klappt auch soweit perfekt. Jedoch habe ich auch andere Dateien die ich dort einlesen will. Also habe ich an zwei Vorschleifen gedacht. Hier mein Entwurf
Code:

wert2={1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1};
wert5={0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0};
wert10={1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1};
wert20={0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0};
wert40={1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1};
wert60={0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0};
wert80={1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1};
wert100={0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0};
wert150={1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1};

b={'wert2(index)','wert5(index)','wert10(index)','wert20(index)'...
    ,'wert40(index)','wert60(index)','wert80(index)','wert100(index)'...
    ,'wert150(index)'};%vektor mit allen mustern

u=arduino('COM7');


u.pinMode(2,'output'); %reset
u.pinMode(3,'output'); %daten
u.pinMode(4,'output'); %clk

%initialisieren
u.digitalWrite(2,0);
u.digitalWrite(3,0);
u.digitalWrite(4,0);

%reset ausschalten
u.digitalWrite(2,1);



for lauf =1:9 %for Schleife, die alle Muster durchläuft
    c=b(lauf);
    a=strcat('u.digitalWrite(3,cell2mat(',c,'));');
    for index =1:20%for schleife, die das Schieberegister beschreibt
        a;% vorher erstellter Zugriffsbefehl auf den Arduino
       
        u.digitalWrite(4,1);
        u.digitalWrite(4,0); %ein clk schritt
    end
    pause(2)
end
 

Matlab gibt mir kein Fehler aus, ich sehe auch wie der Arduino alle 2 Sekunden die pause ausführt, jedoch müssten meine leds abwechselt an und ausschalten, was sie aber nicht tun Question Wär super wenn mir da jemand helfen könnte

Beste Grüße
Fabian1
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 14.01.2014, 11:12     Titel:
  Antworten mit Zitat      
Zitat:
Code:
 a=strcat('u.digitalWrite(3,cell2mat(',c,'));');
    for index =1:20%for schleife, die das Schieberegister beschreibt
        a

ist zwar gültige matlab syntax aber nicht das was du willst.
in der letzen zeile wird dir nur der string den du erstellt hast and das commandwindow ausgegeben was du aber unterdrückst mit ;
im gundegenommen macht die zeile also garnichts.
eine möglichkeit wäre
Code:

ich kann dir davon aber nur dringend abraten. mathworks selber rät davon ab und warum wurde hier im forum schon sehr oft besprochen.
Zitat:
Code:
wert2={1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1};
wert5={0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0};
wert10={1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1};
wert20={0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0};
wert40={1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1};
wert60={0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0};
wert80={1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1};
wert100={0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0};
wert150={1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1};

du versteckst hier einen index im variablen namen. das ist schlecht wie du bereits selber merkst.
alternativen sind:
ein struct benutzen ala
Code:

dann kannst du mittels fieldnames auf die namen zugreifen und diese mit einer schleife abarbeiten.
einfacher wäre es ein mehrdimensionales cell aray zu nehmen.
oder so wie deine werte oben aussehen gleich nur eine 2 dimensionale matrix.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2014, 14:30     Titel:
  Antworten mit Zitat      
Ok danke erstmal,

Super eval funktioniert!!
wenn mir davon jedoch dringend abgeraten wird, welche anderen Möglichkeiten gibt es denn dann? und was sind die Vorteile dann von dieser Lösung und von den structs.

Liebe grüße
Fabian
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 14.01.2014, 14:32     Titel:
  Antworten mit Zitat      
Zitat:
welche anderen Möglichkeiten gibt es denn dann?

ich habe die alternativen bereits benannt. structs cellarays und normale arrays.
Zitat:
und was sind die Vorteile dann von dieser Lösung und von den structs

habe ich auch schon gesagt. du kannst sie einfach mit schleifen abarbeiten.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2014, 14:42     Titel:
  Antworten mit Zitat      
Achso ich dachte mit eval gibt es ein Problem alles klar vielen Dank!!
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 14.01.2014, 16:04     Titel:
  Antworten mit Zitat      
eval an sich macht das was es soll. trotzdem sollte man es nur in ausname situationen verwenden. die alternativen die ich genannt habe sind weitaus besser.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.