Skocz do zawartości
bykol123

Problem z kodem, światła dzienne kierunkowskaz

Pomocna odpowiedź

Napisano (edytowany)

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

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
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 

Udostępnij ten post


Link to post
Share on other sites

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

Udostępnij ten post


Link to post
Share on other sites
(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

Udostępnij ten post


Link to post
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

Udostępnij ten post


Link to post
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 

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...