Skocz do zawartości

Problem z kodem, światła dzienne kierunkowskaz


bykol123

Pomocna odpowiedź

Witam, mam mały problem, coś trzeba dodać do kodu ale już nie wiem co. Jestem nowy i słabo zaawansowany a chciałbym zrobić coś w stylu świateł dziennych i kierunkowskazów dynamicznych jako symulacja na arduino, mianowicie 

świeci światło dzienne, jak włącza się kierunkowskaz gaśnie dzienne mruga kierunek, jak gaśnie kierunek po kilku s włącza się dzienne

napisałem taki kod:

http://wklejto.pl/855926

void setup() 
{   
  pinMode(13, OUTPUT); //dioda
  pinMode(7, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(A5, INPUT_PULLUP); //przycisk
  digitalWrite(13, HIGH); //dioda off
}
      void mruganie ()
{
   digitalWrite(7, HIGH);
 delay(500);
  digitalWrite(6, HIGH);
  delay(500);
   digitalWrite(5, HIGH);
   delay(500);
    digitalWrite(4, HIGH);
    delay(500);
  digitalWrite(7, LOW);
  digitalWrite(6, LOW);
   digitalWrite(5, LOW);
    digitalWrite(4, LOW);
    //delay(100);
    
}
void loop()  
{  
  if(digitalRead(A5) == LOW) //jesli przycisk wcisnienty
  {
    digitalWrite(13, LOW); //dioda on
    //delay(3000);
    mruganie ();
    }    
    else //jesli nie
    {
      delay(2000);
      digitalWrite(13, HIGH);//dioda off
      //delay(2000);
     }
}

jednak żeby zgasło dzienne i zapaliły się kierunku musze podać sygnał przez 3s, a chciałem żeby po 3s zaświeciło się dzienne, co musiałbym zmienić w  kodzie (sygnał mruga kierunek, sygnał mruga kierunek, brak sygnału po kilku s włącza się dzienne [zielona dioda]) ?

jest też możliwe w arduino, żeby dzienne świeciło mocniej, a np po podaniu stanu wysokiego na jakiś pin dzienne przygasło np o 30%?

 

 

Edytowano przez Gieneq
Zachęcam do używania bloku kodu
Link do komentarza
Share on other sites

Jeśli masz problem z tak prostym, wydawałoby się, programem to znaczy, że za bardzo skupiasz się na szczegółach implementacji a za mało myślisz o algorytmie. Oczywiście możemy tutaj napisać w 5 minut gotowy kod, ale mam nadzieję, że nie oto Ci chodzi. Moja rada jest więc taka: napisz w numerowanych punktach to co chcesz by ten program robił. To naprawdę pomaga skupić myśli. Jeśli nigdy takich rzeczy nie robiłeś (a pewnie nie, sądząc po wynikach) to być może bardziej przypasuje Ci reprezentacja graficzna algorytmów:

http://oblicz.com.pl/rysujemy-algorytmy-wstep-do-schematow-blokowych/

Czekamy zatem na dobry plan działania lub ładny rysunek (bez przesady, może być zdjęcie kartki papieru). Jeśli po zadaniu kilku pytań kontrolnych Twój plan/rysunek się obroni (sprawdź najpierw samemu, przesymuluj we własnej głowie jak to działa) to będzie spora szansa, że przeniesiony do jakiegoś języka programowania zrobi co miał zrobić. Powodzenia.

Link do komentarza
Share on other sites

chodzi dokładnie o to co mam w programie, tylko nie wiem czemu zamiast po puszczeniu przycisku dioda zapala się po 3s (i o to mi chodzi) ale ponad to musze też trzymać przycisk 3s żeby zaczęły świecić żółte. wydaje mi się, że trzeba zbudować troszkę inaczej program, ale nie mam pomysłu jak i dlaczego tak jest.

chodzi o coś takiego 

przycisk wciśnięty-> gaśnie zielona dioda świecą żółte, jeśli w przeciągu 3s wcisne przycisk kolejny raz świecą żółte-> jeśli przycisk nie jest wciśnięty pow 3s zapala się dioda zielona 

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

(edytowany)
23 godziny temu, Gieneq napisał:

@bykol123 przepisz program tak żeby wiedzieć która dioda jest która, zielona, żółta itd.

http://www.wklejto.pl/856334

o to chodziło ? ^.^

void setup() 
{   
  pinMode(13, OUTPUT); //dioda zielona 
  pinMode(7, OUTPUT); //dioda żółta
  pinMode(6, OUTPUT);//dioda żółta
  pinMode(5, OUTPUT);//dioda żółta
  pinMode(4, OUTPUT);//dioda żółta
  pinMode(A5, INPUT_PULLUP); //przycisk
  digitalWrite(13, HIGH); //dioda włączona po podłączeniu
}
      void mruganie ()
{
   digitalWrite(7, HIGH);
 delay(100);
  digitalWrite(6, HIGH);
  delay(100);
   digitalWrite(5, HIGH);
   delay(100);
    digitalWrite(4, HIGH);
    delay(100);
  digitalWrite(7, LOW);
  digitalWrite(6, LOW);
   digitalWrite(5, LOW);
    digitalWrite(4, LOW);
    //delay(100);
    
}
void loop()  
{  
  if(digitalRead(A5) == LOW) //jesli przycisk wcisnienty
  {
    digitalWrite(13, LOW); //dioda sielona off
    //delay(3000);
    mruganie (); //sekwencja mrugania diód żółtych
    }    
    else //jesli nie
    {
      //delay(2000);
      digitalWrite(13, HIGH);//dioda zielona on
      //delay(2000);
     }
}

 

Edytowano przez Gieneq
Zachęcam do używania bloku kodu
Link do komentarza
Share on other sites

W kółko wykonuje ci sie fragmen "else" - czyli ciągle uruchamiasz czekanie na 2 sekundy, jak w tym czasie "wciskasz" przycisk to nic się nie dzieje, bo wykonuje się delay(2000).

Przenieś delay i digitalwrite zaraz za mruganie() i po sprawie. Else jest w ogóle niepotrzebne.

  • Lubię! 1
Link do komentarza
Share on other sites

Dnia 23.09.2020 o 11:20, matomo napisał:

W kółko wykonuje ci sie fragmen "else" - czyli ciągle uruchamiasz czekanie na 2 sekundy, jak w tym czasie "wciskasz" przycisk to nic się nie dzieje, bo wykonuje się delay(2000).

Przenieś delay i digitalwrite zaraz za mruganie() i po sprawie. Else jest w ogóle niepotrzebne.

niestety nie działa, można do tego mojego wrzucić tylko funkcje millis ?  żeby nie dawać tego delaya 

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.