Kierunkowskazy , Stop i Awaryjne. - Rumuru - 25-02-2023
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.
RE: Kierunkowskazy , Stop i Awaryjne. - Jarewa0606 - 26-02-2023
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.
RE: Kierunkowskazy , Stop i Awaryjne. - MadMrQ - 26-02-2023
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
RE: Kierunkowskazy , Stop i Awaryjne. - Rumuru - 26-02-2023
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?
RE: Kierunkowskazy , Stop i Awaryjne. - Rumuru - 26-02-2023
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.
RE: Kierunkowskazy , Stop i Awaryjne. - MadMrQ - 27-02-2023
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.
RE: Kierunkowskazy , Stop i Awaryjne. - Rumuru - 27-02-2023
(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.
RE: Kierunkowskazy , Stop i Awaryjne. - Rumuru - 01-03-2023
(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
//}
RE: Kierunkowskazy , Stop i Awaryjne. - Jarewa0606 - 01-03-2023
Nauczyć sie podstaw z mills i wielozadaniowość. wtedy zrozumiesz i ogarniesz
RE: Kierunkowskazy , Stop i Awaryjne. - MadMrQ - 02-03-2023
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ę.
|