• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Kierunkowskazy , Stop i Awaryjne.
#1
Kod:
// Przycisk Awaryjny 4
// Przycisk w lewo 7
// Przycisk Stop 6
// Przyciskj w prawo 5
// Światrło Awaryjne
// światło w lewo 8
// światło stop 10
// światło w prawo 9
// byte awaryjny

#define przyciskAwaryjny 4
#define przyciskLewy 5
#define przyciskStop 6
#define przyciskPrawy 7

#define Lewy 8
#define Stop 10
#define Prawy 9


void setup() {
 
//Lewy 
pinMode(Lewy, OUTPUT); //Dioda jako wyjście
pinMode( przyciskLewy, INPUT_PULLUP); //Przycisk jako wejście
digitalWrite(Lewy, LOW); //Wyłączenie diody

//Stop
pinMode(Stop, OUTPUT); //Dioda jako wyjście
pinMode(przyciskStop, INPUT_PULLUP); //Przycisk jako wejście
digitalWrite(Stop, LOW); //Wyłączenie diody

//Prawy 
pinMode(Prawy, OUTPUT); //Dioda jako wyjście
pinMode(przyciskPrawy, INPUT_PULLUP); //Przycisk jako wejście
digitalWrite(Prawy, LOW); //Wyłączenie diody
}

void loop() {
 
if (digitalRead(przyciskLewy) == LOW) { //Jeśli przycisk wciśnięty
    digitalWrite(Lewy, HIGH); //Włącz diodę
    delay(10000); //Czekamy 10 sekund
    digitalWrite(Lewy, LOW); //Wyłączamy diodę
  }
  if (digitalRead(przyciskStop) == LOW) { //Jeśli przycisk wciśnięty
    digitalWrite(Stop, HIGH); //Włącz diodę
    delay(10000); //Czekamy 10 sekund
    digitalWrite(Stop, LOW); //Wyłączamy diodę
  }
  if (digitalRead(przyciskPrawy) == LOW) { //Jeśli przycisk wciśnięty
    digitalWrite(Prawy, HIGH); //Włącz diodę
    delay(10000); //Czekamy 10 sekund
    digitalWrite(Prawy, LOW); //Wyłączamy diodę
  }
  if (digitalRead(przyciskAwaryjny) == HIGH) { //Jeśli przycisk wciśnięty
   
    digitalWrite(Lewy, HIGH); //Włącz diodę
    digitalWrite(Stop, HIGH); //Włącz diodę
    digitalWrite(Prawy, HIGH); //Włącz diodę
    delay(500); //Czekamy 10 sekund

    digitalWrite(Lewy, LOW); //Wyłączamy diodę
    digitalWrite(Stop, LOW); //Wyłączamy diodę
    digitalWrite(Prawy, LOW); //Wyłączamy diodę
    delay(500); //Czekamy 10 sekund   
  }
 
}
Mam problem. Kierunkowskazy działają ,stop też  ale światła awaryjne nie tak jak mają. Mają się załączać po naciśnięciu przycisku a migają zaraz po wgraniu programu. Pomocy.
 
