PuttDuino agujero de putt-putt con arduino (11 / 11 paso)

Paso 11: Revisión de código

quiero ir sobre el código de arduino para mostrar lo mejor de mi proceso de pensamiento alrededor de los sensores y cómo reaccionar tan rápidamente como sea posible. Quería usar interrupciones conectadas a los sensores, pero...

Porque no tengo transistores de la foto que producen señal digital encendido o apagado, era incapaz de usar las interrupciones en el software. Interrupciones me permitiría ejecutar constantemente los limpiaparabrisas y en ningún momento hubo una bola rodando más allá de un par de emisor/detector sensor, algunas medidas podrían tomarse.

Como es utilizan fotodiodos que producen un análogo y no digital señal de encendido/apagado así que tuve que comprobar el estado de los sensores mientras que también envía valores los servos funcionamiento los limpiaparabrisas.

Esto es lo que hice.
Los limpiaparabrisas funcionar constantemente. Hice que la acción de su propia función de
la función se llama "MoveServo" y 3 entradas.
-que servo a mover (generado aleatoriamente)
-Cómo ahora mover el limpiaparabrisas (generado aleatoriamente)
-Cuánto tiempo para hacer una pausa antes de volver a la posición "Inicio"
Dentro de la función, puse el código que comprueba el estado de los sensores entre todo.
El bucle de retardo es pensar donde comprueba más.
Normalmente un retraso sería un comando: delay();
en mi caso hice el sólo un milisegundo de retardo comando y el número de milisegundos del lazo en un retraso de milisegundos para que cada milisegundo me podrian decir el arduino para controlar el estado de los sensores.
Creo que es la más cercana a una interrupción que podría con este tipo de configuración.

El resultado es que el arduino reacciona casi instantáneamente cuando una bola atraviesa un sensor, que es lo que quería.

Esta es la función de MoveServo con algunos comentarios añadido

void MoveServo (int servoNum, largo pos, int pausa)
{
/ / antes que nada leer los sensores
ReadandReport(); / / Esto llama a otra función que lee el estado de los sensores y escribe los valores en serie para la depuración
Si (analogRead(impSensorPin) < 90) {StartMotor();} / esto lee el sensor impulsor y salta a la función StartMotor si la bola es
ReadNailPin(); / esto lee el pin de la pistola de clavos y salta a esa función si la bola es

Si (servoNum > = 50) / / el número aleatorio enviado es entre 1 y 100
{
wiper1.Write(POS); / / decir hasta qué punto el servo #1 para mover
ReadandReport(); / / debug salida
Si (analogRead(impSensorPin) < 90) {StartMotor();} / arriba Compruebe el sensor de impulsor
ReadNailPin(); / / comprobar el sensor de la pistola de clavo
} else { / / obtiene aquí si la elección del limpiador al azar fue menos de 50 así que mueva el servo #2 y compruebe los sensores
wiper2.Write(POS);
ReadandReport();
Si (analogRead(impSensorPin) < 90) {StartMotor();}
ReadNailPin();
}

Este es el bucle que comprueba los sensores cada milisegundo
para (i = 0; i / / esta pausa es esperar para el servo mover y para hacer una pausa al final antes de regresar a "casa"
{
ReadandReport();
Si (analogRead(impSensorPin) < 90) {StartMotor();} / / igual que arriba
ReadNailPin(); / / igual que arriba
retardo (1); / / este es el retardo real
}

}

A CONTINUACIÓN AQUÍ ES EL CÓDIGO FUENTE TODO

#include

int nailPin = 0; Este es el pin utilizado para activar la pistola de clavos
int LEDpin = 13; indicador LED indica que la máquina está funcionando
int fogPin = 20; este pin activa la máquina de la niebla
int nailSensorPin = 17; Esto está conectado con el Detector de infrarrojos delante de la pistola de clavos
int impSensorPin = 16; Esto está conectado con el detector de IR delante del impulsor de la bola

largo rndSrvoPos; variable para almacenar la posición del servo
largo rndPause; tiempo de pausa al azar
largo whichServo; elegir qué servo para mover

int i = 0; variable de tipo entero genérico
int nailTriggerValue; valor de lectura de disparador de infrarrojos LED para pistola de clavos
int pos; variable de posición del servo

Servo wiper1; primer objeto de limpiaparabrisas de servo
Servo wiper2; segundo objeto de limpiaparabrisas de servo
Servo impellerServo; servo para el empuje del botón de impulsor

void setup()
{

randomSeed(analogRead(3)); semilla del generador de números aleatorios
Serial.Begin(9600); serial de instalación
pinMode (LEDpin, salida); configurar los modos de pin
pinMode(fogPin,OUTPUT);
pinMode(nailPin,OUTPUT);
pinMode(nailSensorPin,INPUT);
pinMode(impSensorPin,INPUT);

wiper1.Attach(14); se fija el servo en el pin 14 al primer objeto de servo de limpiaparabrisas
wiper2.Attach(15); se fija el servo en el pin 15 para el segundo objeto de servo de limpiaparabrisas
impellerServo.attach(12); Fije al servo en el pin 12 para el empujador de botón impulsor

Blink3x(); parpadeará 3 veces para indicar Inicio - especie de una energía en autoprueba

}

void loop()
{
barrer los servos al azar ascienden hasta 80 grados
Pausar un periodo aleatorio de tiempo entre 10 y 250 ms
rndSrvoPos = random(0,22);
rndPause = random(250,500);
whichServo = random(100);

ReadandReport();

Si (analogRead(impSensorPin) < 90) {StartMotor();}
ReadNailPin();
MoveServo(whichServo,0,rndPause);
MoveServo(whichServo,80,rndPause);

}
void StartMotor()
{
empezar a niebla
digitalWrite(fogPin,HIGH);
Delay(750);
impellerServo.write(112);
Delay(450);
impellerServo.write(90);
digitalWrite(fogPin,LOW);

para (i = 0; i < 2000; i ++) / este retraso es un intento de evitar que el motor ejecuta asp muy a menudo cuando la bola rebota hacia fuera
{
ReadandReport();
ReadNailPin();
Delay(1);
}

ReadandReport();
}

void FireNailGun()
{
ReadandReport();
Serial.println ("Firing ciclo");
Delay(250);
digitalWrite(nailPin,HIGH);
Delay(10);
digitalWrite(nailPin,LOW);

}

void MoveServo (int servoNum, largo pos, int pausa)
{
ReadandReport();
Si (analogRead(impSensorPin) < 90) {StartMotor();}
ReadNailPin();
Si (servoNum > = 50)
{
wiper1.Write(POS);
ReadandReport();
Si (analogRead(impSensorPin) < 90) {StartMotor();}
ReadNailPin();
} else {}
wiper2.Write(POS);
ReadandReport();
Si (analogRead(impSensorPin) < 90) {StartMotor();}
ReadNailPin();
}

para (i = 0; i {}
ReadandReport();
Si (analogRead(impSensorPin) < 90) {StartMotor();}
ReadNailPin();
retardo (1);
}

}

