Skocz do zawartości

Jak sprawić aby robot jechał po łuku, gdy wcisnę dwa przyciski na pilocie ir.


Pomocna odpowiedź

Napisano
#include <SevSeg.h>
#include <RC5.h>
#include <Servo.h>
Servo serwo;

#define L_PWM 5
#define L_DIR 4
#define R_PWM 6
#define R_DIR 9
#define led 13
#define przycisk 2
#define PWM_MAX 165
#define buzzer 10
#define lSensor A1
#define rSensor A0
#define granica 830
#define tsopPin 3
#define serwoPin 11

bool jedzie = false;
byte address;
byte command;
byte toggle;
byte togglePoprzedni;
unsigned long czasPoprzedni;
const int czasZatrzymania = 115;

RC5 rc5(tsopPin);


void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  serwo.attach(serwoPin);
  pinMode(L_DIR, OUTPUT);
  pinMode(L_PWM, OUTPUT);
  pinMode(R_DIR, OUTPUT);
  pinMode(R_PWM, OUTPUT);
  pinMode(przycisk, INPUT_PULLUP);
  pinMode(buzzer, OUTPUT);

  pinMode(lSensor, INPUT_PULLUP);
  pinMode(rSensor, INPUT_PULLUP);
}

void loop() {
  // put  your main code here, to run repeatedly:
  if (rc5.read(&toggle, &address, &command)){
    czasPoprzedni = millis();

    switch(command){
      case 2:
        
        rightMotor(80);
        leftMotor(80);
        
        break;
      case 8:
        
        rightMotor(-80);
        leftMotor(-80);
        
        break;
      case 4:
        
        rightMotor(40);
        leftMotor(-40);
        
        break;
      case 6:
        
        rightMotor(-40);
        leftMotor(40);
        
        break;
      case 1:
        
        rightMotor(80);
        leftMotor(60);
        
        break;
      case 3:
        
        rightMotor(60);
        leftMotor(80);
        
        break;  
      case 9:
        
        rightMotor(-60);
        leftMotor(-80);
        
        break;
      case 7:
        
        rightMotor(-80);
        leftMotor(-60);
        
        break;
      case 0:
      serwo.write(90);
        break;
      case 34:
      serwo.write(20);
      break;
      case 15:
      serwo.write(160);
      break;
      case 80:
          rightMotor(80);
          leftMotor(80);
          break;
      case 81:
          rightMotor(-80);
          leftMotor(-80);
          break;
      case 85:
          rightMotor(40);
          leftMotor(-40);
          break;
      case 86:
          rightMotor(-40);
          leftMotor(40);
          break;  
      case 87:
          digitalWrite(buzzer,1);
          delay(500);
          digitalWrite(buzzer,0);
          break;
    }
    

  }
  if (millis() - czasPoprzedni > czasZatrzymania){
      stopMotors();
    }

}
  void leftMotor(int V){
  if(V > 0){
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(L_DIR, 1);
    analogWrite(L_PWM, V);
  }
  else{
    V = abs(V); 
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(L_DIR, 0);
    analogWrite(L_PWM, V);
  }
}

void rightMotor(int V){
  if(V > 0){
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(R_DIR, 1);
    analogWrite(R_PWM, V);
  }
  else{
    V = abs(V); 
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(R_DIR, 0);
    analogWrite(R_PWM, V);
  }
}

void stopMotors(){
  analogWrite(L_PWM, 0);
  analogWrite(R_PWM, 0);
}

boolean rightSensor(){
  if (analogRead(rSensor) > granica){
    return 1;
  }
  else {
    return 0;
  }
}
boolean leftSensor(){
  if (analogRead(lSensor) > granica){
    return 1;
  }
  else {
    return 0;
  }
}

Jak sprawić aby robot po wcisnięciu przycisku nr. 80 (do przodu) i 86 (obrót w prawo) na raz, zaczął skręcać w prawo po łuku. Oraz analogicznie po wcisnięciu przycisku 80 i 85 (obrót w lewo) skręcił po łuku w lewo.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...