pierwsze kroki i... ściana

Masz problem, z którym nie możesz sobie poradzić? Pisz śmiało!
ODPOWIEDZ
MISIEK666-6
Młodszy majsterkowicz
Posty: 2
Rejestracja: 8 lut 2019, 00:55

pierwsze kroki i... ściana

Post autor: MISIEK666-6 » 8 lut 2019, 01:19

Cześć mam problem z podstawami.
Po trzech (pierwszych) godzinach z arduino udało mi się "sklecić" coś takiego:
(światła dzienne na 7 ledach )

Kod: Zaznacz cały

void setup() {

pinMode(2,INPUT_PULLUP);
pinMode(3,INPUT_PULLUP);
pinMode(6,OUTPUT);
pinMode(7, OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(12,HIGH);
}
void loop(){
delay(1000);
while(digitalRead(2) == LOW)  //rozpalanie diod 
delay(50);
digitalWrite(6,LOW);
delay(270);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
delay(260);
digitalWrite(7,HIGH);
digitalWrite(8,LOW);
delay(250);
digitalWrite(8,HIGH);
digitalWrite(9,LOW);
delay(240);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
delay(230);
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
delay(220);
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
delay(210);
digitalWrite(12,HIGH);

digitalWrite(6,LOW);

delay(200);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
delay(190);
digitalWrite(7,HIGH);
digitalWrite(8,LOW);
delay(180);
digitalWrite(8,HIGH);
digitalWrite(9,LOW);
delay(170);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
delay(160);
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
delay(150);
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
delay(140);
digitalWrite(12,HIGH);

digitalWrite(6,LOW);
delay(130);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
delay(120);
digitalWrite(7,HIGH);
digitalWrite(8,LOW);
delay(110);
digitalWrite(8,HIGH);
digitalWrite(9,LOW);
delay(100);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
delay(100);
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
delay(100);
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
delay(100);
digitalWrite(12,HIGH);


//dopalanie
digitalWrite(6,LOW);
delay(100);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
delay(100);
digitalWrite(7,HIGH);
digitalWrite(8,LOW);
delay(100);
digitalWrite(8,HIGH);
digitalWrite(9,LOW);
delay(100);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
delay(100);
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
delay(100);
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
delay(100);
digitalWrite(6,LOW);
delay(100);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
delay(100);
digitalWrite(7,HIGH);
digitalWrite(8,LOW);
delay(100);
digitalWrite(8,HIGH);
digitalWrite(9,LOW);
delay(100);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
delay(100);
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
delay(100);
digitalWrite(6,LOW);
delay(100);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
delay(100);
digitalWrite(7,HIGH);
digitalWrite(8,LOW);
delay(100);
digitalWrite(8,HIGH);
digitalWrite(9,LOW);
delay(100);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
delay(100);
digitalWrite(6,LOW);
delay(100);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
delay(100);
digitalWrite(7,HIGH);
digitalWrite(8,LOW);
delay(100);
digitalWrite(8,HIGH);
digitalWrite(9,LOW);
delay(100);
digitalWrite(6,LOW);
delay(100);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
delay(100);
digitalWrite(7,HIGH);
digitalWrite(8,LOW);
delay(100);
digitalWrite(6,LOW);
delay(95);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
delay(90);
digitalWrite(6,LOW);
delay(1000);

while (digitalRead(2) == HIGH) // pin in gaszący
delay(50);
//wygaszanie
digitalWrite(6,HIGH);
delay(270);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
delay(260);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
delay(250);
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
delay(240);
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
delay(230);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
delay(220);
digitalWrite(11,LOW);
digitalWrite(12,HIGH);
delay(210);
digitalWrite(12,LOW);
digitalWrite(6,HIGH);
delay(200);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
delay(190);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
delay(180);
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
delay(170);
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
delay(160);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
delay(150);
digitalWrite(11,LOW);
digitalWrite(12,HIGH);
delay(140);
digitalWrite(12,LOW);
digitalWrite(6,HIGH);
delay(130);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
delay(120);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
delay(110);
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
delay(100);
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
delay(100);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
delay(100);
digitalWrite(11,LOW);
digitalWrite(12,HIGH);
delay(100);
digitalWrite(12,LOW);

//gaszenie
digitalWrite(6,HIGH);
delay(100);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
delay(100);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
delay(100);
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
delay(100);
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
delay(100);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
delay(100);
digitalWrite(11,LOW);
digitalWrite(12,HIGH);
delay(100);
digitalWrite(6,HIGH);
delay(100);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
delay(100);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
delay(100);
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
delay(100);
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
delay(100);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
delay(100);
digitalWrite(6,HIGH);
delay(100);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
delay(100);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
delay(100);
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
delay(100);
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
delay(100);
digitalWrite(6,HIGH);
delay(100);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
delay(100);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
delay(100);
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
delay(100);
digitalWrite(6,HIGH);
delay(100);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
delay(100);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
delay(100);
digitalWrite(6,HIGH);
delay(95);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
delay(90);
digitalWrite(6,HIGH);
delay(1000);

}
i działa, lecz potrzebuję zapalić dwie diody (obojętne które, gdy wszystkie diody są wygaszone) gdy na pinie 3 pojawi się sygnał ( z kierunkowskazu czyli przerywany ) -po zaniknięciu impulsów diody muszą zgasnąć. Jak już zauważyłem polecenie while zatrzymuje resztę poleceń, a ify mnie
przerosły przerosły bo gdy jest warunek spełniony z ifem to cały cykl rozpalania czy gaszenie jest w loop-ie. Proszę o pomoc a nie odnośniki do ,,podstawy w arduino" tak wiem, że są niezbędne.pozdrawiam;)
Ostatnio zmieniony 8 lut 2019, 17:31 przez MrLewerence, łącznie zmieniany 1 raz.
Powód: kod programu w znaczniku code a nie quote ;)

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Awatar użytkownika
Marhef
Złota rączka
Posty: 1078
Rejestracja: 18 lis 2011, 02:18

