22-09-2015, 22:00
Dziękuję Wam za wszystkie cenne podpowiedzi.
@shalvan - Tak mam rezystor w przełączniku. Wiem, że nie może wisieć w powietrzu bo może sobie coś losowo wybierać.
@adix - dziękuję za ładny kod. Masz rację, że tak łatwiej potem zmieniać wszystko. Z Twoim kodem po powrocie z trybu "party" miałem to samo: po żółtej diodzie zapalały się nie wiem dlaczego, zielona i czerwona równocześnie...
Na koniec zastosowałem połączenie kodu @adix i @shalvan używając "czyszczenia wyjść" Shalvana i zadziałało tak jak chciałem!!!
Jeszcze raz Wam dziękuję Shalvan i Adix za poświęcony mi czas.
Oto ostateczny kod:
@shalvan - Tak mam rezystor w przełączniku. Wiem, że nie może wisieć w powietrzu bo może sobie coś losowo wybierać.
@adix - dziękuję za ładny kod. Masz rację, że tak łatwiej potem zmieniać wszystko. Z Twoim kodem po powrocie z trybu "party" miałem to samo: po żółtej diodzie zapalały się nie wiem dlaczego, zielona i czerwona równocześnie...
Na koniec zastosowałem połączenie kodu @adix i @shalvan używając "czyszczenia wyjść" Shalvana i zadziałało tak jak chciałem!!!
Jeszcze raz Wam dziękuję Shalvan i Adix za poświęcony mi czas.
Oto ostateczny kod:
Kod:
#define numberOfLEDs 3
long nextFlash[3];
int ledPin[] = { 8, 9, 10}; // LED pins to use.
int ledState[3];
int guzik=1;
const int button = 11;
int red_time = 4000; //4000
int yellow_time = 2000; //2000
int green_time = 4000; //4000
void setup() {
pinMode(8, OUTPUT); //Konfiguracja pinu 8 jako wyjście RED
pinMode(9, OUTPUT); //Konfiguracja pinu 9 jako wyjście YELLOW
pinMode(10, OUTPUT); //Konfiguracja pinu 10 jako wyjście GREEN
pinMode(11, INPUT); //Konfiguracja pinu 11 jako guzik
}
void loop()
{
guzik = digitalRead(button); // read input value
if (guzik == LOW)
{
traffic();
}
else losowe();
}
void guzik_on()
{
guzik = digitalRead(button); // read input value
if (guzik == LOW)
{
digitalWrite(8, LOW); //Wyłączenie diody RED
digitalWrite(9, LOW); //Wyłączenie diody YELLOW
digitalWrite(10, LOW); //Włączenie diody GREEN
traffic();
}
}
void guzik_off()
{
guzik = digitalRead(button); // read input value
if (guzik == HIGH)
{
digitalWrite(8, LOW); //Wyłączenie diody RED
digitalWrite(9, LOW); //Wyłączenie diody YELLOW
digitalWrite(10, LOW); //Włączenie diody GREEN
losowe();
}
}
void traffic() {
digitalWrite(ledPin[0], HIGH); //Włączenie diody RED
delay(red_time);
guzik_off();
digitalWrite(ledPin[1], HIGH); //Włączenie diody YELLOW
delay(yellow_time);
guzik_off();
digitalWrite(ledPin[0], LOW); //Wyłączenie diody RED
digitalWrite(ledPin[1], LOW); //Wyłączenie diody YELLOW
digitalWrite(ledPin[2], HIGH); //Włączenie diody GREEN
delay(green_time);
guzik_off();
digitalWrite(ledPin[2], LOW); //Wyłączenie diody GREEN
digitalWrite(ledPin[1], HIGH); //Włączenie diody YELLOW
delay(2000);
guzik_off();
digitalWrite(ledPin[1], LOW); //Wyłączenie diody YELLOW
}
void losowe()
{
for (int i = 0; i < numberOfLEDs; i++) {
pinMode(ledPin[i], OUTPUT);
ledState[i] = LOW;
digitalWrite(ledPin[i], LOW); // all LEDs off
nextFlash[i] = millis() + random(20, 300);
}
while (true) {
for (int i = 0; i < numberOfLEDs; i++) {
if (millis() > nextFlash[i]) {
if (ledState[i] == LOW) ledState[i] = HIGH; else ledState[i] = LOW;
digitalWrite(ledPin[i], ledState[i]);
nextFlash[i] = millis() + random(20, 300) ; // next toggle random time
guzik_on();
}
}
}
}