Con esto es lo ultimo que estaba,no se si bien,mal,o peor. Seguramente desordenado.
El servo a Pin 7
Motores a 8,9,10 y 11 (In1,2,3,4)
trig al 12 y echo al 13
#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>
#include <Servo.h>
double angle_rad = PI / 180.0;
double angle_deg = 180.0 / PI;
float getDistance(int trig, int echo) {
pinMode(trig, OUTPUT);
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
pinMode(echo, INPUT);
return pulseIn(echo, HIGH, 30000) / 58.0;
}
Servo servo_7;
//#include <Servo.h>
int Left_motor = 8;
int Left_motor_pwm = 9;
int Right_motor_pwm = 10;
int Right_motor = 11;
int key = A2;
int beep = A3;
int LED = 7;
const int SensorRight = 3;
const int SensorLeft = 4;
const int SensorRight_2 = 5;
const int SensorLeft_2 = 6;
int SR_2;
int SL_2;
int SL;
int SR;
void setup()
{
servo_7.attach(7); // init pin
pinMode(13, INPUT);
pinMode(7, OUTPUT);
}
pinMode(Left_motor, OUTPUT); // PIN 8 pwm
pinMode(Left_motor_pwm, OUTPUT); // PIN 9 pwm
pinMode(Right_motor_pwm, OUTPUT); // PIN 10 pwm
pinMode(Right_motor, OUTPUT); // PIN 11 pwm
pinMode(LED, OUTPUT); // PIN 7 LEd
pinMode(key, INPUT);
pinMode(beep, OUTPUT);
pinMode(SensorRight, INPUT);
pinMode(SensorLeft, INPUT);
pinMode(SensorLeft_2, INPUT);
pinMode(SensorRight_2, INPUT);
Serial.begin(9600);
//Marcha
void run()
{
digitalWrite(Right_motor, LOW);
digitalWrite(Right_motor_pwm, HIGH);
analogWrite(Right_motor_pwm, 255); //0-255
digitalWrite(Left_motor, LOW);
digitalWrite(Left_motor_pwm, HIGH);
analogWrite(Left_motor_pwm, 255);//0-255
//delay(time * 100);
}
//void parada
void brake()
{
digitalWrite(Right_motor_pwm, LOW);
analogWrite(Right_motor_pwm, 0); // velocidad motor 0 parado derecho
digitalWrite(Left_motor_pwm, LOW);
analogWrite(Left_motor_pwm, 0); //vekolidad motor 0 motor parado izquierdo
//delay(time * 100);
}
//void left(int time)
void left()
{
digitalWrite(Right_motor, LOW);
digitalWrite(Right_motor_pwm, HIGH);
analogWrite(Right_motor_pwm, 150); //media velocidad motor derecho
digitalWrite(Left_motor, LOW);
digitalWrite(Left_motor_pwm, LOW);
analogWrite(Left_motor_pwm, 0); //para motor izq.
//delay(time * 100);
}
void spin_left()
{
digitalWrite(Right_motor, LOW);
digitalWrite(Right_motor_pwm, HIGH);
analogWrite(Right_motor_pwm, 150);
digitalWrite(Left_motor, HIGH);
digitalWrite(Left_motor_pwm, HIGH);
analogWrite(Left_motor_pwm, 150);
//delay(time * 100);
}
void right()
{
digitalWrite(Right_motor, LOW);
digitalWrite(Right_motor_pwm, LOW);
analogWrite(Right_motor_pwm, 0);
digitalWrite(Left_motor, LOW);
digitalWrite(Left_motor_pwm, HIGH);
analogWrite(Left_motor_pwm, 150);
//delay(time * 100);
}
void spin_right()
{
digitalWrite(Right_motor, HIGH);
digitalWrite(Right_motor_pwm, HIGH);
analogWrite(Right_motor_pwm, 150);
digitalWrite(Left_motor, LOW);
digitalWrite(Left_motor_pwm, HIGH);
analogWrite(Left_motor_pwm, 150);
//delay(time * 100);
}
void back()
{
digitalWrite(Right_motor, HIGH);
digitalWrite(Right_motor_pwm, HIGH);
analogWrite(Right_motor_pwm, 150);
digitalWrite(Left_motor, HIGH);
digitalWrite(Left_motor_pwm, HIGH);
analogWrite(Left_motor_pwm, 150);
void keysacn()
{
int val;
val = digitalRead(key);
while (!digitalRead(key))
{
val = digitalRead(key);
}
while (digitalRead(key))
{
delay(10); //10ms
val = digitalRead(key);
if (val == HIGH)
{
digitalWrite(beep, HIGH);
while (!digitalRead(key))
digitalWrite(beep, LOW)
}
else
digitalWrite(beep, LOW);
}
}
void loop()
servo_7.write(getDistance(13, 12)); // servo
_delay(1);
if (digitalRead(13)) {
_delay(2);
}
servo_7.write(getDistance(13, 12)); // servo
_delay(1);
if (digitalRead(13)) {
_delay(2);
}
servo_7.write(getDistance(13, 12)); // servo
_delay(1);
if (digitalRead(9)) {
_delay(2);
}
servo_7.write(getDistance(13, 12)); // sercvo
_delay(1);
if (digitalRead(9)) {
_delay(2);
}
_delay(1);
_loop();
}
void _delay(float seconds) {
long endTime = millis() + seconds * 1000;
while (millis() < endTime)_loop();
}
{
keysacn();
while (1)
{
//LOW bajo HIGHT alto
SR = digitalRead(SensorRight);
SL = digitalRead(SensorLeft);
SR_2 = digitalRead(SensorRight_2);
SL_2 = digitalRead(SensorLeft_2);
if ( SL_2 == LOW || SR_2 == LOW )
{
brake();
digitalWrite(beep, HIGH);
digitalWrite(LED, HIGH);
}
else
{
digitalWrite(beep, LOW);
digitalWrite(LED, LOW);
if (SL == LOW && SR == LOW)
run();
else if (SL == HIGH & SR == LOW)
spin_left();
//left();
else if (SR == HIGH & SL == LOW)
spin_right();
//right();
else
brake();
}
}
}