Водяная пушка

Пример Кода №1 Мигание светодиодом

void setup()
    {
      pinMode(13, OUTPUT);
    }
     
    void loop()
    {
      // подаём на пин 13 «высокий сигнал» (англ. «high»), т.е.
      // выдаём 5 вольт. Через светодиод побежит ток.
      // Это заставит его светиться
      digitalWrite(13, HIGH);
     
      // задерживаем (англ. «delay») микроконтроллер в этом
      // состоянии на 100 миллисекунд
      delay(100);
     
      // подаём на пин 13 «низкий сигнал» (англ. «low»), т.е.
      // выдаём 0 вольт или, точнее, приравниваем пин 13 к земле.
      // В результате светодиод погаснет
      digitalWrite(13, LOW);
     
      // замираем в этом состоянии на 900 миллисекунд
      delay(900);
     
      // после «размораживания» loop сразу же начнёт исполняться
      // вновь, и со стороны это будет выглядеть так, будто
      // светодиод мигает раз в 100 мс + 900 мс = 1000 мс = 1 сек
    }

Пример Кода №2 Кнопочный переключатель


    #define BUTTON_PIN  3
    #define LED_PIN     13
     
    boolean buttonWasUp = true;  // была ли кнопка отпущена?
    boolean ledEnabled = false;  // включен ли свет?
     
    void setup()
    {
      pinMode(LED_PIN, OUTPUT);
      pinMode(BUTTON_PIN, INPUT_PULLUP);
    }
     
    void loop()
    {
      // определить момент «клика» несколько сложнее, чем факт того,
      // что кнопка сейчас просто нажата. Для определения клика мы
      // сначала понимаем, отпущена ли кнопка прямо сейчас...
      boolean buttonIsUp = digitalRead(BUTTON_PIN);
     
      // ...если «кнопка была отпущена и (&&) не отпущена сейчас»...
      if (buttonWasUp && !buttonIsUp) {
        // ...может это «клик», а может и ложный сигнал (дребезг),
        // возникающий в момент замыкания/размыкания пластин кнопки,
        // поэтому даём кнопке полностью «успокоиться»...
        delay(10);
        // ...и считываем сигнал снова
        buttonIsUp = digitalRead(BUTTON_PIN);
        if (!buttonIsUp) {  // если она всё ещё нажата...
          // ...это клик! Переворачиваем сигнал светодиода
          ledEnabled = !ledEnabled;
          digitalWrite(LED_PIN, ledEnabled);
        }
      }
     
      // запоминаем последнее состояние кнопки для новой итерации
      buttonWasUp = buttonIsUp;
    }

Пример Кода №3 Управление сервоприводом

    // управлять сервоприводами (англ. servo motor) самостоятельно
    // не так то просто, но в стандартной библиотеке уже всё
    // заготовлено, что делает задачу тривиальной
    #include <Servo.h>;
     
    #define POT_MAX_ANGLE 270.0 // макс. угол поворота потенциометра
     
    // объявляем объект типа Servo с именем myServo. Ранее мы
    // использовали int, boolean, float, а теперь точно также
    // используем тип Servo, предоставляемый библиотекой. В случае
    // Serial мы использовали объект сразу же: он уже был создан
    // для нас, но в случае с Servo, мы должны сделать это явно.
    // Ведь в нашем проекте могут быть одновременно несколько
    // приводов, и нам понадобится различать их по именам
    Servo myServo;
     
    void setup()
    {
      // прикрепляем (англ. attach) нашу серву к 9-му пину. Явный
      // вызов pinMode не нужен: функция attach сделает всё за нас
      myServo.attach(9);
    }
     
    void loop()
    {
      int val = analogRead(A0);
      // на основе сигнала понимаем реальный угол поворота движка.
      // Используем вещественные числа в расчётах, но полученный
      // результат округляем обратно до целого числа
      int angle = int(val / 1024.0 * POT_MAX_ANGLE);
      // обычная серва не сможет повторить угол потенциометра на
      // всём диапазоне углов. Она умеет вставать в углы от 0° до
      // 180°. Ограничиваем угол соответствующе
      angle = constrain(angle, 0, 180);
      // и, наконец, подаём серве команду встать в указанный угол
      myServo.write(angle);
    }

[ads-pc-3]


Пример Кода №4 Генератор случайных чисел

long randNumber;
 
