мне нужно сделать кнопку случайным образом, а затем отобразить на 4-сегментном - PullRequest
0 голосов
/ 03 апреля 2020

Это мой основной код, в пустоте l oop я хочу сделать так, чтобы была функция rand, которую активирует кнопка, затем она переходит в секцию sevseg.setNumber для отображения. Я пытаюсь сделать 20-сторонний d ie, поэтому функция ранда будет 1-20. Я не совсем уверен, что делать, могу ли я получить некоторую помощь?

#include "SevSeg.h"
SevSeg sevseg; 


const int  BUTTON = 1;    
int buttonState = 0;          
int lastButtonState = LOW;   

void setup(){
  byte numDigits = 4;
  byte digitPins[] = {10, 11, 12, 13};
  byte segmentPins[] = {9, 2, 3, 5, 6, 8, 7, 4};

  bool resistorsOnSegments = true; 
  bool updateWithDelaysIn = true;
  byte hardwareConfig = COMMON_ANODE; 
  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, 
resistorsOnSegments);
  sevseg.setBrightness(150);

  pinMode(BUTTON, OUTPUT);
  Serial.begin(9600);
  lastButtonState = LOW;
}

void loop(){
  sevseg.setNumber();
  sevseg.refreshDisplay();
  if (digitalRead (BUTTON) == HIGH)
  {
    rand() % 20 + 1;
  }
}

Я изменил buttonPin на BUTTON, теперь мне нужно выяснить, как поместить значение rand в круглые скобки sevseg.setNumber.

1 Ответ

1 голос
/ 03 апреля 2020

Измените свой main-l oop следующим образом:

void loop(){

  if (digitalRead (BUTTON) == HIGH)
  {
    if (!high) {//<-- make sure it only changes the value the first time
      sevseg.setNumber(rand() % 20 + 1);
      sevseg.refreshDisplay();
      high = true
    }
  }
  else {
    high = false;//<-- reset high to false when the button isn't pressed anymore
  } 
}

Не забудьте объявить bool high = false; в вашем разделе определения.

...