Odpowiedź
#2
W setup nie zdefiniowałeś "#define przyciskAwaryjny 4" czy jest jako wejście/wyjście i czy pullup, dlatego ci "pływa" jego stan i w loopie odczyt jest różny i działa samoistnie bez kontroli.
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#3
Kod:
if (digitalRead(przyciskAwaryjny) == HIGH) { //Jeśli przycisk wciśnięty
Jeżeli przycisk awaryjny zdefiniujesz tak jak pozostałe to HIGH przy INPUT_PULLUP będziesz miał stale. I w każdej pętli będą Ci te światła mrugać.

Wejście INPUT_PULLUP jest podciągnięte do 5V i wciśnięcie przycisku to zwarcie go do masy (podanie LOW).

Czyli:
Kod:
if (digitalRead(przyciskAwaryjny) == LOW) { //Jeśli przycisk wciśnięty
 
Odpowiedź
#4
Czyli przycisk awaryjny podłączyć do 5V przez rezystor? Jaki rezystor? A z czego skorzystać na rowerze aby naciskając hamulec zapalił się stop? Można ustawić naciśnięcie równocześnie lewy i prawy to awaryjne?
 
Odpowiedź
#5
Czyli przycisk awaryjny podłączyć do 5V przez rezystor? Jaki rezystor? A z czego skorzystać na rowerze aby naciskając hamulec zapalił się stop? Można ustawić naciśnięcie równocześnie lewy i prawy to awaryjne? Zapomniałem spytać się jak zrobić aby sterować światłami bezprzewodowo. Same światła mogę już zrobić bez awaryjnych.
 
Odpowiedź
#6
Ustawienie wejścia jako INPUT_PULLUP powoduje włączenie rezystora 20kOhm wbudowanego na płytce. W takiej sytuacji przycisk działa jako zwarcie do masy i w stanie HIGH jest nieaktywny, w stanie LOW aktywny.

Z czego chcesz korzystać jako włącznika Twoja wola - wszystko zależy od tego jak to skonstruujesz. Na pewno musi toto wisieć na manetce. Możesz poszukać od hulajnogi elektrycznej - tam zdaje mi się napęd jest rozłączany po naciśnięciu hamulca więc jakiś czujnik już w takiej manetce siedzi. Możesz spróbować zabawy np. z akcelerometrem, ale nie wiem jak z dokładnością danych by było. Możliwości jest wiele.

Aby sterować światłami bezprzewodowo trzeba nadajnika i odbiornika, chociaż nie wiem po co Ci bezprzewodowość w tym wypadku. Zbytnia komplikacja układu, co przy Twoim stanie wiedzy może być problemem.
 
Odpowiedź
#7
(27-02-2023, 16:16)MadMrQ napisał(a): Ustawienie wejścia jako INPUT_PULLUP powoduje włączenie rezystora 20kOhm wbudowanego na płytce. W takiej sytuacji przycisk działa jako zwarcie do masy i w stanie HIGH jest nieaktywny, w stanie LOW aktywny.

Z czego chcesz korzystać jako włącznika Twoja wola - wszystko zależy od tego jak to skonstruujesz. Na pewno musi toto wisieć na manetce. Możesz poszukać od hulajnogi elektrycznej - tam zdaje mi się napęd jest rozłączany po naciśnięciu hamulca więc jakiś czujnik już w takiej manetce siedzi. Możesz spróbować zabawy np. z akcelerometrem, ale nie wiem jak z dokładnością danych by było. Możliwości jest wiele.

Aby sterować światłami bezprzewodowo trzeba nadajnika i odbiornika, chociaż nie wiem po co Ci bezprzewodowość w tym wypadku. Zbytnia komplikacja układu, co przy Twoim stanie wiedzy może być problemem.
Czyli bez Andino rezystor potrzebny. Myślę co kupić. Diody Led Pomarańczowe 5 mm 25 szt. ,diody Led Red 30 szt. $ przyciski albo przełącznik? Starczyły by dwa - tylko jak zrobić aby naciskając dwa zapalały się awaryjne? W moim wieku to już ciężko się uczyć. Wiosną stuknie mi 66 lat. Andino Nano? Lub scalak? Czytałem że można zaprogramować. Rezystory do Orange 120 om? A do Red? Na razie ćwiczyłem na symulatorze. Do ćwiczeń kupić Andino Uno i płytkę?  Bo nie zawsze mam dostęp do komputera. Mam w czym zabudować tylko że Andino Uno nie wejdzie do środka. Kuferek z zabawki  ma gdzieś 3 cm x 2 cm x 15 cm. W nim była broń żołnierza zabawki. Zabawki już nie ma a to zostawiłem. Mam rower trzykołowy Kamrat I Do tyłu kosza od kierownicy jest z 1,5  metra. Jest tu ktoś z Bytomia? Ps. Próbuję zmienić aby stop świeciło się gdy trzymam wciśnięty przycisk a po puszczerniu gasł.  Pomocy Pils.
 
Odpowiedź
#8
Photo 
(27-02-2023, 18:26)Rumuru napisał(a):
(27-02-2023, 16:16)MadMrQ napisał(a): Ustawienie wejścia jako INPUT_PULLUP powoduje włączenie rezystora 20kOhm wbudowanego na płytce. W takiej sytuacji przycisk działa jako zwarcie do masy i w stanie HIGH jest nieaktywny, w stanie LOW aktywny.

Z czego chcesz korzystać jako włącznika Twoja wola - wszystko zależy od tego jak to skonstruujesz. Na pewno musi toto wisieć na manetce. Możesz poszukać od hulajnogi elektrycznej - tam zdaje mi się napęd jest rozłączany po naciśnięciu hamulca więc jakiś czujnik już w takiej manetce siedzi. Możesz spróbować zabawy np. z akcelerometrem, ale nie wiem jak z dokładnością danych by było. Możliwości jest wiele.

Aby sterować światłami bezprzewodowo trzeba nadajnika i odbiornika, chociaż nie wiem po co Ci bezprzewodowość w tym wypadku. Zbytnia komplikacja układu, co przy Twoim stanie wiedzy może być problemem.
Czyli bez Andino rezystor potrzebny. Myślę co kupić. Diody Led Pomarańczowe 5 mm 25 szt. ,diody Led Red 30 szt. $ przyciski albo przełącznik? Starczyły by dwa - tylko jak zrobić aby naciskając dwa zapalały się awaryjne? W moim wieku to już ciężko się uczyć. Wiosną stuknie mi 66 lat. Andino Nano? Lub scalak? Czytałem że można zaprogramować. Rezystory do Orange 120 om? A do Red? Na razie ćwiczyłem na symulatorze. Do ćwiczeń kupić Andino Uno i płytkę?  Bo nie zawsze mam dostęp do komputera. Mam w czym zabudować tylko że Andino Uno nie wejdzie do środka. Kuferek z zabawki  ma gdzieś 3 cm x 2 cm x 15 cm. W nim była broń żołnierza zabawki. Zabawki już nie ma a to zostawiłem. Mam rower trzykołowy Kamrat I Do tyłu kosza od kierownicy jest z 1,5  metra. Jest tu ktoś z Bytomia? Ps. Próbuję zmienić aby stop świeciło się gdy trzymam wciśnięty przycisk a po puszczerniu gasł.  Pomocy Pils.
Tyle zrobiłem, mam problem z awaryjnymi. I jak zrobić aby gdy naprzykład sygnalizuję w lweo można było  zaświecić stop?
Kod:
// Przycisk Awaryjny 4
// Przycisk w lewo 7
// Przycisk Stop 6
// Przycisk w prawo 5
// Światrło Awaryjne
// światło w lewo 8
// światło stop 10
// światło w prawo 9
// byte awaryjny

#define przyciskAwaryjny 4
#define przyciskLewy 5
#define przyciskStop 6
#define przyciskPrawy 7

#define Lewy 8
#define Stop 10
#define Prawy 9


void setup() {
 
//Lewy 
pinMode(Lewy, OUTPUT); //Dioda jako wyjście
pinMode( przyciskLewy, INPUT_PULLUP); //Przycisk jako wejście
digitalWrite(Lewy, LOW); //Wyłączenie diody

//Stop
pinMode(Stop, OUTPUT); //Dioda jako wyjście
pinMode(przyciskStop, INPUT_PULLUP); //Przycisk jako wejście
digitalWrite(Stop, LOW); //Wyłączenie diody

//Prawy 
pinMode(Prawy, OUTPUT); //Dioda jako wyjście
pinMode(przyciskPrawy, INPUT_PULLUP); //Przycisk jako wejście
digitalWrite(Prawy, LOW); //Wyłączenie diody
}

void loop() {
 
if (digitalRead(przyciskLewy) == LOW) { //Jeśli przycisk wciśnięty

    digitalWrite(Lewy, HIGH); //Włącz diodę
    delay(10000); //Czekamy 10 sekund
    digitalWrite(Lewy, LOW); //Wyłączamy diodę
  }
  if (digitalRead(przyciskStop) == LOW) { //Jeśli przycisk wciśnięty
    digitalWrite(Stop, HIGH); //Włącz diodę
   
    digitalWrite(Stop, LOW); //Wyłączamy diodę

     } else { //Jeśli warunek nie został spełniony (przycisk  jest nie wciśnięty)

   // digitalWrite(Stop, LOW); //Włącz diodę
 
    digitalWrite(Stop, LOW); //Wyłączamy diodę

  }
  if (digitalRead(przyciskPrawy) == LOW) { //Jeśli przycisk wciśnięty

    digitalWrite(Prawy, HIGH); //Włącz diodę
    delay(10000); //Czekamy 10 sekund
    digitalWrite(Prawy, LOW); //Wyłączamy diodę
  }
 
   // if (digitalRead(przyciskAwaryjny) == LOW) { //Jeśli przycisk nie wciśnięty
     
   // digitalWrite(Lewy, LOW); //Wyłącz diodę
   // digitalWrite(Stop, LOW); //Wyłącz diodę
   // digitalWrite(Prawy, LOW); //Wyłącz diodę
    //delay(500); //Czekamy 10 sekund   

   //digitalWrite(Lewy, HIGH); //Włącz diodę
   //digitalWrite(Stop, HIGH); //Włącz diodę
  // digitalWrite(Prawy, HIGH); //Włącz diodę     
   //delay(500); //Czekamy 10 sekund   

    //digitalWrite(Lewy, LOW); //Wyłącz diodę
    //digitalWrite(Stop, LOW); //Wyłącz diodę
   // digitalWrite(Prawy, LOW); //Wyłącz diodę
   // delay(500); //Czekamy 10 sekund       
     
  } //else { //Jeśli warunek nie został spełniony (przycisk  jest wciśnięty)

   //digitalWrite(Lewy, HIGH); //Włącz diodę
   //digitalWrite(Stop, HIGH); //Włącz diodę
  // digitalWrite(Prawy, HIGH); //Włącz diodę     
   //delay(500); //Czekamy 10 sekund   

//digitalWrite(Lewy, LOW); //Wyłącz diodę
//digitalWrite(Stop, LOW); //Wyłącz diodę
//digitalWrite(Prawy, LOW); //Wyłącz diodę
//delay(500); //Czekamy 10 sekund       
  //}
 



 
 
Odpowiedź
#9
Nauczyć sie podstaw z mills i wielozadaniowość. wtedy zrozumiesz i ogarniesz
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#10
Kod:
// Przycisk Awaryjny 4
// Przycisk w lewo 7
// Przycisk Stop 6
// Przycisk w prawo 5
// Światło Awaryjne
// światło w lewo 8
// światło stop 10
// światło w prawo 9

#define przyciskAwaryjny 4
#define przyciskLewy 5
#define przyciskStop 6
#define przyciskPrawy 7

#define Lewy 8
#define Stop 10
#define Prawy 9

byte mrugaLewy = 0, mrugaPrawy = 0, mrugaStop = 0;
unsigned long zegar = 0, zegar1 = 0, zegar2 = 0;

void setup() {
//Lewy
   pinMode(Lewy, OUTPUT); //Dioda jako wyjście
   digitalWrite(Lewy, LOW); //Wyłączenie diody
   pinMode(przyciskLewy, INPUT_PULLUP); //Przycisk jako wejście

//Stop
   pinMode(Stop, OUTPUT); //Dioda jako wyjście
   digitalWrite(Stop, LOW); //Wyłączenie diody
   pinMode(przyciskStop, INPUT_PULLUP); //Przycisk jako wejście


//Prawy
   pinMode(Prawy, OUTPUT); //Dioda jako wyjście
   digitalWrite(Prawy, LOW); //Wyłączenie diody
   pinMode(przyciskPrawy, INPUT_PULLUP); //Przycisk jako wejście

//Awaryjny
   pinMode(przyciskAwaryjny, INPUT_PULLUP);
}

void loop() {
 
   zegar = millis();

// sprawdzanie stanu przycisków
   if (digitalRead(przyciskLewy) == LOW) { //Jeśli przycisk wciśnięty
      mrugaLewy = 1;    // mruga lewy, wyłącza się prawy
      mrugaPrawy = 0;
      digitalWrite(Prawy, LOW); // wyłączamy prawy kierunek
   }
 
   if (digitalRead(przyciskStop) == LOW) { //Jeśli przycisk wciśnięty
      digitalWrite(Stop, HIGH);    // włącza się stop
      mrugaStop = 0;
   }
   
   if (digitalRead(przyciskPrawy) == LOW) { //Jeśli przycisk wciśnięty
      mrugaPrawy = 1;        // mruga prawy, wyłącza się lewy
      mrugaLewy = 0;
      digitalWrite(Lewy, LOW);    // lewy zaczyna od stanu ciemnego
   }
 
   if (digitalRead(przyciskAwaryjny) == LOW) { // Jeśli wciśnięty przycisk awaryjny
      mrugaLewy = 1;    // ma mrugać wszystko
      mrugaPrawy = 1;
      mrugaStop = 1;
      digitalWrite(Lewy, LOW);    // wszystko ma mrugać począwszy od stanu ciemnego
      digitalWrite(Stop, LOW);
      digitalWrite(Prawy, LOW);
   }

// wyłączenie Stop po puszczeniu przycisku i gdy awaryjne wyłączone
   if (!mrugaStop) {    // wyłączenie pinu następuje tylko gdy Stop nie mruga
      digitalWrite(Stop, LOW);
   }

// zestaw czynności sterowanych zegarem 1
   if (zegar - zegar1 >= 1000) {    // interwał 1sek - do migania świateł
      if (mrugaLewy) {digitalWrite(Lewy, !digitalRead(Lewy));}    // zmiana stanu pinów na przeciwne
      if (mrugaPrawy) {digitalWrite(Prawy, !digitalRead(Prawy));}    // czyli mruganie :)
      if (mrugaStop) {digitalWrite(Stop, !digitalRead(Stop));}
      zegar1 = millis(); // wrzucenie do zegar1 aktualnego czasu od uruchomienia
   }
 
// zestaw czynności sterowanych zegarem 2
   if (zegar - zegar2 >= 10000) {
      if (mrugaLewy) {mrugaLewy = 0;}    // w przypadku mrugania po 10sek mruganie ma ustać
      if (mrugaPrawy) {mrugaPrawy = 0;}
      if (mrugaStop) {mrugaStop = 0;}
      zegar2 = millis();
   }                     
Tak na szybko bez zbyt wielu testów. W programie wszystko powinno być na tyle czytelne, że baw się dobrze przy modyfikacjach. Zasadniczo w przypadku takich programów jak Twój zastosowanie delay(10000) to zatrzymanie mikrokontrolera na 10 sek! A w tym czasie możesz np. chcieć skręcić w drugą stronę.

Druga sprawa - ilość LED. Na prawdę potrzebne jest aż tyle? Raz, że pobór prądu, a dwa - oślepienie innych użytkowników drogi. Wiem, że główna zasada to bądź widoczny, ale lampki rowerowe mają po 3 diody i dają radę.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości