Arduino controlado Servo ejercitador (2 / 2 paso)

Paso 2:

Aquí es todo el programa - libre para que su uso como...
Este código ha sido probado extensivamente y no conozco de algún error!

/*************************************************************/
/ *** S W E E P U S E C S--programa de la unidad de Servo V.110308 *** /
/ *** Mark Theobald - www.DisabledAdventurers.com *** /
/*************************************************************/
#include < Servo.h >
#include < EEPROM.h >

Servo1 servo;                   Crea un objeto Servo
int CPOS = 1500;        Posición actual (uSecs)
int velocidad = 2500;        Servo de velocidad (1-100 * 300)
int retardo = 1000;        Retardo entre barre (0-5000 milisegundos)
int INCR = 1;              Incremento de servo (1-50 uSecs)
int CSTOP = 1;              Pare en el centro (sí o No)
int AMIN = 675;          Absoluto mínimo (mínimo = 675)
int AMAX = 2325;        Máximo absoluto (máximo = 2325)
int MIN, MAX;                    Corriente MIN & MAX valores
int SPCP;                         Posición de barrido pases centro
int Ct, LoopCount;          Algunas Variables globales
char cadena [80];               Un búfer de cadena
int número;                     Una número Variable

int ABYTE, EPAD;           para la lectura y escritura de EEPROM

void StoreDefaults (void);
void RetrieveDefaults (void);
void CheckSerial (void);
void SweepTo (int posición);
void ManualRotation (void);
void ManualEntry (void);
void GetANumber (void);

/*************************************************************/
void setup() {}

Servo1.Attach (9, AMIN, AMAX);            Conecte el SERVO al Pin 9
Servo1.writeMicroseconds (1500);     Servo de posición a posición central
Serial.Begin (115200);                          Esto coincide en HyperTerminal.
Serial.Print ("\n\r");                                  Mostrar el menú operador

Serial.print( "-------------------------------------------- \n\r" );
Serial.Print ("S W E E P U S E C S--Servo Drive programa \n\r");
Serial.print( "-------------------------------------------- \n\r" );
Serial.Print ("s/S = velocidad, i/I = incremento de movimiento, d/D = demora \n\r");
Serial.Print ("n/N = Min, m/M = Max, < espacio > = pausa,? = pantalla \n\r");
Serial.Print ("C = centro parada, L/R = modo Manual, X = Reset \n\r");
Serial.Print ("Z = tienda por defecto, P = introducir posición manualmente \n\r");
Serial.print( "-------------------------------------------- " );

MIN = AMIN;                    Inicializar el MIN y MAX valores absoluto MIN & MAX valores
MAX = AMAX;
RetrieveDefaults();        Leer todos los valores almacenados en la EEPROM
mientras (!. Serial.Available());                Esperar a que cualquier tecla para comenzar
Serial.Read();   }

/*************************************************************/
void loop() {}

sprintf (cadena, "\n\r%06d:", ++ LoopCount);    Seguimiento de los bucles
Serial.Print (cadena);
SweepTo (MAX);
Serial.Print ("CW");                  Indicar último movimiento
CheckSerial();
retraso (retardo);

Si (CSTOP & & SPCP) {//We quiere parar en el centro & &
SweepTo (1500);                     Barra pasa a posición central
Serial.Print ("centro");
CheckSerial();
retraso (retardo);    }

SweepTo (MIN);
Serial.Print ("CCW");
CheckSerial();
retraso (retardo);

Si (CSTOP & & SPCP) {}
SweepTo (1500);
Serial.Print ("centro");
CheckSerial();
retraso (retardo);    }    }

/*************************************************************/
void RetrieveDefaults() {}
APAD = 0;

ABYTE = int (EEPROM.read (EPAD ++));
MIN = ABYTE << 8;
ABYTE = int (EEPROM.read (EPAD ++));
MIN = MIN | ABYTE;
Serial.Print ("\n\rMIN:");
Serial.Print (MIN, DEC);
Si (MIN < AMIN ||  MINUTO > = MAX) MIN = AMIN;

ABYTE = int (EEPROM.read (EPAD ++));
MAX = ABYTE << 8;
ABYTE = int (EEPROM.read (EPAD ++));
MÁXIMO = MAX | ABYTE;
Serial.Print ("MAX:");
Serial.Print (MAX, DEC);
Si (MAX < = MIN || MAX > AMAX) MAX = AMAX;

SPCP = MIN < 1500 & & MAX > 1500;     Posición de barrido pases centro

