Weather casting with Machine Learning (SVM and SRNN).
Dependencies: EthernetInterface GraphicHandler NTPClient SRNN SVM SensorModule mbed-rtos mbed
main.cpp@0:f6cdb984f638, 2015-02-15 (annotated)
- Committer:
- yukari_hinata
- Date:
- Sun Feb 15 09:28:23 2015 +0000
- Revision:
- 0:f6cdb984f638
- Child:
- 1:8538381cae81
modified (add setup modules)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
yukari_hinata | 0:f6cdb984f638 | 1 | #include "main.hpp" |
yukari_hinata | 0:f6cdb984f638 | 2 | |
yukari_hinata | 0:f6cdb984f638 | 3 | LocalFileSystem local("local"); // マウントポイントを定義(ディレクトリパスになる) |
yukari_hinata | 0:f6cdb984f638 | 4 | |
yukari_hinata | 0:f6cdb984f638 | 5 | // 時間(global) |
yukari_hinata | 0:f6cdb984f638 | 6 | time_t global_time; // 現在時刻 |
yukari_hinata | 0:f6cdb984f638 | 7 | Mutex time_mutex; // 時間のMutex |
yukari_hinata | 0:f6cdb984f638 | 8 | // Pointer to Class instance (global) |
yukari_hinata | 0:f6cdb984f638 | 9 | SRNN *srnn; |
yukari_hinata | 0:f6cdb984f638 | 10 | MCSVM *mcsvm; |
yukari_hinata | 0:f6cdb984f638 | 11 | SensorModule *sm; |
yukari_hinata | 0:f6cdb984f638 | 12 | GraphicHandler *gh; |
yukari_hinata | 0:f6cdb984f638 | 13 | |
yukari_hinata | 0:f6cdb984f638 | 14 | // 系列データ |
yukari_hinata | 0:f6cdb984f638 | 15 | float* new_seqence_data; // 現在の(一番新しい)系列データ |
yukari_hinata | 0:f6cdb984f638 | 16 | float* new_predict_data; // 現在の予測結果 |
yukari_hinata | 0:f6cdb984f638 | 17 | int* new_predict_weather; // 現在の予測天気 |
yukari_hinata | 0:f6cdb984f638 | 18 | float* new_predict_probability; // 現在の予測天気の確率(厳密には,確率ではない...) |
yukari_hinata | 0:f6cdb984f638 | 19 | FILE* seqence_data_fp; // 系列データのファイルポインタ(SRNNと計器の記録に使う) |
yukari_hinata | 0:f6cdb984f638 | 20 | FILE* predict_data_fp; // 予測データ |
yukari_hinata | 0:f6cdb984f638 | 21 | Mutex seqence_data_mutex; // 系列データのMutex |
yukari_hinata | 0:f6cdb984f638 | 22 | Mutex predict_data_mutex; // 予測データのMutex |
yukari_hinata | 0:f6cdb984f638 | 23 | |
yukari_hinata | 0:f6cdb984f638 | 24 | // 計器/機械学習スレッド |
yukari_hinata | 0:f6cdb984f638 | 25 | void read_and_predict_thread(void const *arg) |
yukari_hinata | 0:f6cdb984f638 | 26 | { |
yukari_hinata | 0:f6cdb984f638 | 27 | // 1. 定期的(周期はmainが指定)にセンサーから読み出す |
yukari_hinata | 0:f6cdb984f638 | 28 | // 2. 記録(記録ファイルが長くなっていたら, 削る) |
yukari_hinata | 0:f6cdb984f638 | 29 | // 3. SRNNに学習データを読み込ませる.(Mutexを使う) |
yukari_hinata | 0:f6cdb984f638 | 30 | // 4. SRNNの学習/予測結果から, MCSVMで天気識別 |
yukari_hinata | 0:f6cdb984f638 | 31 | // 5. 予測結果のセット, 書き込み |
yukari_hinata | 0:f6cdb984f638 | 32 | } |
yukari_hinata | 0:f6cdb984f638 | 33 | |
yukari_hinata | 0:f6cdb984f638 | 34 | // 描画スレッド : 優先度低め |
yukari_hinata | 0:f6cdb984f638 | 35 | void draw_thread(void const *arg) |
yukari_hinata | 0:f6cdb984f638 | 36 | { |
yukari_hinata | 0:f6cdb984f638 | 37 | // 1. 1分に一回, 時間を取りにいく |
yukari_hinata | 0:f6cdb984f638 | 38 | // 2. 描画更新 <- 学習中は止めたい... |
yukari_hinata | 0:f6cdb984f638 | 39 | } |
yukari_hinata | 0:f6cdb984f638 | 40 | |
yukari_hinata | 0:f6cdb984f638 | 41 | |
yukari_hinata | 0:f6cdb984f638 | 42 | // ネットワークスレッド |
yukari_hinata | 0:f6cdb984f638 | 43 | void network_thread(void const *arg) |
yukari_hinata | 0:f6cdb984f638 | 44 | { |
yukari_hinata | 0:f6cdb984f638 | 45 | // 1. たまに時間を更新 |
yukari_hinata | 0:f6cdb984f638 | 46 | // 2. ポート80のListen <- 学習中は止めたい... |
yukari_hinata | 0:f6cdb984f638 | 47 | } |
yukari_hinata | 0:f6cdb984f638 | 48 | |
yukari_hinata | 0:f6cdb984f638 | 49 | // エントリ. スレッドの生成, そして待つ |
yukari_hinata | 0:f6cdb984f638 | 50 | int main(void) |
yukari_hinata | 0:f6cdb984f638 | 51 | { |
yukari_hinata | 0:f6cdb984f638 | 52 | set_new_handler(no_memory); |
yukari_hinata | 0:f6cdb984f638 | 53 | |
yukari_hinata | 0:f6cdb984f638 | 54 | setup(); |
yukari_hinata | 0:f6cdb984f638 | 55 | printf("EXIT SUCESS!! \r\n"); |
yukari_hinata | 0:f6cdb984f638 | 56 | return 0; |
yukari_hinata | 0:f6cdb984f638 | 57 | } |