Étape 2: Écrire le code
CODE DE L’ARDUINO
Le code pour arduino est fondamentalement la même que vous pouvez trouver ici : mais parce qu’ici j’ai seulement envie de montrer le nombre de tours de valeur (pas la valeur de rps et tout le texte "rps" et "rpm") donc j’ai modifié quelques lignes (ceux qui ont Serial.print(), parce que précédemment le programme a été conçu pour présenter la lecture sur écran série style bloc-notes, mais maintenant, nous devons seulement le nombre de tours de la valeur pour alimenter la chaîne de texte statique). OK, pour le rendre facile et rapide que j’ai copier le code ici, vous pouvez vérifier par vous-même, à titre de comparaison avec le code précédent. N’oubliez pas que le but principal du code de l’arduino n'est que pour passer une valeur à serial comm, alors ce programme est à titre d’exemple, si vous avez votre propre programme qui imprime la valeur de n’importe quelle sonde de lecture de la série alors ignorer cette allez en avant pour le code MATLAB.
int sensorvalue;<br>int state1 = HIGH; int state2; float rps; float rpm; long prevMillis = 0; long interval = 100; long currentTime; long prevTime = 1; long diffTime; int sensorthreshold = 30; // this value indicates the limit reading between dark and light, // it has to be tested as it may change acording on the // distance the leds are placed. // to see what number is good, check the sensorvalue variable value // as printed out in the serial monitor</p><p>void setup() { Serial.begin(9600); pinMode(13,OUTPUT); // assign pin 13 led as indicator because we cannot se the IR light } void loop() { sensorvalue = analogRead(0); // read from pin 0 if(sensorvalue < sensorthreshold) state1 = HIGH; else state1 = LOW; digitalWrite(13,state1); // as iR light is invisible for us, the led on pin 13 // indicate the state of the circuit. if(state2!=state1){ //counts when the state change, thats from (dark to light) or //from (light to dark), remember that IR light is invisible for us. if (state2>state1){ currentTime = micros(); // Get the arduino time in microseconds diffTime = currentTime - prevTime; // calculate the time difference from the last sensors meet-up rps = 1000000/diffTime; // calculate how many rev per second - good to know rpm = 60000000/diffTime; // calculate how many rev per minute unsigned long currentMillis = millis(); // print to serial at every interval - defined at the variables declaration if(currentMillis - prevMillis > interval){ // see if now already an interval long prevMillis = currentMillis; Serial.println(rpm); // this line is edited from the code in the prev instructable } prevTime = currentTime; } state2 = state1; } /* only for testing to determine the sensorthreshold value delay(500); Serial.println(sensorvalue); */ }
CODE MATLAB
Dans votre fenêtre MATLAB GUI de conception mise en page, cliquez sur affichage - rédacteur en chef (ou trouver, dans la barre d’outils, une photo de papier et un crayon sans la main). Il ouvrira une fenêtre de l’éditeur avec certains codes écrits déjà, MATLAB leur ai écrit pour vous pas de problème. Écrire la fonction de rappel pour le bouton bascule, que le reste du code peut être laissé tel quel. Dans mon cas, j’ai nommé mon bouton bascule OnOffToggle, alors la fonction en vertu de laquelle j’ai écrit le code est OnOffToggle_Callback (hObject, eventdata, poignées).
Toutes les données envoyées par le biais de la série sont récupérées ici comme une variable rpmdata, donc nous voulons juste imprimer ces données tr/min à l’écran, c’est tout. Une dernière chose, vérifiez que vous vous connectez votre arduino au bon port COM que vous écrivez dans le code. Dans ce code, j’ai écrit COM3 parce que j’ai branché mon arduino à COM3.
Puis enregistrez votre fichier-m.
Voici le code complet (edit uniquement la fonction de OnOffToggle_Callback) :
function varargout = gui(varargin) % GUI MATLAB code for gui.fig % GUI, by itself, creates a new GUI or raises the existing % singleton*. % % H = GUI returns the handle to a new GUI or the handle to % the existing singleton*. % % GUI('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in GUI.M with the given input arguments. % % GUI('Property','Value',...) creates a new GUI or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before gui_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to gui_OpeningFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help gui % Last Modified by GUIDE v2.5 14-Mar-2015 01:06:09</p><p>% Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', ... 'gui_OutputFcn', ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before gui is made visible. function gui_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to gui (see VARARGIN) % Choose default command line output for gui handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes gui wait for user response (see UIRESUME) % uiwait(handles.figure1); % --- Outputs from this function are returned to the command line. function varargout = gui_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output; function currentEdit_Callback(hObject, eventdata, handles) function currentEdit_CreateFcn(hObject, eventdata, handles) % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function OnOffToggle_Callback(hObject, eventdata, handles) button_state = get(hObject,'Value'); if button_state == get(hObject,'Max') set(handles.OnOffToggle,'String','Stop'); drawnow; i=2; while i > 1 rpmdata = serial('COM3','BaudRate',9600); % this Baud rate should be the same as that in Arduino code fclose(instrfindall); fopen(rpmdata); b = fscanf(rpmdata); set(handles.textCurrent,'String',b); drawnow; delete(rpmdata) if get(hObject,'Value') == get(hObject,'Min') break end end set(handles.OnOffToggle,'String','Start'); drawnow; rpmdata = serial('COM3','BaudRate',9600); fclose(rpmdata); end