Paso 4: Subir el sketch de arduino
Cargar el bosquejo provisto en el arduino.
Este bosquejo es set up para poner el arduino a dormir si no se ha presionado el botón, y reasignar el eje y de cada uno de los joysticks para controlar los servos de rotación de operar en consecuencia.
Propósito: Operar dos servos utilizando dos joysticks, que se utilizará para operar las dos piernas de un robot. En asociación hacer curso, ofrecido por la Universidad de Florida del sur.
Creado por: Brian Cantler / / fecha: 01/12/2014
#include #include //this AVR biblioteca contiene los métodos que el pasador de //since sueño modos #define interruptNumber 0 2 se utiliza para la interrupción externa, en los controles se une para interrumpir número 0 #define TouchPadPin //connect touch sensor salida 2 (pin "S") a D2 (pines "G" a la tierra y pin "V" a 5V)
volátil bytes TouchPadEventFlag; //all variables que cambian en un ISR que deba ser dimensionado como //this 'volátiles' variable se utiliza para contar el lazo principal que ocurrió un evento de interrupción.
const int servo1 = 3; identifica el primer servo como siendo conectado al pin digital 3 const int servo2 = 10; identifica el segundo servo como siendo conectado al pin digital 10 const int joy1 = 3; identifica el primer joystick como siendo conectado al pin analógico 3 const int joy2 = 4; identifica el segundo joystick como siendo conectado al pin analógico 4
int servoVal; variable para leer los valores del pin analógico
Servo myservo1; crea objeto servo para controlar el primer servo Servo myservo2; crea objeto servo para controlar el segundo servo
void setup() {}
Servos myservo1.attach(servo1); se fija el primer servo myservo2.attach(servo2); se fija el servo de segunda
Inicializar Serial.begin(9600) Serial; pinMode(13,OUTPUT); Juegos pin 13 como salida para que podamos utilizar el construido en LED en el arduino para controlar cuando el arduino está encendido digitalWrite(13,LOW); pin de vueltas 13, uno de los construidos en el LED en el arduino, off pinMode (TouchPadPin, entrada); el pin de interrupción se define como una entrada digitalWrite(2,HIGH); activa la resistencia de pull-up interna para tirar a alta cuando no se ha presionado el botón
}
void loop() {}
Muestra los valores de joystick con el monitor serial outputJoystick();
Leer el joystick de un valor (valor entre 0 y 1023) servoVal = analogRead(joy1); servoVal = mapa (servoVal, 0, 2500, 70, 180); escalas de los valores de la palanca de mando para poder usarlo con el servo (resultado entre 90 y 180)
myservo2.Write(servoVal); ajusta la velocidad de los 360 servos según el valor de escalado
Leer el joystick de dos valor (valor entre 0 y 1023) servoVal = analogRead(joy2); servoVal = mapa (servoVal, 0, 2500, 70, 180); escalas de los valores de la palanca de mando para poder usarlo con el servo (resultado entre 90 y 180)
myservo1.Write(servoVal); ajusta la velocidad de los 360 servos según el valor de escalado
Delay(15); espera a que el servo acelerar a la escala de valor sleepSetup(); se mantiene en ~ 27 mA hasta que se presione el botón táctil en pin 2
}
/ ** * Muestra los valores de joystick en el monitor serial * / void outputJoystick() {}
Serial.Print(analogRead(joy1)); muestra los valores de joystick para el primer joystick en el monitor serial Serial.print ("- joystick_one---"); identifica los valores que se muestran son para el primer joystick Serial.print(analogRead(joy2)); muestra los valores de joystick para el segundo joystick en el serial monitor Serial.println ("- joystick_two---"); identifica los valores que se muestran son para el segundo joystick}
void sleepSetup() {sleep_enable(); attachInterrupt (0, pinInterrupt, LOW); //Sets pin 2 como una interrupción y une rutina interrupción de servicio (ISR) set_sleep_mode(SLEEP_MODE_PWR_DOWN); //define la alimentación sueño modo digitalWrite(13,LOW); //turns el LED apagado para indicar sueño modo sleep_cpu(); //Set bit de habilitación (SE) sueño, esto pone el ATmega para dormir Serial.println ("strandbot está encendido"); //When despierta debido a la interrupción el programa continúa con la instrucción siguiente sleep_cpu() digitalWrite (13 ALTO); vuelve el construido en LED para indicar que ha despertado el arduino arduino}
void pinInterrupt() //ISR {sleep_disable(); //this es importante. Es posible que la interrupción se llama entre la ejecución de "attachInterrupt(...)" y sleep_CPU() en el bucle principal //if que ocurre sin la sleep_disable() en el ISR, el ISR sería llamado la interrupción separado y el dispositivo para dormir. ya que en ese momento quedaría deshabilitada la interrupción, no habría ninguna manera para despertar el dispositivo ya. poniendo sleep_disable() en el ISR, sleep_cpu() no sería efectiva durante ese lazo, es decir, el bucle principal se ejecute uno más tiempo //and entonces Fije correctamente la interrupción antes de llegar a la sleep_cpu() una segunda vez. En ese momento el dispositivo se vaya a dormir, pero //the interrupción ahora activarse, es decir, para despertar puede ser inducido. detachInterrupt (0); //disable la interrupción. Esto efectivamente debounces el mecanismo de interrupción para evitar que varias llamadas de la interrupción.
}