void setup(){
  Serial.begin(9600);
 
  // если порт 0 неподключен, то генератор псевдослучайных чисел
  // будет инициализироваться функцией randomSeed() со случайного
  // значения при каждом запуске программы из-за "шума" на порту
  randomSeed(analogRead(0));
}
 
void loop() {
  // выводим случайное число из диапазона 0..299
  randNumber = random(300);
  Serial.println(randNumber); 
 
  // выводим случайное число из диапазона 10..19
  randNumber = random(10, 20);
  Serial.println(randNumber);
 
  delay(50);
}

Пример Кода №5 Переключатель светодиода с сервоприводом

#include <Servo.h>;

#define BUTTON_PIN  3
#define Pump_PIN     13
#define POT_MAX_ANGLE 270.0

boolean buttonWasUp = true;
boolean pumpEnabled = false;

Servo myServo;


void setup()
{
  pinMode(Pump_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);

  myServo.attach(9);
}

void loop()
{
  boolean buttonIsUp = digitalRead(BUTTON_PIN);

  if (buttonWasUp && !buttonIsUp)
  {
    delay(10);
    buttonIsUp = digitalRead(BUTTON_PIN);

    if (!buttonIsUp)
    {
      pumpEnabled = !pumpEnabled;
      digitalWrite(Pump_PIN, pumpEnabled);
    }
  }

  buttonWasUp = buttonIsUp;


  int val = analogRead(A0);
  int angle = int(val / 1024.0 * POT_MAX_ANGLE);
  angle = constrain(angle, 0, 180);
  myServo.write(angle);
  
}

[ads-pc-4]


Пример Кода №6 Водяная пушка с наведением по датчику света

#include <Servo.h>;

#define BUTTON_PIN  3
#define Pump_PIN     11
#define LED_PIN     6
#define POT_MAX_ANGLE 270.0

boolean buttonWasUp = true;
boolean pumpEnabled = false;
boolean ledEnabled = false;

Servo myServo;

void setup()
{
  pinMode(LED_PIN, OUTPUT);
  pinMode(Pump_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  myServo.attach(9);
}

void loop()
{
  boolean buttonIsUp = digitalRead(BUTTON_PIN);

  if (buttonWasUp && !buttonIsUp)
  {
    delay(10);
    buttonIsUp = digitalRead(BUTTON_PIN);

    if (!buttonIsUp)
    {
      pumpEnabled = !pumpEnabled;
      digitalWrite(Pump_PIN, pumpEnabled);
      ledEnabled = !ledEnabled;
      digitalWrite(LED_PIN, ledEnabled);
    }
  }

  buttonWasUp = buttonIsUp;

  int val = analogRead(A0);
  int angle = int(val / 1024.0 * POT_MAX_ANGLE);
  angle = constrain(angle, 0, 180);
  myServo.write(angle);

}

[ads-pc-5]


Пример Кода №7 Водяная пушка с наведением случайным образом

#include <Servo.h>;

#define BUTTON_PIN  3
#define Pump_PIN     11
#define LED_PIN     6
#define POT_MAX_ANGLE 270.0

long randNumber;
boolean buttonWasUp = true;
boolean pumpEnabled = false;
boolean ledEnabled = false;

Servo myServo;

void setup()
{
  Serial.begin(9600);
  pinMode(LED_PIN, OUTPUT);
  pinMode(Pump_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  myServo.attach(9);
  randomSeed(analogRead(A0));
}

void loop()
{
  randNumber = random(10, 150);
  Serial.println(randNumber);

  myServo.write(randNumber);

  delay(50);
  boolean buttonIsUp = digitalRead(BUTTON_PIN);

  if (buttonWasUp && !buttonIsUp)
  {
    delay(10);
    buttonIsUp = digitalRead(BUTTON_PIN);

    if (!buttonIsUp)
    {
      pumpEnabled = !pumpEnabled;
      digitalWrite(Pump_PIN, pumpEnabled);
      Serial.println("Pump_PIN, pumpEnabled");
      
      ledEnabled = !ledEnabled;
      digitalWrite(LED_PIN, ledEnabled);
      Serial.println("LED_PIN, ledEnabled");
    }
  }
  buttonWasUp = buttonIsUp;
}</pre></div>
<!-- /wp:codemirror-blocks/code-block -->

<!-- wp:separator {"className":"is-style-wide"} -->
<hr class="wp-block-separator is-style-wide"/>
<!-- /wp:separator -->

[ads-pc-6]


Добавить комментарий