Volba režimu pomocí potenciometru s displejem

Funkce:

Budeme simulovat volbu programu pomocí potenciometru. Budeme mít 10 režimů, které budeme volit otáčením potenciometru. Číslo programu bude zobrazeno na displeji. Jakmile narazíme na krajní program (0 nebo 9), tak svítí LED a zároveň pípne bzučák.

Potřebné znalosti: ovládání LED, čtení analogové hodnoty z potenciometru, ovládání bzučáku

Programové znalosti: proměnné, pole, funkce

 

Schéma:

https://www.tinkercad.com/things/c9GrZJ1e49I-mcs-volba-rezimu

Kód:

int PotPin = 0;
int LedPin = 9;
int BuzzerPin = 10;

int lastNum = 0;

int disCombination [10][7]= {
  {1,1,1,1,1,1,0},
  {0,1,1,0,0,0,0},
  {1,1,0,1,1,0,1},
  {1,1,1,1,0,0,1},
  {0,1,1,0,0,1,1},
  {1,0,1,1,0,1,1},
  {1,0,1,1,1,1,1},
  {1,1,1,0,0,0,0},
  {1,1,1,1,1,1,1},
  {1,1,1,0,0,1,1}
};



void beep(float time, int freq){
  unsigned long duration = time * 1000; // doba trvani v ms
  unsigned long end_time = millis() + duration; // konecny cas

  while (millis() < end_time) {
    digitalWrite(BuzzerPin, HIGH);
    delayMicroseconds(500000/freq);  // 1s deleno polovina frekvence
    digitalWrite(BuzzerPin, LOW);
    delayMicroseconds(500000/freq);  // 1s deleno polovina frekvence
  }
}



void setup() {
  pinMode(PotPin, INPUT); // nastaveni pinu pro potenciometr na vstup
  pinMode(LedPin, OUTPUT); // nastaveni pinu pro LED na vystup
  pinMode(BuzzerPin, OUTPUT); // nastaveni pinu pro bzucaku na vystup

  for(int i = 2; i < 9; i++){ // nastaveni vsech pinu pro displej na vystup
    pinMode(i, OUTPUT);
  }
}

void loop() {
  int value = analogRead(PotPin);
  int num = value/103;

  for(int i = 2; i < 9; i++){ // nastaveni vsech pinu pro displej na vystup
    digitalWrite(i, disCombination[num][i-2]);
  }

  if((num == 0) || (num == 9))digitalWrite(LedPin, HIGH);
  else digitalWrite(LedPin,LOW);

  if(((lastNum != 0) && (num == 0))||((lastNum != 9) && (num == 9))) beep(0.5, 6000);

  delay(50);
  lastNum = num;
}