Re: pierwsze kroki i... ściana

Post autor: Marhef » 8 lut 2019, 10:05

Nie do końca wiem, jak rozwiązać Twój problem. Ale zamiana while na if powinna być prosta.
Chcesz, żeby rozpalenie albo gaszenie wykonało się raz? Z tego, co widzę, w zapisie masz błędy. Na przykład w liniach gdzie masz while, to while dotyczy tylko jednej instrukcji - opóźnienia.
Piszesz, żeby nie odsyłać Cię do podstaw... ale bez nich niewiele napiszesz. Znaczy, możesz napisać program, ale nie będziesz wiedział, jak on działa.
Strasznie dużo kodu napisałeś, a można to napisać dużo krócej. A będzie działało dokładnie tak samo.

Opisz dokładnie, co chciałeś osiągnąć. Ale dokładnie opisz! To, co tu wstawiłeś. I to, co chcesz zrobić. Będzie łatwiej pomóc. Tego kodu nie rozumiem...
Awatar użytkownika
MrLewerence
Majsterkowicz
Posty: 218
Rejestracja: 12 paź 2013, 20:48
Lokalizacja: Lohr am Main [DE/MSP]

Re: pierwsze kroki i... ściana

Post autor: MrLewerence » 8 lut 2019, 17:48

Podejrzewam, że chodzi o jakiś efekt typu knight rider... ;)

Spróbuj to przeanalizować i tak zrobić:

Kod: Zaznacz cały

const int buttonPin = 12;

int pinArray[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
int count = 0;
int timer = 30;
int mode = 0;
int buttonState = 0;

void setup(){
    for (count=0;count<10;count++) {
        pinMode(pinArray[count], OUTPUT);
        pinMode(buttonPin, INPUT);
    }
}

void loop() {
    buttonState = digitalRead(buttonPin);
    
    if (buttonState == HIGH) {if (mode!=3){mode = mode+1;} 
                              else {mode=0;}}
    
    if (mode==0){
        for (count=0;count<9;count++) {
            digitalWrite(pinArray[count], HIGH);
            delay(timer);
            digitalWrite(pinArray[count + 1], HIGH);
            delay(timer);
            digitalWrite(pinArray[count], LOW);
            delay(timer*2);
        }
        for (count=9;count>0;count--) {
            digitalWrite(pinArray[count], HIGH);
            delay(timer);
            digitalWrite(pinArray[count - 1], HIGH);
            delay(timer);
            digitalWrite(pinArray[count], LOW);
            delay(timer*2);
        }
    } else if (mode==1) {
    
        for (count=0;count<9;count++) {
            digitalWrite(pinArray[count], HIGH);
            delay(timer);
        }
        for (count=0;count<9;count++) {
            digitalWrite(pinArray[count], LOW);
            delay(timer);
        }
        for (count=0;count<9;count++) {
            digitalWrite(pinArray[9-count], HIGH);
            delay(timer);
        }
        for (count=0;count<9;count++) {
            digitalWrite(pinArray[9-count], LOW);
            delay(timer);
        }
    
    } else if (mode==2) {
        for (count=0;count<5;count++) {
            digitalWrite(pinArray[4-count], HIGH);
            digitalWrite(pinArray[5+count], HIGH);
            delay(timer);
            digitalWrite(pinArray[6+count], HIGH);
            digitalWrite(pinArray[3-count], HIGH);
            
            digitalWrite(pinArray[4-count], LOW);
            digitalWrite(pinArray[5+count], LOW);
            delay(timer*2);
    }
    
    } else if (mode==3) {
        for (count=0;count<5;count++) {
            digitalWrite(pinArray[count], HIGH);
            digitalWrite(pinArray[9-count], HIGH);
            delay(timer);
            digitalWrite(pinArray[count + 1], HIGH);
            digitalWrite(pinArray[9-count - 1], HIGH);
            digitalWrite(pinArray[count], LOW);
            digitalWrite(pinArray[9-count], LOW);
            delay(timer*2);
        }
        for (count=0;count<4;count++) {
            digitalWrite(pinArray[4-count], HIGH);
            digitalWrite(pinArray[5+count], HIGH);
            delay(timer);
            digitalWrite(pinArray[6+count], HIGH);
            digitalWrite(pinArray[3-count], HIGH);
            digitalWrite(pinArray[4-count], LOW);
            digitalWrite(pinArray[5+count], LOW);
            delay(timer*2);
        }
    }
}
Przykład świateł knight rider z 3 trybami pracy wybieranymi jednym przyciskiem dla 10 diod...
MISIEK666-6
Młodszy majsterkowicz
Posty: 2
Rejestracja: 8 lut 2019, 00:55

Re: pierwsze kroki i... ściana

Post autor: MISIEK666-6 » 8 lut 2019, 20:03

Dziękuję za zainteresowanie i chęć pomocy.
Efekt o który chodzi udało mi się uzyskać, może trochę w skomplikowany sposób.
VID_20190208_134330_480x360.mp4
i
VID_20190208_134342_480x360.mp4
Problemem (przynajmniej dla mnie)jest,
gdy wstawiam ify i warunki zostaną spełnione to ledy znów zaczynają się rozpalać lub gasnąć, a nie pozostają w "ostatniej pozycji"
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
ODPOWIEDZ

Strony partnerskie: