パソコンからマイコンボード上の LED の点滅をコントロールする. このプログラムの説明は,CQ出版社「トランジスタ技術」の2021年10月号から開始された連載記事「STM32マイコンではじめるPC計測」の中にあります.このプログラムといっしょに使うPC側のプログラムについても同誌を参照してください.
Dependencies: mbed SerialTxRxIntr
main.cpp@0:7ea2d228859d, 2021-09-09 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Thu Sep 09 08:42:03 2021 +0000
- Revision:
- 0:7ea2d228859d
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:7ea2d228859d | 1 | //------------------------------------------------------------------------------ |
MikamiUitOpen | 0:7ea2d228859d | 2 | // Nucleo-F446 と PC 間の通信を利用するプログラムの例 |
MikamiUitOpen | 0:7ea2d228859d | 3 | // マイコンボード上の LED の点滅のコントロール:起動時は点灯状態 |
MikamiUitOpen | 0:7ea2d228859d | 4 | // パソコンへデータを送信する際の終端コードは '\n' |
MikamiUitOpen | 0:7ea2d228859d | 5 | // |
MikamiUitOpen | 0:7ea2d228859d | 6 | // 2021/07/04, Copyright (c) 2021 MIKAMI, Naoki |
MikamiUitOpen | 0:7ea2d228859d | 7 | //------------------------------------------------------------------------------ |
MikamiUitOpen | 0:7ea2d228859d | 8 | |
MikamiUitOpen | 0:7ea2d228859d | 9 | #include "SerialRxTxIntr.hpp" |
MikamiUitOpen | 0:7ea2d228859d | 10 | using namespace Mikami; |
MikamiUitOpen | 0:7ea2d228859d | 11 | |
MikamiUitOpen | 0:7ea2d228859d | 12 | int main() |
MikamiUitOpen | 0:7ea2d228859d | 13 | { |
MikamiUitOpen | 0:7ea2d228859d | 14 | DigitalOut myLed(LED1, 1); // LED に対応する出力ポート |
MikamiUitOpen | 0:7ea2d228859d | 15 | SerialRxTxIntr rxTx; // PC との通信用,ボーレート:9600 baud |
MikamiUitOpen | 0:7ea2d228859d | 16 | bool blinking = false; |
MikamiUitOpen | 0:7ea2d228859d | 17 | |
MikamiUitOpen | 0:7ea2d228859d | 18 | while (true) |
MikamiUitOpen | 0:7ea2d228859d | 19 | { |
MikamiUitOpen | 0:7ea2d228859d | 20 | // 受信バッファのデータが有効であれば,送信された指令に対応する処理を行う |
MikamiUitOpen | 0:7ea2d228859d | 21 | if (rxTx.IsEol()) |
MikamiUitOpen | 0:7ea2d228859d | 22 | { |
MikamiUitOpen | 0:7ea2d228859d | 23 | string str = rxTx.GetBuffer(); // 受信データ |
MikamiUitOpen | 0:7ea2d228859d | 24 | |
MikamiUitOpen | 0:7ea2d228859d | 25 | // "LED_CTRLer" の受信に対して "ACK" を送信 |
MikamiUitOpen | 0:7ea2d228859d | 26 | if (str == "LED_CTRLer") |
MikamiUitOpen | 0:7ea2d228859d | 27 | rxTx.TxString("ACK\n"); |
MikamiUitOpen | 0:7ea2d228859d | 28 | else // "LED CTRLer" 以外の受信に対する処理 |
MikamiUitOpen | 0:7ea2d228859d | 29 | { |
MikamiUitOpen | 0:7ea2d228859d | 30 | if (str == "ON") blinking = true; |
MikamiUitOpen | 0:7ea2d228859d | 31 | if (str == "OFF") blinking = false; |
MikamiUitOpen | 0:7ea2d228859d | 32 | |
MikamiUitOpen | 0:7ea2d228859d | 33 | rxTx.TxString(str + "\n"); // 受信した文字列をそのまま送信 |
MikamiUitOpen | 0:7ea2d228859d | 34 | } |
MikamiUitOpen | 0:7ea2d228859d | 35 | } |
MikamiUitOpen | 0:7ea2d228859d | 36 | if (blinking) |
MikamiUitOpen | 0:7ea2d228859d | 37 | { |
MikamiUitOpen | 0:7ea2d228859d | 38 | myLed = !myLed; // LED の点灯/消灯の切り替え |
MikamiUitOpen | 0:7ea2d228859d | 39 | wait(0.1); // 0.1秒のウェイト |
MikamiUitOpen | 0:7ea2d228859d | 40 | } |
MikamiUitOpen | 0:7ea2d228859d | 41 | } |
MikamiUitOpen | 0:7ea2d228859d | 42 | } |