ABYTE = int (EEPROM.read (EPAD ++));
VELOCIDAD = ABYTE << 8;
ABYTE = int (EEPROM.read (EPAD ++));
VELOCIDAD = VELOCIDAD | ABYTE;
Serial.Print ("velocidad:");
Serial.Print (velocidad / 100, DEC);
Si (velocidad < 100 ||  VELOCIDAD > 30000) velocidad = 2500;

ABYTE = int (EEPROM.read (EPAD ++));
RETARDO = ABYTE << 8;
ABYTE = int (EEPROM.read (EPAD ++));
RETARDO = RETRASO | ABYTE;
Serial.Print ("DELAY:");
Serial.Print (retraso / 50, DEC);
Si (retrasar < 0 ||  RETRASO > 5000) retardo = 1000;

ABYTE = int (EEPROM.read (EPAD ++));
INCR = ABYTE << 8;
ABYTE = int (EEPROM.read (EPAD));
INCR = INCR | ABYTE;
Serial.Print ("INCR:");
Serial.Print (INCR, DEC);
Si (INCR < 1 ||  INCR > 50) INCR = 50;    }

/*************************************************************/
void StoreDefaults() {}
APAD = 0;

EEPROM.write (EPAD ++, char ((MIN >> 8) & 0x00FF));
EEPROM.write (EPAD ++, char (MIN & 0x00FF));

EEPROM.write (EPAD ++, char ((MAX >> 8) & 0x00FF));
EEPROM.write (EPAD ++, char (MAX & 0x00FF));

EEPROM.write (EPAD ++, char ((velocidad >> 8) & 0x00FF));
EEPROM.write (EPAD ++, char (velocidad & 0x00FF));

EEPROM.write (EPAD ++, char ((retardo >> 8) & 0x00FF));
EEPROM.write (EPAD ++, char (DELAY & 0x00FF));

EEPROM.write (EPAD ++, char ((INCR >> 8) & 0x00FF));
EEPROM.write (EPAD, char (INCR & 0x00FF));    }

/*************************************************************/
void CheckSerial() {}
char clave;

mientras (Serial.available()) {}
Si ((clave = Serial.read()) == de ' ||  Clave == de ' ||  Clave == '?')    {
Si (clave == de ' & & velocidad > 300) velocidad-= 300;
Si (clave == de ' & & < 30000 la velocidad) velocidad += 300;
Si (clave == '?')  Serial.Print ("\n\r");
sprintf (cadena, "velocidad: % d", velocidad / 300);     0 - 100
Serial.Print (cadena);    }

Si (clave == 'i' ||  Clave == 'I' ||  Clave == '?')    {
Si (clave == 'i' & & INCR > 1) INCR--;
Si (clave == 'I' & & INCR < 50) INCR ++;
sprintf (cadena, "Incr:% d", INCR);            0 - 50
Serial.Print (cadena);    }

Si (clave == había ' ||  Clave == había ' ||  Clave == '?')    {
Si (clave == había ' & & retraso > 49) demora-= 50;
Si (clave == había ' & & retrasar < 5000) demora += 50;
sprintf (cadena, "retraso: % d", retardo / 50);     0 - 100
Serial.Print (cadena);    }

Si (clave == ' n ' ||  Clave == ' n ' ||  Clave == '?')    {
Si (clave == n) si ((MIN-= 20) < AMIN) MIN = AMIN;
Si (clave == n) si ((MIN += 20) > MAX - 1) MIN = MAX - 1;
sprintf (cadena, "Min:% d", MIN);
Serial.Print (cadena);
SPCP = MIN < 1500 & & MAX > 1500;    } //Sweep pases centro posición

Si (clave == soy ' ||  Clave == soy ' || Clave == '?')    {
Si (clave == estoy ') si ((máximo-= 20) < MIN + 1) MAX = MIN + 1;
Si (clave == estoy ') si ((MAX += 20) > AMAX) MAX = AMAX;
sprintf (cadena, "Max: % d", MAX);
Serial.Print (cadena);
SPCP = MIN < 1500 & & MAX > 1500;    }

Si (clave == 'c' ||  Clave == 'C') {}
CSTOP =! CSTOP;
¿sprintf (cadena, "\n\rStop @ centro = %s \n\r", CSTOP? "Sí": "No");
Serial.Print (cadena);    }

Si (clave == ' ') {}
Serial.Print ("Pause");
mientras (!. Serial.Available());      Hizo una pausa - espera para cualquier tecla
Serial.Read();
Serial.Print ("ejecutar");    }

Si (clave == 'x' ||  Clave == 'X') {//Reset todas las variables
VELOCIDAD = 7500;
RETARDO = 1000;
INCR = CSTOP = SPCP = 1;
MIN = AMIN;
MAX = AMAX;    }

Si (clave == 'r' ||  Clave == 'R' ||  Clave == 'l' ||  Clave == 'L')
ManualRotation();

Si (clave == 'z' ||  Clave == 'Z') StoreDefaults();

Si (clave == 'p' ||  Clave == 'P') {}
mientras que Serial.read() (Serial.available());       Borrar búfer
ManualEntry();    }    }    }

/*************************************************************/
void ManualEntry() {}
Serial.Print ("\n\n\rMANUAL modo de ingreso");
sprintf (cadena, "---MIN:% d, MAX: % d", MIN, MAX);
Serial.Print (cadena);
Serial.Print ("posición de \n\rNumeric entrar en < >, < espacio > = salida \n\r");

mientras que {} (1)
GetANumber();
Si vuelve (número < 0);
sprintf (cadena, ": %d", número);
Serial.Print (cadena);

Si (número > = MIN & & número < = MAX) {}
CPOS = número;
Servo1.writeMicroseconds (CPOS);
Serial.Print ("\n\r");    }

