Функция if-else управляет условным ветвлением.
Блок кода в функции if выполняются только в том случае, когда условие (conditions) принимает ненулевое значение (или true). Если значение condition — нулевое (или false, или NULL), блок кода в if не выполняется, а выполняется блок, следующий за необязательным оператором else. В случае если else отсутствует, выполняется переход к оператору, следующему за телом функции if.
if(conditions){
code block1;
}
else {
code block2;
}
В функции if else блоки кода (тело функции) обрамляются фигурными скобками в том случае, если блок кода состоит более чем из одного оператора (операции или функции).
if(conditions1){
code block1;
}
else if(conditions2){
code block2;
}
else {
code block3;
}
В этом примере показано применение вложенной функции if. Таких вложений может быть несколько.
if с инициализатором.
Начиная с C++17 функция if также может содержать выражение, которое объявляет и инициализирует именованную переменную (init-statement) . Область существования этой переменной в пределах функции if
if(init-statement : conditions){
code block1;
}
else {
code block2;
}
Игра "Red or Blue"
Легенда игры:
Часто, в Голливудских боевиках главный герой, спасая человечество, становятся перед выбором: какой провод резать, красный или синий? Вероятность правильного выбора в этой ситуации 50%. А если потренироваться, мы сможем повысить свои шансы на успех?
Задание на проектирование игры-тренажёра «Красный или синий».
Игра должна быть интерактивной. На принятие решения игроку даётся 60 секунд. За это время игрок должен принять решение какой провод отключить от схемы, красный или синий. Правильный ответ заранее ни кому не известен. Точнее, правильный ответ выбирается случайным образом. Если время истекло — игрок проиграл, если выдернут не тот провод — игрок проиграл. Если игрок отключил провод, выбранный программой как правильный — игрок выиграл.
За обработку логики игры «Красный или синий» будет отвечать микроконтроллер на плате Arduino. Электронная схема для игры «Красный или синий» может содержать зуммер или светодиод и два провода красный и синий, вставленных в гнёзда макетной платы.
Рис. 1.
Функции tone(), noTone()
tone(pin, frequency)
tone(pin, frequency, duration)
noTone(pin)
int pinOut = 3;
void setup() {
tone(pinOut,440);
delay(500);
noTone(pinOut);
}
void loop() {
}
Функции random() и randomSeed()
randomSeed(analogRead(0));
random(start, stop);
int pinOut = 3;
bool redORblue = false;
void setup() {
randomSeed(analogRead(0));
redORblue = random(0, 2);
pinMode(pinOut, OUTPUT);
digitalWrite(pinOut,redORblue);
}
void loop() {
}
Секундные интервалы
int pinOut = 3;
bool redORblue = false;
int timeH = 0;
void setup() {
randomSeed(analogRead(0));
redORblue = random(0, 2);
pinMode(pinOut, OUTPUT);
}
void loop() {
digitalWrite(pinOut,HIGH);
delay(20);
digitalWrite(pinOut,LOW);
delay(980);
timeH++;
}
Время «Ч» — время начала операции, условное обозначение начала действия войск (в речи военных).
int pinOut = 3;
bool redORblue = false;
int timeH = 0;
void setup() {
randomSeed(analogRead(0));
redORblue = random(0, 2);
pinMode(pinOut, OUTPUT);
}
void loop() {
if(timeH < 60){
digitalWrite(pinOut,HIGH);
delay(20);
digitalWrite(pinOut,LOW);
delay(980);
timeH++;
}
else{
digitalWrite(pinOut,HIGH);
delay(10000);
}
}
А теперь со звуком
int pinOut = 3;
bool redORblue = false;
int timeH = 0;
void setup() {
randomSeed(analogRead(0));
redORblue = random(0, 2);
pinMode(pinOut, OUTPUT);
}
void loop() {
if(timeH < 20){
digitalWrite(pinOut,HIGH);
delay(20);
digitalWrite(pinOut,LOW);
delay(980);
timeH++;
}
else{
tone(pinOut,440);
delay(1000);
noTone(pinOut);
digitalWrite(pinOut,HIGH);
delay(1000);
}
}
ап
int pinOut = 3, pinB = 7, pinR = 8;
bool redORblue = false;
int timeH = 0;
// (pinB + redORblue) Провод который надо вытащить
// (pinR - redORblue) Провод который нельзя трогать
void setup() {
randomSeed(analogRead(0));
redORblue = random(0, 2);
pinMode(pinOut, OUTPUT);
pinMode(pinR, INPUT_PULLUP);
pinMode(pinB, INPUT_PULLUP);
}
void loop() {
if(timeH < 60){
digitalWrite(pinOut,HIGH);
delay(20);
digitalWrite(pinOut,LOW);
delay(980);
if(digitalRead(pinR - redORblue) == 1)
timeH = 61;
else if(digitalRead(pinB + redORblue) == 1)
while(true);
else timeH++;
}
else{
tone(pinOut,440);
delay(1000);
noTone(pinOut);
digitalWrite(pinOut,HIGH);
delay(1000);
}
}