Бои на пальцах

А ты боролся с друзьями во дворе на больших пальцах? Теперь ты можешь не бояться вывихов. Ведь сегодня ты узнаешь как можно совместить эту веселую игру с контроллером DaVinchi!

Для этого тебе понадобится:

  • контроллер DaVinchi - 1шт

  • шилд QuatroPort A050 - 1шт

  • Quatro-модуль с кнопкой - 2шт

  • Quatro-модуль со светодиодом- 2шт

  • кабель XH-2.54-4P для подключения к QuatroPort A050  - 4 шт

  • сервопривод (например Tower Pro SG90)

  • Хорошее настроение!

Теперь соберем схему и напишем программу для нашей веселой игры:

 

#include <Servo.h>  
#define LED_STOP 10
#define LED_READY 9

Servo myservo;
volatile int userOneScore = 0;
volatile int userTwoScore = 0;

void setup(){
  myservo.attach(11, 550, 2150);
  attachInterrupt(0, userOneButtonHandler, FALLING);
  attachInterrupt(2, userTwoButtonHandler, FALLING); 
  Serial.begin(9600);
  pinMode(LED_STOP, OUTPUT);
  pinMode(LED_READY, OUTPUT);
}

void loop(){
  int diff = userOneScore - userTwoScore;
  int absDiff = abs(diff);
  Serial.println(absDiff);
  int absAngle = min(absDiff*10, 90);  
  int angle = diff>0 ? 90-absAngle : 90+absAngle;
  
  if (absDiff > 9) {
    myservo.write(angle);
    digitalWrite(LED_READY, LOW);
    analogWrite(LED_STOP, 255);
    delay(2000);
    digitalWrite(LED_READY, HIGH);
    delay(250);
    digitalWrite(LED_READY, LOW);
    delay(250);
    digitalWrite(LED_READY, HIGH);
    delay(250);
    digitalWrite(LED_READY, LOW);
    delay(250);
    digitalWrite(LED_READY, HIGH);
    userOneScore=0;
    userTwoScore=0;
    myservo.write(90);
  } else {
    myservo.write(angle);
    digitalWrite(LED_STOP, LOW);
    digitalWrite(LED_READY, HIGH);
  }
  
  delay(100);
}

void userOneButtonHandler() {
  Serial.println("#1");
  userOneScore++; 
}

void userTwoButtonHandler() {
  Serial.println("#2");
  userTwoScore++; 
}

Игра готова! Теперь можешь устроить веселый турнир со своими друзьями.

Удачи и развивайся с нами!