void ReadNailPin()
{
pernos de leer y responder - sólo el clavo pin...
se trata de un intento de un interruptor manual
Si (analogRead(nailSensorPin) < 60) {FireNailGun();}
}

void Blink3x()
{
Ciclo Power en Self Test
ReadandReport();
digitalWrite(nailPin,HIGH);
Delay(250);
digitalWrite(nailPin,LOW);

digitalWrite(fogPin,HIGH);

digitalWrite(LEDpin,HIGH);
Delay(250);
digitalWrite(LEDpin,LOW);
Delay(250);
digitalWrite(LEDpin,HIGH);
Delay(250);
digitalWrite(LEDpin,LOW);
Delay(250);
digitalWrite(LEDpin,HIGH);
Delay(250);
digitalWrite(LEDpin,LOW);
digitalWrite(fogPin,LOW);

wiper1.Write(80);
wiper2.Write(80);
impellerServo.write(90);
impellerServo.write(112);
Delay(250);
impellerServo.write(90);
}

void ReadandReport()
{
Serial.Print ("impSensorPin:");
Serial.println(analogRead(impSensorPin));
Serial.Print ("nailSensorPin:");
Serial.println(analogRead(nailSensorPin));
}

Artículos Relacionados

Android controla LEDs RGB con Arduino

Android controla LEDs RGB con Arduino

Hai a todos en el post iam va a mostrar cómo controlar el LED RGB utilizando android con arduino y el módulo Bluetooth HC-05.He buscado en la web hay muchas técnicas para controlar el LED RGB. Pero este es el método que es muy simple y fácil.En este
Ilumina la caja de lápices con Arduino

Ilumina la caja de lápices con Arduino

Encontré una caja de madera y pensó en lo que es un buen descanso para mis plumas. Creo que hay varios - métodos tal vez más fáciles y baratos de modificar esta cajita - pero yo sólo quería utilizar material que ya tenía en casa.VIDEOLINK• La caja de
Hacer un robot simple de RF inalámbrico con Arduino!

Hacer un robot simple de RF inalámbrico con Arduino!

ACTUALIZACIÓN: HE AÑADIDO CONTROL DE JOYSTICK A ESTE ROBOT. POR FAVOR CONSULTE EL PASO 7 SI DESEA CONTROLAR EL ROBOT POR MEDIO DE JOYSTICK.Hola,Este es mi primer instructivo y en este tutorial voy a mostrarte, cómo construir un simple robot inalámbri
PHloat2 DIY agua ácida prueba escultura y kit con arduino

