Untitled

 avatar
unknown
plain_text
a month ago
4.5 kB
3
Indexable
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