Paso 1: El código
El código construye de documentación de Arduino como
Knight Rider 2 para el uso de matrices para configuraciones de pin
Botón era lo que andaba buscando a la derecha al principio (Nota a sí mismo: para v2 probablemente debería añadir una resistencia entre la tierra y las puntas de vuelos...)
Descargar el archivo physio.pde (o copiar el código de abajo) y cargar en el microcontrolador de Arduino de la manera habitual.
/*
RepWrap v1
Nikki pugh | De abril de 2011 | www.npugh.co.uk
Motor de la vibración atado pin 12
LED conectado al pin 13
Pernos de repetición 2-6
Duración de los pernos 7-11
*/
variables:
int repNumbers [5] = {//array guardar una selección de los valores de repetición
10,12,20,24,30};
int repPins [] = {}
2, 3, 4, 5, 6}; una matriz de números de pin para que rep botones se unen
int repPinCount = 5; el número de opciones de rep (es decir, la longitud de la matriz)
int durationLengths [5] = {//array guardar una selección de valores de duración y mantenga en segundos
10,12,15,20,30};
int durationPins [] = {}
7, 8, 9, 10, 11}; una matriz de números de pin para cuya duración se unen botones
int durationPinCount = 5; el número de opciones de duración (es decir, la longitud de la matriz)
destellos se utilizan como una indicación de que la duración de retención es casi sobre
flashOn int = 750; longitud de conteo regresivo del tiempo pasado parpadea para
Penumbras de int = 250; tiempo atrás parpadea apagado para
int flashRep = 3; Nº de destellos
tiempo de Flash int = (flashRep*(flashOn+flashOff));
int cambio = 3000; longitud de tiempo entre repeticiones, milisegundos
int repState = 0; variable para lectura del estado del selector
int durationState = 0; variable para lectura del estado del selector
int thisRepPin = 0; otras variables
int thisDurationPin = 0;
int thisRepNumber = 0;
int thisDurationLength = 0;
int repNumber = 0;
int durationLength = 0;
int repStateFound = 0;
int durationStateFound = 0;
constantes:
const int buzzPin = 12; el número del pin zumbador
const int LEDPin = 13; el número de los pines del LED
void setup() {}
inicializar los pines como salidas de un:
pinMode (LEDPin, salida);
pinMode (buzzPin, salida);
int thisRepPin;
los elementos de la matriz están numerados del 0 al (pinCount - 1).
usar un bucle inicializar cada pin como salida:
para (int thisRepPin = 0; thisRepPin < repPinCount; thisRepPin ++) {}
pinMode (repPins [thisRepPin], entrada); configurar pin de entrada
digitalWrite (repPins [thisRepPin], HIGH); activar resistencias pullup interna
pinMode (repPins [thisRepPin], salida); conjunto perno de salida
}
int thisDurationPin;
los elementos de la matriz están numerados del 0 al (pinCount - 1).
usar un bucle inicializar cada pin como salida:
para (int thisDurationPin = 0; thisDurationPin < durationPinCount; thisDurationPin ++) {}
pinMode (durationPins [thisDurationPin], entrada); configurar pin de entrada
digitalWrite (durationPins [thisDurationPin], HIGH); activar resistencias pullup interna
pinMode (durationPins [thisDurationPin], salida); conjunto perno de salida
}
Serial.Begin(9600); abrir el puerto serie a 9600 bps
} //end configurar
void loop() {}
señal de inicio
para (int i = 0; i < flashRep; i ++) {}
digitalWrite (LEDPin, LOW);
Delay(flashOff);
digitalWrite (LEDPin, alto);
Delay(flashOn);
digitalWrite (LEDPin, LOW);
}
digitalWrite (buzzPin, HIGH);
Delay(CHANGEOVER);
digitalWrite (buzzPin, bajo);
leer los pines de Rep, cuando encuentres uno que sea bajo, que es la que ha sido seleccionado
thisRepPin = 0;
repStateFound = 0;
{while(repStateFound==0)}
repState=digitalRead(repPins[thisRepPin]);
Si (repState == LOW) {//has sido conectado a tierra
repStateFound = 1;
Serial.Print(thisRepPin);
Serial.println ("repStateFound = 1");
}
Si (repState == HIGH) {}
repStateFound = 0;
Serial.Print(thisRepPin);
Serial.println ("repStateFound = 0");
thisRepPin ++;
}
}
thisRepNumber = thisRepPin;
Serial.Print ("thisRepNumber:");
repNumber = repNumbers [thisRepNumber];
Serial.println(repNumbers[thisRepNumber]);
leer los pines de duración, cuando encuentres uno que sea bajo, que es la que ha sido seleccionado
thisDurationPin = 0;
durationStateFound = 0;
{while(durationStateFound==0)}
durationState=digitalRead(durationPins[thisDurationPin]);
Si (durationState == LOW) {}
durationStateFound = 1;
Serial.Print(thisDurationPin);
Serial.println ("durationStateFound = 1");
}
Si (durationState == HIGH) {}
durationStateFound = 0;
Serial.Print(thisDurationPin);
Serial.println ("durationStateFound = 0");
thisDurationPin ++;
}
}
thisDurationLength = thisDurationPin;
Serial.Print ("thisDurationLength:");
durationLength = durationLengths [thisDurationLength];
Serial.println(durationLength);
durationLength = durationLength * 1000;
thisDurationPin = 0;
desconectar pins para ahorrar energía
para (int thisRepPin = 0; thisRepPin < repPinCount; thisRepPin ++) {}
digitalWrite (repPins [thisRepPin], LOW); Apague todos los rep
}
Serial.println ("rep pernos apagados");
para (int thisDurationPin = 0; thisDurationPin < durationPinCount; thisDurationPin ++) {}
digitalWrite (durationPins [thisRepPin], LOW); Apague todos los pines de duración
}
Serial.println ("duración pernos apagados");
Ahora sigamos con los ejercicios
para (int cuenta = 0; cuenta < repNumber; cuenta ++) {//repeat este ciclo tantas veces como existen repeticiones
Delay(durationLength-flashTime); Espere a que la longitud de duración menos la duración de los destellos countown
para (int i = 0; i < flashRep; i ++) {//do la cuenta regresiva parpadea
digitalWrite (LEDPin, LOW);
Delay(flashOff);
digitalWrite (LEDPin, alto);
Delay(flashOn);
digitalWrite (LEDPin, LOW);
que rep ya está terminado
}
Serial.println(count+1); ¿Cuántas repeticiones hemos hecho?
zumbido del motor para un cambio
digitalWrite (buzzPin, HIGH);
Delay(CHANGEOVER);
digitalWrite (buzzPin, bajo);
} //end de conjunto
mucho buzz para señalar el final de la serie
digitalWrite (buzzPin, HIGH);
Delay(7000);
digitalWrite (buzzPin, bajo);
Flash el LED tan señalar el final del juego - cuando es necesario apagar o iniciar otra ves
mientras que (verdad) {}
digitalWrite (LEDPin, alto);
Delay(500);
digitalWrite (LEDPin, LOW);
Delay(1000);
}
} //end lazo