Как создать таймер для машинки на Ардуино?

Jane
Offline
Зарегистрирован: 11.06.2022

Здравствуйте, собрала машинку на ардуино, которая обходит препятствия и необходимо сделать так, чтобы машинка работала 2 минуты, а потом останавливалась. Подскажите пожалуйста, как это можно реализовать

 

#include <Servo.h>          
#include <NewPing.h>        

//our L298N control pins
const int LeftMotorForward = 7;
const int LeftMotorBackward = 6;
const int RightMotorForward = 5;
const int RightMotorBackward = 4;

//sensor pins
#define trig_pin A1 //analog input 1
#define echo_pin A2 //analog input 2

#define maximum_distance 100
boolean goesForward = false;
int distance = 300; // stop dist

NewPing sonar(trig_pin, echo_pin, maximum_distance);
Servo servo_motor; //our servo name


void setup(){

  pinMode(RightMotorForward, OUTPUT);
  pinMode(LeftMotorForward, OUTPUT);
  pinMode(LeftMotorBackward, OUTPUT);
  pinMode(RightMotorBackward, OUTPUT);
  
  servo_motor.attach(10); //our servo pin

  servo_motor.write(115);
  delay(2000);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
}

void loop(){

  int distanceRight = 0;
  int distanceLeft = 0;
  delay(50);

  if (distance <= 35){ // rev distance
    moveStop();
    delay(300);
    moveBackward();
    delay(400);
    moveStop();
    delay(300);
    distanceRight = lookRight();
    delay(300);
    distanceLeft = lookLeft();
    delay(300);

    if (distance >= distanceLeft){
      turnRight();
      moveStop();
    }
    else{
      turnLeft();
      moveStop();
    }
  }
  else{
    moveForward(); 
  }
    distance = readPing();
}

int lookRight(){  
  servo_motor.write(50);
  delay(500);
  int distance = readPing();
  delay(100);
  servo_motor.write(115);
  return distance;
}

int lookLeft(){
  servo_motor.write(170);
  delay(500);
  int distance = readPing();
  delay(100);
  servo_motor.write(115);
  return distance;
  delay(100);
}

int readPing(){
  delay(70);
  int cm = sonar.ping_cm();
  if (cm==0){
    cm=250;
  }
  return cm;
}

void moveStop(){
  
  digitalWrite(RightMotorForward, LOW);
  digitalWrite(LeftMotorForward, LOW);
  digitalWrite(RightMotorBackward, LOW);
  digitalWrite(LeftMotorBackward, LOW);
}

void moveForward(){

  if(!goesForward){

    goesForward=true;
    
    digitalWrite(LeftMotorForward, HIGH);
    digitalWrite(RightMotorForward, HIGH);
  
    digitalWrite(LeftMotorBackward, LOW);
    digitalWrite(RightMotorBackward, LOW); 
  }
}

void moveBackward(){

  goesForward=false;

  digitalWrite(LeftMotorBackward, HIGH);
  digitalWrite(RightMotorBackward, HIGH);
  
  digitalWrite(LeftMotorForward, LOW);
  digitalWrite(RightMotorForward, LOW);
  
}

void turnRight(){

  digitalWrite(LeftMotorForward, HIGH);
  digitalWrite(RightMotorBackward, HIGH);
  
  digitalWrite(LeftMotorBackward, LOW);
  digitalWrite(RightMotorForward, LOW);
  
  delay(250);
  
  digitalWrite(LeftMotorForward, HIGH);
  digitalWrite(RightMotorForward, HIGH);
  
  digitalWrite(LeftMotorBackward, LOW);
  digitalWrite(RightMotorBackward, LOW);

  
  
}

void turnLeft(){

  digitalWrite(LeftMotorBackward, HIGH);
  digitalWrite(RightMotorForward, HIGH);
  
  digitalWrite(LeftMotorForward, LOW);
  digitalWrite(RightMotorBackward, LOW);

  delay(250);
  
  digitalWrite(LeftMotorForward, HIGH);
  digitalWrite(RightMotorForward, HIGH);
  
  digitalWrite(LeftMotorBackward, LOW);
  digitalWrite(RightMotorBackward, LOW);
}

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

к примеру на millis()
if(millis() - old_millis >= 120000) moveStop();

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Не получилось что ли?

NikShel
Offline
Зарегистрирован: 21.01.2018

Я бы добавил управление от ИК-пульта. Запрограммировал бы кнопки: Старт, Стоп, Пауза и др.

b707
Offline
Зарегистрирован: 26.05.2017

ua6em пишет:

Не получилось что ли?


выходные, все на даче. Во вторник вернется...

Jane
Offline
Зарегистрирован: 11.06.2022

попробовала, все получилось!

Спасибо большое!

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

NikShel пишет:
Я бы добавил управление от ИК-пульта. Запрограммировал бы кнопки: Старт, Стоп, Пауза и др.

у меня такое было, потом всё разломал и переделал на радиоуправление от такого девайса, внучке больше понравилось )))

 


 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Jane пишет:

попробовала, все получилось!

Спасибо большое!

...она вернулась...обед уж, после обеда шутить с дамами можно )))