PHloat2 DIY agua ácida prueba escultura y kit con arduino

pHloatpHloat es un kit de bricolaje para uso junto con un microcontrolador arduino seminuevo / preexistente. Su propósito es poner a prueba los niveles de pH en ríos, lagos y arroyos debido a la afluencia de aire y agua contaminación causada a menudo
Peces fuera del agua - junta ATtiny con Arduino

Peces fuera del agua - junta ATtiny con Arduino

pecera es un pequeño microcontrolador programable con el software de Arduino.  Tiene una batería para luego pueda usarlo sin la placa principal de Arduino más grande.  Es como un pequeño Arduino para ir.Construir las instrucciones para el Kit de pece
Controlar una cucaracha con Arduino de bajo $30

Controlar una cucaracha con Arduino de bajo $30

Hace unos años VI cucaracha controlada de patio cerebros smartphone, y solo sopló mi mente! He intentado a mi mamá para que me deje comprarlo, pero la mención de las cucarachas convenció de lo contrario. :) Comencé a realizar proyectos con Arduino un
BRICOLAJE artesanal hexápodo con arduino (Hexdrake)

BRICOLAJE artesanal hexápodo con arduino (Hexdrake)

Hola, soy David y en este instructable te voy a mostrar cómo hice este hexápodo cuyo nombre es Hexdrake.Desde los 16 me interesé en electrónica y más tarde en robótica. Después de conseguir algún nivel y programación con arduino que decidí construir
Uber domótica con Arduino y Pi

Uber domótica con Arduino y Pi

[EDITAR] He creado un foro para colaborar en el código de puerta de enlace.http://homeautomation.proboards.com/Board/2/openha...Hace unos años me convertí en propietario de un perro por primera vez. Me gustaba salir de Cody en la perrera solo todo el
Fuente de alimentación fuente de alimentación de ATX vieja con Arduino y pantalla del Banco

Fuente de alimentación fuente de alimentación de ATX vieja con Arduino y pantalla del Banco

Hola a todos y Bienvenidos a mi primer Instructable.Siempre he querido tener un banco PSU para facilitar el acceso a una fuente de energía y algo que puedo confiar en el cuando se trabaja en varios proyectos. Quería una PSU que:• proporciona 12v, 5v
Motorizados, sonido reaccionando Star Wars en el St modelo de Bandai, con Arduino.

Motorizados, sonido reaccionando Star Wars en el St modelo de Bandai, con Arduino.

Hecho de Star Wars en el St modelo de Bandai.Reacciona al sonido y vuelve su cabeza hacia ella.Hecho con Arduino Nano, un elemento personalizado de 3dprinted, micrófonos, micro servo.Este instructivo está hecho para compartir las modificaciones neces
No.03 volante coche R/C coche con Arduino, Webcam y red. USB, etc. Pero se trata de la correa eslabonada y 4WS (4 wheel steering)

No.03 volante coche R/C coche con Arduino, Webcam y red. USB, etc. Pero se trata de la correa eslabonada y 4WS (4 wheel steering)

este coche No.03 utiliza un sistema similar como coche No.02, pero aplicación diferentes chasis sobre orugas CR-01, que cuenta con sistema opcional 2 servos y que hace conducción de cangrejo (4 ruedas misma dirección) o corto radio de giro de conducc
Sistema domótico con Arduino y GSM SIM900 módulo

Sistema domótico con Arduino y GSM SIM900 módulo

¡Hola! Ya casi he terminado mis estudios en la Facultad de ingeniería, tuve que hacer un proyecto de graduación y mi idea era hacer algo asombroso (sé que es muy gracioso: D) para mostrar a todos que soy una máquina prototipo buena y yo puedo convert
La realización de un cardán sin cepillo bricolaje con Arduino

La realización de un cardán sin cepillo bricolaje con Arduino

Esta es una historia de mi tercer proyecto con gyro barato y Arduino.Después de los anteriores dos proyectos, Péndulo invertido fácil y caligrafía 3D, he pensado de hacer Cámara de cardán con Arduino. Luego tenía las tres políticas para el proyecto.E
Control de Motor de BLDC con Arduino, salvado el motor del HD y sensores Hall

Control de Motor de BLDC con Arduino, salvado el motor del HD y sensores Hall

hay un gran interés estos días entre los aficionados a los hobbys en el control de motores brushless de la C.C. (BLDC), que han mejorado el rendimiento y mejor eficiencia energética enmotores tradicionales, pero son más difíciles de usar. Muchos prod