syu-kwsk / Sora_skitchen_project

mbedでの開発
0 stars 0 forks source link

POWER SUPPLY #2

Open syu-kwsk opened 5 years ago

syu-kwsk commented 5 years ago

isuueの書き方がわかりません!!

今困っていること

電源スイッチを作りたくて、スイッチONはできましたが、OFFにしたときにプログラムが強制終了するようにしたいです。今は強制終了できずに(k = 1)の行動を続けてしまいます。

tanacchi commented 5 years ago

ちゃんと issue 書けてまっせ

トグルスイッチを使うのかな? 具体的にどのへんを指してるのか コード見てもわかんなかったので コードをコピってこの下に貼り付けてもらっていいですか?

強制終了の実装で考えられるのが、 DigitalOut 系に全部 0 を代入して 最後に exit(0); を書くと終了したっぽくできるよ

syu-kwsk commented 5 years ago

コードはdangerous_time.cpp です

<該当部分> DigitalIn mysw1(p10);

int main(void){ while(true){ static int k = 0; int pow;   if (mysw1 == 1){ if (pow == 0){ pow = 1; k++;  }   else if (pow == 1){ pow = 0; k = 0;
  } }  ⇓ここからはk = 1の操作を行っていきwhileの終わりに行きます。

やりたかったことは、トグルスイッチではなくてタクトスイッチを押す度にpowの値とkの値をかえて、一回押すとON(pow → 1 && k → 0)、もう一度押すとOFF(pow → 0 && k → 0)にすることです。

syu-kwsk commented 5 years ago

解決しました

プログラムのどこの処理が行われているのかわかりやすくするために、処理の度にLEDを光らせてみると、powの値が思ったとおりに処理されていないことがわかり、powを消して、(k!= 0) としてみるとうまくいきました。以下、修正後のコード *light(); は引数のLEDが一秒間光る関数*

void exit(){ t.reset(); led[1] = 0; led[2] = 0; led[3] = 0; led[4] = 0; a[0] = 0; a[1] = 0; a[2] = 0; a[3] = 0; a[4] = 0; a[5] = 0; a[6] = 0; a[7] = 0; a[8] = 0; a[9] = 0;
}

int main(void){ while(true){ static int k = 0; if (mysw1 == 1){ light(1); if (k == 0){ light(2); k++; } else if (k != 0){ k = 0; light(3); exit();
} }

tanacchi commented 5 years ago

対応が遅れて申し訳ない。 LED 光らせてデバッグとはなかなかの好手ですな

MarkDown のちょいテク

Issue とかでコードを埋め込むときは 言語に応じてシンタックスハイライトを付けられることを思い出してくださいb

C言語を埋め込むときは 下のようにするといいですヨ

```C

include

int main() { printf("Hello, World"); return } ``` ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

#include <stdio.h>

int main()
{
  printf("Hello, World");
  return
}
tanacchi commented 5 years ago

コートレビュー

関数内に

void pi_sound(){
#define PI 1.0/960.000 
#define WRITE 0.5
#define WAIT_SIREN 0.65    
...

みたいに #define 書いてたけど、こう書いたからって WAIT_SIREN とかの有効範囲(スコープ)が関数内のみになるわけではありません この時のスコープは #define された箇所より下の部分になります。

スコープを関数内にしたいのであれば

void pi_sound(){
const double PI = 1.0/960.000;
const double WRITE = 0.5;
const double WAIT_SIREN = 0.65;
...

とした方が自然かな。 const をつけることで定数を定義できます。 #define#include の次くらいに書くのが普通です。