Untitled
function BebekOdasiGUI % GUI Penceresi Oluşturma f = figure('Name', 'Bebek Odası İzleme Sistemi', 'NumberTitle', 'off', ... 'Position', [100, 100, 600, 400]); % Veri Görselleştirme Alanları uicontrol('Style', 'text', 'Position', [50, 340, 100, 20], ... 'String', 'Sıcaklık (°C)', 'HorizontalAlignment', 'center'); tempDisplay = uicontrol('Style', 'text', 'Position', [50, 310, 100, 30], ... 'String', '---', 'BackgroundColor', 'white', ... 'FontSize', 14); uicontrol('Style', 'text', 'Position', [250, 340, 100, 20], ... 'String', 'Nem (%)', 'HorizontalAlignment', 'center'); humidityDisplay = uicontrol('Style', 'text', 'Position', [250, 310, 100, 30], ... 'String', '---', 'BackgroundColor', 'white', ... 'FontSize', 14); uicontrol('Style', 'text', 'Position', [450, 340, 100, 20], ... 'String', 'Ses Seviyesi', 'HorizontalAlignment', 'center'); soundDisplay = uicontrol('Style', 'text', 'Position', [450, 310, 100, 30], ... 'String', '---', 'BackgroundColor', 'white', ... 'FontSize', 14); % Gerçek Zamanlı Grafik Alanları axesTemp = axes('Parent', f, 'Position', [0.1, 0.5, 0.25, 0.3]); title(axesTemp, 'Sıcaklık Grafiği'); xlabel(axesTemp, 'Zaman'); ylabel(axesTemp, 'Sıcaklık (°C)'); axesHumidity = axes('Parent', f, 'Position', [0.4, 0.5, 0.25, 0.3]); title(axesHumidity, 'Nem Grafiği'); xlabel(axesHumidity, 'Zaman'); ylabel(axesHumidity, 'Nem (%)'); axesSound = axes('Parent', f, 'Position', [0.7, 0.5, 0.25, 0.3]); title(axesSound, 'Ses Grafiği'); xlabel(axesSound, 'Zaman'); ylabel(axesSound, 'Ses Seviyesi'); % Başlat Düğmesi startButton = uicontrol('Style', 'pushbutton', 'String', 'Başlat', ... 'Position', [250, 20, 100, 40], 'FontSize', 12, ... 'Callback', @startMonitoring); % Veri Değişkenleri temperatureData = []; humidityData = []; soundData = []; arduinoPort = []; % Arduino seri bağlantısı değişkeni % Başlatma Fonksiyonu function startMonitoring(~, ~) try % Arduino ile Seri Bağlantı if isempty(arduinoPort) arduinoPort = serial('COM3', 'BaudRate', 9600); % Portu kontrol edin fopen(arduinoPort); end % Verileri Okuma ve Görselleştirme while isvalid(f) if arduinoPort.BytesAvailable > 0 data = fscanf(arduinoPort, '%s'); tokens = regexp(data, 'Temperature: ([\d\.]+) C, Humidity: ([\d\.]+) %, Sound Level: (\d+)', 'tokens'); if ~isempty(tokens) temperature = str2double(tokens{1}{1}); humidity = str2double(tokens{1}{2}); soundLevel = str2double(tokens{1}{3}); % Verileri Güncelle temperatureData = [temperatureData, temperature]; humidityData = [humidityData, humidity]; soundData = [soundData, soundLevel]; % GUI Elemanlarını Güncelle set(tempDisplay, 'String', num2str(temperature)); set(humidityDisplay, 'String', num2str(humidity)); set(soundDisplay, 'String', num2str(soundLevel)); % Grafik Güncelle plot(axesTemp, temperatureData, 'r.-'); plot(axesHumidity, humidityData, 'b.-'); plot(axesSound, soundData, 'g.-'); drawnow; end end pause(0.1); end catch err disp('Bir hata oluştu: '); disp(err.message); end end % Pencere Kapatıldığında Seri Portu Kapat f.CloseRequestFcn = @closeGUI; function closeGUI(~, ~) if ~isempty(arduinoPort) fclose(arduinoPort); delete(arduinoPort); end delete(f); end end
Leave a Comment