Paso 6: Código de Arduino
El código de Arduino que indicamos a continuación es bastante sencillo. El pin LED blanco siempre está establecido en alto. El LED rojo utiliza un pin PWM con una señal al azar diferentes para imitar el parpadeo de un fuego. El servo se encuentra para rotar con un período de 1,5 a 2 segundos. Usé la función de tono de Arduino para el gallo. Como quería el gallo sonido continuamente sin interferir con el resto del código, he usado el comando Millis y algunas si las declaraciones. Una nota de precaución; uso de la librería Servo.h desactiva funcionalidad analogWrite() (PWM) en las patillas 9 y 10, si o no un servo está conectado a los pines. Esto me estaba volviendo loca, ya que originalmente tenía el rojo LED había conectado al pin 10 y no conseguía resultados apropiados. En el futuro tengo la intención de sustituir el UNO con un ATtiny en la versión permanente, ya que el circuito sólo usa cuatro pernos.
Arduino controla el faro, 18/06/2014
#include < Servo.h >
Servo lightServo;
Apagado de int = 1;
int servoPin = 3;
int fireLightPin = 5;
int fogHornPin = 13;
Constantes que se utilizan en la sección de gallo del programa
previousMillis largo = 0;
interval1 largo = 2000;
interval2 largo = 4000;
interval3 largo = 6000;
void setup()
{
pinMode (apagado, salida);
pinMode (fogHornPin, salida);
pinMode (fireLightPin, salida);
digitalWrite (apagado, alto);
lightServo.attach(servoPin);
}
void loop()
{
Velocidad de rotación del servo
lightServo.write(100);
Código de parpadeo del LED rojo
analogWrite (fireLightPin, random(150)+10);
Delay(Random(100));
Código para hacer sonar la sirena de niebla sin interrumpir
el resto del programa
unsigned currentMillis largo = millis();
Si (currentMillis - previousMillis < interval1)
{
tono (fogHornPin, 80);
}
Si (currentMillis - previousMillis > interval1 & & currentMillis - previousMillis < interval2)
{
tono (fogHornPin, 40);
}
Si (currentMillis - previousMillis > interval2 & & currentMillis - previousMillis < interval3)
{
noTone(fogHornPin);
}
Si (currentMillis - previousMillis > interval3)
{
previousMillis = currentMillis;
}
}