Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 1:36220c7411e9, committed 2017-12-22
- Comitter:
- misodengaku
- Date:
- Fri Dec 22 05:52:01 2017 +0000
- Parent:
- 0:a277e27599ee
- Commit message:
- SREF-PAT-01
Changed in this revision
--- a/SakuraIO.lib Wed Aug 09 06:21:04 2017 +0000 +++ b/SakuraIO.lib Fri Dec 22 05:52:01 2017 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/teams/SAKURA-Internet/code/SakuraIO/#34a0233cdf04 +http://mbed.org/teams/SAKURA-Internet/code/SakuraIO/#70faddd6241b
--- a/main.cpp Wed Aug 09 06:21:04 2017 +0000
+++ b/main.cpp Fri Dec 22 05:52:01 2017 +0000
@@ -1,45 +1,88 @@
#include "mbed.h"
#include "SakuraIO.h"
-#define SEND_INTERVAL 5
+// プロトタイプ宣言
+uint8_t monitor();
+uint8_t dequeue();
DigitalOut status_led(PA_15);
-
-DigitalOut patlite_1(PA_0); // Clear
-DigitalOut patlite_2(PA_1); // Blue
-DigitalOut patlite_3(PA_2); // Green
-DigitalOut patlite_4(PA_3); // Yellow
-DigitalOut patlite_5(PA_4); // Red
+DigitalOut patlite_1(PA_0); // R
+DigitalOut patlite_2(PA_1); // Y
+DigitalOut patlite_3(PA_2); // G
+DigitalOut patlite_4(PA_3); // B
+DigitalOut patlite_5(PA_4); // C
+DigitalIn patlite_state_1(PA_12); // R
+DigitalIn patlite_state_2(PA_8); // Y
+DigitalIn patlite_state_3(PA_7); // G
+DigitalIn patlite_state_4(PA_6); // B
+DigitalIn patlite_state_5(PA_5); // C
-DigitalIn patlite_state_1(PA_12);
-DigitalIn patlite_state_2(PA_8);
-DigitalIn patlite_state_3(PA_7);
-DigitalIn patlite_state_4(PA_6);
-DigitalIn patlite_state_5(PA_5);
-
-DigitalOut patlite_out[5] = {patlite_1, patlite_2, patlite_4, patlite_5, patlite_3};
-// DigitalOut patlite_out[5] = {patlite_1, patlite_3, patlite_4, patlite_2, patlite_5};
-DigitalIn patlite_state[5] = {patlite_state_1, patlite_state_2, patlite_state_4, patlite_state_5, patlite_state_3};
+DigitalOut patlite_out[5] = {patlite_1, patlite_2, patlite_3, patlite_4, patlite_5};
+DigitalIn patlite_state[5] = {patlite_state_1, patlite_state_2, patlite_state_3, patlite_state_4, patlite_state_5};
I2C i2c(PB_7, PB_6); // sda, scl
-uint64_t counter = 0;
-uint32_t iine_count = 0;
-uint8_t blink_flag = 0;
-uint8_t changed = 0;
+SakuraIO_I2C sakuraio(i2c);
uint8_t last_state[5] = {0};
-//SakuraIO_SPI sakuraio(spi, cs);
-SakuraIO_I2C sakuraio(i2c);
-
-Ticker tick;
+int main()
+{
+ // パトライトを1段ずつ順に点滅させながら接続待ち
+ for (int patlite_index = 0;; patlite_index = (patlite_index + 1) % 5)
+ {
+ if ((sakuraio.getConnectionStatus() & 0x80) == 0x80)
+ break;
-void timer()
-{
- uint8_t state[5];
- __disable_irq();
+ status_led = 1;
+ patlite_out[patlite_index] = 1;
+ wait_ms(500);
+ status_led = 0;
+ patlite_out[patlite_index] = 0;
+ wait_ms(500);
+ }
+
+ // 接続完了したら全段1度点滅
+ status_led = 1;
+ for (int i = 0; i < 5; i++)
+ {
+ patlite_out[i] = 1;
+ }
+ wait(1);
+ status_led = 0;
for (int i = 0; i < 5; i++)
{
+ patlite_out[i] = 0;
+ }
+
+ while (1)
+ {
+ // ピン状態と新着メッセージを監視してどちらか変化があったら1
+ uint8_t changed = monitor() | dequeue();
+ if (changed == 1)
+ {
+ uint8_t state[5];
+ for (int i = 0; i < 5; i++)
+ {
+ state[i] = patlite_state[i];
+ }
+ for (int i = 0; i < 5; i++)
+ {
+ sakuraio.enqueueTx(i, (int32_t)state[i]);
+ }
+ sakuraio.send();
+ }
+ wait_ms(10);
+ }
+}
+
+// 外部からパトライトの点灯状態が変えられたことを検知する
+uint8_t monitor()
+{
+ uint8_t changed = 0;
+ uint8_t state[5];
+ for (int i = 0; i < 5; i++)
+ {
+ // 負論理なのでNOTかけてから点灯状態として取り込み
state[i] = !patlite_state[i];
}
@@ -48,107 +91,37 @@
if (last_state[i] != state[i])
{
changed = 1;
- //sakuraio.enqueueTx(i, state[i]);
status_led = !status_led;
last_state[i] = state[i];
}
}
- __enable_irq();
+
+ return changed;
}
-int main()
+// sakura.ioのRxキューの状態を見て操作命令が来ていないか確認する
+uint8_t dequeue()
{
- for (int i = 0; i < 5; i++)
+ uint8_t avail = 0, queued = 0, changed = 0;
+ sakuraio.getRxQueueLength(&avail, &queued);
+ for (uint8_t i = 0; i < queued; i++)
{
- patlite_state[i].mode(PullUp);
- }
-
- // Waiting to come online
- int a = 0;
- for (;;)
- {
- status_led = 1;
- patlite_out[a] = 1;
+ uint8_t channel, type, values[8];
+ int64_t offset;
- if ((sakuraio.getConnectionStatus() & 0x80) == 0x80)
- break;
- wait_ms(500);
- status_led = 0;
- patlite_out[a] = 0;
- a++;
- if (a == 5)
- a = 0;
- wait_ms(500);
- }
- status_led = 1;
- for (int i = 0; i < 5; i++)
- patlite_out[i] = 1;
-
- wait(1);
- status_led = 0;
- for (int i = 0; i < 5; i++)
- patlite_out[i] = 0;
-
- // tick.attach_us(&timer, 100 * 1000); // 100ms
-
- while (1)
- {
- timer();
-
- uint8_t avail = 0;
- uint8_t queued = 0;
-
- __disable_irq();
- sakuraio.getRxQueueLength(&avail, &queued);
- for (uint8_t i = 0; i < queued; i++)
+ // RXキューから点灯要求を取り出す
+ uint8_t ret = sakuraio.dequeueRx(&channel, &type, values, &offset);
+ if (ret == 0x01)
{
- uint8_t channel;
- uint8_t type;
- uint8_t values[8];
- int64_t offset;
-
- // RXキューから点灯要求を取り出す
- uint8_t ret = sakuraio.dequeueRx(&channel, &type, values, &offset);
- if (ret == 0x01)
+ if (channel < 5)
{
- if (channel >= 0 && channel < 5)
- {
- if (*((int32_t *)values) == 0)
- patlite_out[channel] = 0;
- else
- patlite_out[channel] = 1;
- }
- changed = 1;
+ if (*((int32_t *)values) == 0)
+ patlite_out[channel] = 0;
+ else
+ patlite_out[channel] = 1;
}
+ changed = 1;
}
-
- avail = 0;
- queued = 0;
- sakuraio.getTxQueueLength(&avail, &queued);
- if (changed == 1)
- {
- uint8_t state[5];
- for (int i = 0; i < 5; i++)
- {
- state[i] = !patlite_state[i];
- }
-
- for (int i = 0; i < 5; i++)
- {
- sakuraio.enqueueTx(i, state[i]);
- }
- sakuraio.send();
- changed = 0;
- }
- __enable_irq();
-
- /*
- sakuraio.clearTx();
- sakuraio.enqueueTx(0, counter);
- sakuraio.enqueueTx(1, iine_count);
- sakuraio.send();
- */
-
-// wait_ms(10);
}
+ return changed;
}
--- a/mbed.bld Wed Aug 09 06:21:04 2017 +0000 +++ b/mbed.bld Fri Dec 22 05:52:01 2017 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/856d2700e60b \ No newline at end of file +http://mbed.org/users/mbed_official/code/mbed/builds/e7ca05fa8600 \ No newline at end of file