Else {}
Serial.Print ("no es en la gama \n\r");
sprintf (cadena, "%d - %d < Enter > o < espacio > a Exit...\n\r", MIN, MAX);
Serial.Print (cadena);    }    }    }

/*************************************************************/
void GetANumber() {}
char clave = 0;

Número = 0;
mientras que (tecla! = ' ') {}
Si (Serial.available()) {}
Si ((clave = Serial.read()) == 13) volver;     CR
Si (clave > 47 & & tecla < 58) {//ASCII '0' t h es '9'
Si (número) * = 10;                    Sin los ceros!
Número += (tecla - 48);    }    }    }

Número = -1;
retorno;    }

/*************************************************************/
void ManualRotation() {}
char clave;

Serial.Print ("\n\n\rMANUAL modo de rotación");
Serial.Print ("\n\rl/L=Left, r/R = derecha, espacio de < > = salida \n\r");

mientras que {} (1)
Si (Serial.available()) {}
Si ((clave = Serial.peek()) == 'p' ||  Clave == 'P') volver;

Si ((clave = Serial.read()) == ' ') {}
Serial.Print ("\n\r");
retorno;    }

Si (clave == 'r' ||  Clave == 'R' ||  Clave == 'l' ||  Clave == 'L') {}
Si (clave == 'r' & & CPOS < AMAX) CPOS ++;

Si (clave == 'R') {}
Si (CPOS < AMAX - 9) CPOS += 10;
otro CPOS = AMAX;    }

Si (clave == 'l' & & CPOS > AMIN) CPOS--;

Si (clave == 'L') {}
Si (CPOS > AMIN + 9) CPOS-= 10;
otro CPOS = AMIN;    }

Servo1.writeMicroseconds (CPOS);
sprintf (cadena, ": %d", CPOS);
Serial.Print (cadena);    }    }    }    }

/*************************************************************/
void SweepTo (int posición) {}

Si (CPOS < posición) mientras que ((CPOS += INCR) < = posición) {}
Servo1.writeMicroseconds (CPOS);
para la (Ct = velocidad; CT < 30000; CT++);    }

otra cosa mientras que ((CPOS = INCR) > = posición) {}
Servo1.writeMicroseconds (CPOS);
para la (Ct = velocidad; CT < 30000; CT++);    }

Si (CPOS! = posición) Servo1.writeMicroseconds (CPOS = posición);    }

/*************************************************************/
/ *** FIN PROGRAMA *** /
/*************************************************************/

Artículos Relacionados

Arduino controlado Servo Robot (serbio)

Arduino controlado Servo Robot (serbio)

¿qué mejor manera de empezar a experimentar con micro-controladores de código abierto ( Arduino ) y construyendo tu propio abra robot fuente ( CC (SA-de))?¿Qué hacer con el serbio?(aquí) - Cómo conectar su servio al internet y la unidad sobre un Skyp
Toque de queda del animal doméstico: Un Arduino controlado puerta para mascotas

Toque de queda del animal doméstico: Un Arduino controlado puerta para mascotas

El problema: quiere restringir el tiempo cuando su mascota pueda salir al exterior. Esto podría ser porque el barrio no es seguro para su gato o perro pequeño por la noche (Merodeadores coyotes viene a la mente). Pero desea que su mascota para poder
Arduino controlado CNC 3D impresora híbrida

