2017-04-07 13 views
0

私は0.96インチのAdafruit OLEDにLDRの表示を表示しようとしていますが、その結果を得ることに成功しました 今度は、ボタンと私は再びそれを押すと、このループに行く必要があり、それを止める 私はそのためのコードを起草してみました:。。プッシュボタンを使用して機能を開始/停止する

#include <SPI.h> 
#include <Wire.h> 
#include <Adafruit_GFX.h> 
#include <Adafruit_SSD1306.h> 
int sensorPin = A0; // select the input pin for ldr 
int sensorValue = 0; 
boolean state = false; 
int buttonpin; 


#define OLED_RESET 4 // not used/nicht genutzt bei diesem Display 
Adafruit_SSD1306 display(OLED_RESET); 

char inChar; 
String string; 


void setup() { 

    pinMode(13, OUTPUT); 

    buttonpin = 2; //whatever pin your button is plugged into 

    pinMode(buttonpin, INPUT_PULLUP); 
// initialize with the I2C addr 0x3C/mit I2C-Adresse 0x3c initialisieren 
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); 

    Serial.begin(9600); 
    display.display(); 
    delay(2000); 
    display.clearDisplay(); 

    display.setTextColor(INVERSE); 
} 

void loop() 
{ 
    while (state == false) 
    { 
    if (digitalRead(buttonpin) == HIGH) 
    { 
     display.clearDisplay(); 
     sensorValue = analogRead(sensorPin); 
     Serial.println(sensorValue); 
     display.setCursor(30,0); 
     display.setTextSize(1); 
     display.print("LDR Reading:"); 
     display.setCursor(30,10); 
     display.setTextSize(2); 
     display.print(sensorValue); 
     delay(500);   
     display.display(); 
     state = false; 
    } 


    } 
} 

しかし、画面が、私は継続的に押されたプッシュボタンを保つ場合にのみ、結果の表示を開始ボタンを離すと、プログラムは最後に画面に表示された読み取りと同時に停止します。

次のような結果が必要です。

第1プレス:読み取り値の表示を開始します
第2プレス:画面は空白にしてください。 (display.clearDisplay()はその仕事をします)

私はArduinoのスイッチケースの使い方に慣れていません。

答えて

0

トグル状態を追跡するブール値と、前のループからボタンの状態を保持するブール値を維持します。ボタンはループの反復間でローからハイになった場合、ボタンの上に直接トグルに続いトグルブール、

toggle = !togggle 

ベースの表示状態のためのあなたの状態を更新する代わりに。

+0

私はちょうど初心者ですか?私のコードを変更してトグル状態を加えることができればあなたのようなものでしょう。 –

1

Thieは@ shaunussainの答えを詳しく説明します。ここで

は、トグルのexampoleです:

はブール変数を作成します。bool toggle = false;変数の状態が最初に偽です。したがって、画面は空白になります。

次に、このようなことをします。これはただの論理です。

ボタンが

if(buttonPressed()) {

変更トグルの状態を押された場合。 ON/TRUEの場合、OFF/FALSEになります。

toggle = !toggle; 

ここで、ボタンが放されるまで待ちます。そうしないと、コードが少し狂ってしまうことがあります。そして、大括弧を閉じます。

while (buttonPressed()); 
} 

次に、あなたのループでは、あなたはスイッチケースを持っています。私たちは、スイッチのケースをイニシャライズすることから始めます。

switch(toggle) { 

次に、トグルがオンになっているかどうかのケースを設定します。 1が真、0が偽です。

case 1 : 

次にコード本体を記述します。

displayTextOnScreen(); 

toggleがこのケースと一致しているため、スイッチケースを終了します。我々toggleは真実ではないですか(コード内の不具合があったため)、それは何か他のものであれば

break; 

その後、我々は、デフォルトのケースを持っています。デフォルトで

default: 

、私たちは、画面がオフになりたいので、それは上にあると仮定されていない、またはバグがある場合、それはオフになります。次に、switch caseを閉じて終了します。これは、switch caseの中で最後に起こりうるケースがデフォルトであるためです。

display.clearDisplay(); 
} 
1

ありがとうございました。コードは正常に動作しています。更新されたコード:

#include <SPI.h> 
#include <Wire.h> 
#include <Adafruit_GFX.h> 
#include <Adafruit_SSD1306.h> 
int sensorPin = A0; // select the input pin for ldr 
int sensorValue = 0; 
bool toggle = false; 
int buttonpin; 


#define OLED_RESET 4 // not used/nicht genutzt bei diesem Display 
Adafruit_SSD1306 display(OLED_RESET); 

char inChar; 
String string; 


void setup() { 

    pinMode(13, OUTPUT); 

    buttonpin = 2; 
    pinMode(buttonpin, INPUT_PULLUP); 
    // initialize with the I2C addr 0x3C/mit I2C-Adresse 0x3c initialisieren 
    display.begin(SSD1306_SWITCHCAPVCC, 0x3C); 

    Serial.begin(9600); 
    display.display(); 
    delay(2000); 
    display.clearDisplay(); 

    display.setTextColor(INVERSE); 
} 

void loop() 
{ 
    if (digitalRead(buttonpin) == HIGH) 
    { 
     toggle = !toggle; 
     while(digitalRead(buttonpin) == HIGH); 
    } 
     switch(toggle) 
     { 

      case 1: 
      display.clearDisplay(); 
      sensorValue = analogRead(sensorPin); 
      Serial.println(sensorValue); 
      display.setCursor(30,0); 
      display.setTextSize(1); 
      display.print("LDR Reading:"); 
      display.setCursor(30,10); 
      display.setTextSize(2); 
      display.print(sensorValue); 
      delay(500);   

      break; 

      case 0: 
      display.clearDisplay(); 

      break; 
      } 
     display.display(); 



} 
+0

あなたはそのコンセプトを実際に動作させることができてうれしくて、共有するのに便利なサンプルコードはありませんでしたが、コンセプトから実装まで、面白いアイデアをwhileループを使用してボタンまでリリースされました。 – shaunhusain

+0

ケース0は使用しないでください。デフォルトを使用してください。これは、コードにバグがある場合、何も起こらないからです。 –

関連する問題