Tu jest kod/program działający u mnie:
/* Oświetlenie nawigacyjne Boening 747
*
*/
const int LEDOFF = 0;
const int LEDON = 96; // 25%
const int LEDBLINK = 244; // 100%
const int LEDHALF = 120; // 50%
class LED {
private:
byte _ledPin;
int _ledState;
int _ledLastState;
long _currentMillis;
long _previousMillis;
public:
byte _brightness;
long _interval;
long _time;
LED ( byte pin);
void setOn();
void setOff();
void setOnTime();
void setBrightness( byte brightness);
};
LED::LED( byte ledpin) : _ledPin(ledpin) {
_brightness = 0;
_ledState = LOW;
_ledLastState = LOW;
_currentMillis = millis();
_previousMillis = _currentMillis;
long _time; pinMode(_ledPin, OUTPUT);
}
void LED::setOn() {
analogWrite (_ledPin, _brightness);
}
void LED::setOff() {
digitalWrite (_ledPin, LOW);
}
void LED::setBrightness ( byte brightness) {
_brightness = brightness;
}
void LED::setOnTime(){
_currentMillis = millis();
if( _currentMillis - _previousMillis > _interval) {
_previousMillis = _currentMillis;
if (_ledState == LOW) {
_ledState = HIGH;
_brightness = LEDBLINK;
} else {
_ledState = LOW;
_brightness = LEDOFF;
}
_ledLastState = _ledState;
}
if (_ledLastState == _ledState) {
if ( (_currentMillis - _time) < _previousMillis) {
_brightness = LEDBLINK;
} else {
_brightness = LEDOFF;
}
setOn();
}
}
/* dla Arduino Nano */
int Led_1 = 3; //ogon, białe flash
int Led_2 = 5; //strobo skrzydla, biały flash
int Led_3 = 6; //beacon, czerwony flash
int Led_4 = 9; //position-zielone,czerwone,białe
int Led_5 = 10;
int Led_6 = 13;
int Led_7 = 2; //landing golen, białe stałe
int Led_8 = 7; //landing skrzydla wew, białe stałe
int Led_9 = 8; //landing skrzydla zew, białe stałe
int sensorPin = A0; // select the input pin for the potentiometer
int ledPin = 12; // oświetlenie wnętrza modelu, białe
int sensorValue = 0; // variable to store the value coming from the sensor
LED Led_tail(Led_1);
LED Led_strobe(Led_2);
LED Led_beacon(Led_3);
// Ustawienia po uruchomieniu układu
void setup() {
// ustawiamy stan IO, internal pull
pinMode(Led_1, OUTPUT);
pinMode(Led_2, OUTPUT);
pinMode(Led_3, OUTPUT);
pinMode(Led_4, OUTPUT);
pinMode(Led_7, OUTPUT);
pinMode(Led_8, OUTPUT);
pinMode(Led_9, OUTPUT);
pinMode(ledPin, OUTPUT);
// tu regulujesz czas błysków
Led_tail._interval = 1700;
Led_tail._time = 60;
Led_strobe._interval = 1000;
Led_strobe._time = 70;
Led_beacon._interval = 2400;
Led_beacon._time = 100;
}
/* Wszystkie światła wyłączone */
void LEDS_OFF() {
analogWrite(Led_1, LEDOFF);
analogWrite(Led_2, LEDOFF);
analogWrite(Led_3, LEDOFF);
analogWrite(Led_4, LEDOFF);
analogWrite(Led_7, LEDOFF);
analogWrite(Led_8, LEDOFF);
analogWrite(Led_9, LEDOFF);
analogWrite(ledPin, LEDOFF);
}
/* Tylko światła nawigacyjne i pozycyjne (obrysowe) */
void Mode1() {
Led_tail.setOnTime();
Led_strobe.setOnTime();
Led_beacon.setOnTime();
analogWrite(Led_4, LEDBLINK);
analogWrite(Led_7, LEDOFF);
analogWrite(Led_8, LEDOFF);
analogWrite(Led_9, LEDOFF);
}
/* Światła nawigacyjne, pozycyjne i lądowania*/
void Mode2a() {
Led_tail.setOnTime();
Led_strobe.setOnTime();
Led_beacon.setOnTime();
analogWrite(Led_4, LEDBLINK);
analogWrite(Led_7, LEDBLINK);
analogWrite(Led_8, LEDOFF);
analogWrite(Led_9, LEDOFF);
}
void Mode2b() {
Led_tail.setOnTime();
Led_strobe.setOnTime();
Led_beacon.setOnTime();
analogWrite(Led_4, LEDBLINK);
analogWrite(Led_7, LEDBLINK);
analogWrite(Led_8, LEDBLINK);
analogWrite(Led_9, LEDOFF);
}
void Mode2c() {
Led_tail.setOnTime();
Led_strobe.setOnTime();
Led_beacon.setOnTime();
analogWrite(Led_4, LEDBLINK);
analogWrite(Led_7, LEDBLINK);
analogWrite(Led_8, LEDBLINK);
analogWrite(Led_9, LEDBLINK);
}
/* Tylko światła pozycyjne - obrysowe */
void Mode3() {
analogWrite(Led_1, LEDOFF);
analogWrite(Led_2, LEDOFF);
analogWrite(Led_3, LEDOFF);
analogWrite(Led_4, LEDBLINK);
analogWrite(Led_7, LEDOFF);
analogWrite(Led_8, LEDOFF);
analogWrite(Led_9, LEDOFF);
}
/* w tej pętli, program wykonuje się w nieskończoność */
void loop() {
/* read the value from the sensor:
potencjometr dzielę na 6 pozycji, dla 6 trybów pracy */
sensorValue = analogRead(sensorPin);
if ( sensorValue < 170 ) {
LEDS_OFF();
analogWrite(ledPin, LEDOFF);
}
if ((sensorValue > 170) and (sensorValue < 340)) {
Mode3();
analogWrite(ledPin, LEDHALF); }
if ((sensorValue > 340) and (sensorValue < 510)) {
analogWrite(ledPin, LEDOFF);
Mode1(); }
if ((sensorValue > 510) and (sensorValue < 680)) {
analogWrite(ledPin, LEDOFF);
Mode2a(); }
if ((sensorValue > 680) and (sensorValue < 850)) {
analogWrite(ledPin, LEDOFF);
Mode2b(); }
if (sensorValue > 850) {
Mode2c(); }
}
/* a tu jest koniec kodu v2.3.2 */
Opis obsługi modułu Arduino jest na dedykowanej stronie - https://www.arduino.cc