Arduino controlado CNC 3D impresora híbrida

La madre naturaleza hace... Construimos.BuildersBot fusibles de impresión 3D y fresado CNC en sueños de un constructor "3dprintingindustry.com"La BuilderBot es una máquina de diseño abierto, que utiliza OpenSoftware y Hardware abierto. Es un pro
Arduino controlado por dimmer luz

Arduino controlado por dimmer luz

ADVERTENCIA: ¿ Algunas personas tratan de construir esto con un optoacoplador con coz zerocrossing derecho 'es mejor'? Algunos se dicen incluso en tiendas de electrónica es mejor utilizar tal un optoacoplador. MAL. Esto sólo funcionará con un optoaco
Arduino + 2 Servos + joystick (joystick)

Arduino + 2 Servos + joystick (joystick)

en mis otros tutoriales de Arduino 2 tengo ayuda nuevos usuarios para jugar tonos y hacer 2 servos moverse con el ratón.Esta vez a que ayudará mover el mismo 2 servos con un stick.Y otra vez he navegar por internet a ver si hay tutoriales que claro d
Arduino controlado de simulador de vuelo - "The Viper"

Arduino controlado de simulador de vuelo - "The Viper"

My Maker Faire proyecto para 2012 es "La víbora"--un simulador de vuelo de Arduino controlado inspirado en la nave del mismo nombre de TV serie Battlestar Galactica del canal SyFy. Gira 360 grados a lo largo de dos ejes, lo que significa que sí,
POV Arduino controlado desde Android

POV Arduino controlado desde Android

Proyecto de un POV con Arduino controlado desde el celular.POV Proyectos hechos con Arduino hay muchos, pero quise realizar uno en el cual se pudiera enviar el mensaje o palabra visualizar, un estar de evitar través del celular para un cada rato carg
Un infrarrojo de Arduino controlado y Robot de evitación del obstáculo

Un infrarrojo de Arduino controlado y Robot de evitación del obstáculo

Hola todo el mundo,Este Instructables se divide en dos fases, que hace conveniente para el principiante y los diseñadores de robots intermedios.La primera fase abarca el uso de la placa de arduino nano solamente como controlador. Con esto, vamos a co
Arduino controlado esqueleto Animatronic de rock - en progreso

Arduino controlado esqueleto Animatronic de rock - en progreso

Para Halloween este año, decidí construir una banda de rock esqueleto de animatronic. Es un trabajo en progreso en este punto, pero estoy muy contento con cómo está llegando a lo largo. Casi todo está hecho de materiales que tenía en la mano (soy un
Arduino HVAC Servo controlador termostato

Arduino HVAC Servo controlador termostato

Bienvenidos a mi 'verde' instructable! Voy a mostrarle cómo utilizar un Arduino, dos servomotores un sensor de temperatura y algún metal (o madera) para hacer un termostato digital de una unidad de climatización a través de la pared.Según CB Richard
Láser Galvo - Arduino controlado

Láser Galvo - Arduino controlado

Arduino controla láser galvo. El servo conducido espejos dirigir el láser UV dejando un rastro fosforescente en la hoja de vinilo brillan en la oscuridad.Originalmente publicado en notes.robives.comPaso 1:A partir de una hoja de vinilo luminoso de eB
Un ATTiny13A de programación utilizando Arduino y servo intérprete

Un ATTiny13A de programación utilizando Arduino y servo intérprete

así que ahí estaba, navegando eBay, buscando algunas ofertas baratas en chips Atmel cuando me topé con un par de chips ATTiny13 por £2.50. Sólo tenía que tenerlos! Después de todo, ¿qué tan difícil puede ser?Necesitaba un pequeño chip para leer señal
Internet Arduino controlado ranura en T XY mesa

Internet Arduino controlado ranura en T XY mesa

esto es ridículamente fácil (en términos de uso de la herramienta de poder - vea abajo) manera de hacer una precisión inferior tabla XY.  Con la amplia disponibilidad de la T-ranura extrusiones en Amazon y Ebay y utilizando simples mejoras para el ho
CARduino - vehículo accionado Arduino, controlado por LabVIEW

CARduino - vehículo accionado Arduino, controlado por LabVIEW

El CARduino es un vehículo operado por control remoto que es controlado por un regulador conectado a un equipo que ejecute LabVIEW. El vehículo es accionado por el Arduino y se puede ampliar a través de la adición de sensores u otros dispositivos. Us