teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

コメントを受け、コード案を追記

2017/07/01 09:01

投稿

Bongo
Bongo

スコア10816

answer CHANGED
@@ -4,4 +4,83 @@
4
4
  - drawの中で、didReadがtrueなら何もせずreturn。
5
5
  - アナログ値を読み、990を超えていればおみくじ表示するとともにdidReadをtrueにする。
6
6
 
7
- これで初回おみくじ表示以降はdrawが何もしないようになるのではないでしょうか。
7
+ これで初回おみくじ表示以降はdrawが何もしないようになるのではないでしょうか。
8
+
9
+ [コメントを受けて追記]
10
+ 私の案だと、omikuji.jpgはsetupで描いて、文字列だけdrawで描く...というのを想定していました。
11
+ 一例としてこんな感じのものはどうでしょう?
12
+
13
+ ```Java
14
+ /*
15
+ * Arduino - Processingシリアル通信
16
+ * Firmataを使用したサンプル
17
+ * Processing側
18
+ */
19
+
20
+ boolean didRead = false;
21
+ PImage img;
22
+
23
+ import processing.serial.*;
24
+ import cc.arduino.*;
25
+ Arduino arduino;
26
+ int input0 = 0;
27
+
28
+ void setup() {
29
+ size(500, 800);
30
+ noStroke();
31
+ arduino = new Arduino(this, Arduino.list()[1], 57600);
32
+ img = loadImage("omikuji.jpg");
33
+ image(img, 0, 0); // 画像だけここで描くようにしました
34
+ }
35
+
36
+ void draw() {
37
+ // image(img, 0, 0); // draw内では画像の再描画をしないようにしました
38
+
39
+ /*
40
+ if (didRead == false) {
41
+ return;
42
+ }
43
+ */
44
+ if (didRead) {
45
+ return; // didReadがfalseの時...ではなく、trueの時に何もしないことを想定していました
46
+ }
47
+
48
+ int analog0 = arduino.analogRead(input0);
49
+ if (analog0 > 990) {
50
+ didRead = true;
51
+ // int r = (int)random(0, 3); // randomの上限値はその値を含まないので(この記述では0以上3未満となり、末吉が出ないと予想されたので)上限値を4にしてみました
52
+ int r = (int)random(4);
53
+ switch(r) { // switchを使ってみましたが、ifでもいいと思います
54
+ case 0:
55
+ text("中吉", 30, 20, 30, 350);
56
+ break;
57
+ case 1:
58
+ text("大吉", 30, 20, 30, 350);
59
+ break;
60
+ case 2:
61
+ text("小吉", 30, 20, 30, 350);
62
+ break;
63
+ case 3:
64
+ text("末吉", 30, 20, 30, 350);
65
+ break;
66
+ }
67
+ }
68
+
69
+ // この位置におみくじ表示ロジックがあると、analog0が990以下でもおみくじ表示が行われてしまうはずなので、上に移しました
70
+ /*
71
+ int r = (int)random(0, 3);
72
+ if (r == 0 && didRead == true) {
73
+ text("中吉", 30, 20, 30, 350);
74
+ }
75
+ if (r == 1 && didRead == true) {
76
+ text("大吉", 30, 20, 30, 350);
77
+ }
78
+ if (r == 2 && didRead == true) {
79
+ text("小吉", 30, 20, 30, 350);
80
+ }
81
+ if (r == 3 && didRead == true) {
82
+ text("末吉", 30, 20, 30, 350);
83
+ }
84
+ */
85
+ }
86
+ ```

1

機能の名称を修正(「インスタンス変数」を「グローバル変数」に)

2017/07/01 09:01

投稿

Bongo
Bongo

スコア10816

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  こんな方針だとどうでしょう?
2
- - boolean型のインスタンス変数を追加する(名前は仮にdidReadとする)。
2
+ - boolean型のグローバル変数を追加する(名前は仮にdidReadとする)。
3
3
  - おみくじ表示はdrawで行う。
4
4
  - drawの中で、didReadがtrueなら何もせずreturn。
5
5
  - アナログ値を読み、990を超えていればおみくじ表示するとともにdidReadをtrueにする。