• 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
Arduino UNO , przyciski i diody
#1
Witam wszystkich 
Mam pewien problem i nie wiem jak to ugryźć , potrzebuje zrobić coś takiego aby po naciścięciu jednego przycisku S1 zapalała się dioda D1 na określony czas , w tym czasie naciśnięcie przycisku S2 spowoduje zapalenie diody D2 także na określony czas  ,następnie przycisk zostaje cały czas wcisnięty zapala się dioda D3 na określony czas , gdy dioda po upływie zadanego czasu zgasnie , zapala się dioda D4 także na określony czas , rozumiem że muszę wykorzystać kontrole stanu przycisku , i nie chciałbym używać funkcji delay tylko miils czy jest mi ktoś w stanie pomóc jak to wogóle zacząć
 
Odpowiedź
#2
(24-03-2022, 08:46)darex120 napisał(a): Witam wszystkich 
Mam pewien problem i nie wiem jak to ugryźć , potrzebuje zrobić coś takiego aby po naciścięciu jednego przycisku S1 zapalała się dioda D1 na określony czas , w tym czasie naciśnięcie przycisku S2 spowoduje zapalenie diody D2 także na określony czas  ,następnie przycisk zostaje cały czas wcisnięty zapala się dioda D3 na określony czas , gdy dioda po upływie zadanego czasu zgasnie , zapala się dioda D4 także na określony czas , rozumiem że muszę wykorzystać kontrole stanu przycisku , i nie chciałbym używać funkcji delay tylko miils czy jest mi ktoś w stanie pomóc jak to wogóle zacząć

Oczekujesz pomocy, czy chcesz gotowca?

Jeżeli pomocy to na początek proponuję kurs Forbota albo np. Tinkercad - bez konieczności bawienia się z płytką Arduino.

Jeżeli to drugie to myślę, że Twój post powinien się znaleźć w dziale Zlecenia.
 
Odpowiedź
#3
Potrzebuje pomocy , ten Tinkercard to symulator , ale także trzeba pisać program prawda a ja nie wiem od czego zacząć
 
Odpowiedź
#4
napisałem takie coś ale wywala mi błąd

#define start 12
#define stop 8
#define led 7
#define s1 11
#define s0 9
#define led1 13
int Stato_LED;
int Stato_start;
int Stato_stop;
int Stato_LED1;
int Stato_s1;
int Stato_s0;

void setup()
{
pinMode(start, INPUT_PULLUP);
pinMode(stop, INPUT_PULLUP);
pinMode(led, OUTPUT);
pinMode(s1, INPUT_PULLUP);
pinMode(s0, INPUT_PULLUP);
pinMode(led1, OUTPUT);
}

void loop()
{
Stato_start = digitalRead(start);
Stato_stop = digitalRead(stop);


if (!Stato_stop) Stato_LED=LOW;
if (!Stato_start) Stato_LED=HIGH;
digitalWrite(led,Stato_LED);

Stato_s1 = digitalRead(S1);
Stato_s0 = digitalRead(s0);


if (!Stato_s1) Stato_LED=LOW;
if (!Stato_s0) Stato_LED=HIGH;
digitalWrite(led1,Stato_LED1);
}
 
Odpowiedź
#5
jeżeli tak napiszesz define to w Stato_s1 podstawi Stato_11

przy #define trzeba uważać i np. zamiast start zastosować zapis START_PIN - niepowtarzalny dla całego skeczu

dodatkowo w Stato_s1 = digitalRead(S1) masz dużą literę zamiast małej (s1)
 
Odpowiedź
#6
Poprawilem ale nadal nie o to mi chodzi , czytam artykuly o przyciskach i ledach ale nic nie kapuje
 
Odpowiedź
#7
otwórz sobie Arduino IDE, wybierz spośród przykładów 02. Digital > Button - tam jest wszystko - przycisk zapalający diodę
 
Odpowiedź
#8

Witam 
Mam pytanie w jaki sposób zamienić funkcję DELAY na MIILS i prośba o sprawdzenie kodu , niby wszystko działa 

Kod:
int buttonPin1 = 2; // Start button
int buttonPin2 = 3; //button
int buttonPin3 = 4;
int buttonPin4 = 5;
int greenLedPin = 10; // green led start status int
int redLedPin = 11; //red led stop status
int motorPin = 12; // the motor's pin
int motorPin1 = 13;
int buttonStatus1 = 0;
int buttonStatus2 = 0;
int buttonStatus3 = 0;
int buttonStatus4 = 0;

void setup() {
pinMode(motorPin, OUTPUT);
pinMode(motorPin1 ,OUTPUT);
pinMode(greenLedPin, OUTPUT);
pinMode(redLedPin, OUTPUT);
pinMode(buttonPin1, INPUT_PULLUP);
pinMode(buttonPin2, INPUT_PULLUP);
pinMode(buttonPin3 ,INPUT_PULLUP);
pinMode(buttonPin4 ,INPUT_PULLUP);
digitalWrite(redLedPin, LOW);//Set the red led initially to High
digitalWrite(motorPin, LOW);//Set the motorpin initially to LOW
digitalWrite(motorPin1 ,LOW);
digitalWrite(greenLedPin ,LOW);

}

void loop() {
 
buttonStatus1 = !digitalRead(buttonPin1);
buttonStatus2 = !digitalRead(buttonPin2);
buttonStatus3 = !digitalRead(buttonPin3);
buttonStatus4 = !digitalRead(buttonPin4);

  if (buttonStatus1 == HIGH && buttonStatus2 == LOW) { // if the start button is pressed (AND stop button not)
    delay(3000);
digitalWrite(motorPin, HIGH); // turn the motor ON
digitalWrite(greenLedPin, HIGH); //turn the green led indicator ON
digitalWrite(redLedPin, LOW); //turn the red led indicator OFF
}
 
  if (buttonStatus1 == LOW && buttonStatus2 == HIGH) { // if stop button is pressed (AND the start off)
digitalWrite(motorPin, LOW); // turn the motor OFF
digitalWrite(greenLedPin, LOW); //turn the green led indicator OFF
digitalWrite(redLedPin, HIGH); //turn the red led indicator ON
}
if (buttonStatus2 == HIGH && buttonStatus3 == LOW) { // if stop button is pressed (AND the start off)
  delay(9000);
digitalWrite(motorPin1, HIGH); // turn the motor OFF
digitalWrite(greenLedPin, HIGH); //turn the green led indicator OFF
digitalWrite(redLedPin, LOW); //turn the red led indicator O
}
  if (buttonStatus2 == LOW && buttonStatus3 == HIGH) { // if stop button is pressed (AND the start off)
digitalWrite(motorPin1, LOW); // turn the motor OFF
digitalWrite(greenLedPin, LOW); //turn the green led indicator OFF
digitalWrite(redLedPin, HIGH); //turn the red led indicator O
}

  if (buttonStatus4 == HIGH && buttonStatus3 == LOW) { // if stop button is pressed (AND the start off)
digitalWrite(motorPin1, LOW); // turn the motor OFF
digitalWrite(greenLedPin, LOW); //turn the green led indicator OFF
digitalWrite(redLedPin, LOW); //turn the red led indicator O
}
  if (buttonStatus4 == HIGH && buttonStatus2 == LOW) { // if stop button is pressed (AND the start off)
    delay (3000);
digitalWrite(motorPin, HIGH); // turn the motor OFF
digitalWrite(greenLedPin, LOW); //turn the green led indicator OFF
digitalWrite(redLedPin, LOW); //turn the red led indicator O
}
}
 
Odpowiedź
#9
Przykład użycia millis() masz w programie Arduino "BlinkWithoutDelay". I mnóstwo innych na tym forum.
Zamiast zatrzymywać program delay na określoną liczbę ms, by nie wykonywać czynności zbyt szybko zapisujesz sobie stan licznika z funkcji millis() i pozwalasz wykonywać się loop bez przeszkód, a pomijasz wykonywanie czynności, na które jeszcze czas nie nadszedł, sprawdzasz czy od poprzedniego użycia danego bloku programu upłynęła określona liczba ms i wtedy ponawiasz wykonanie.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#10
Czyli sprawdzanie czy nie nadszedł czas na wykonanie zadania wyglądałby np tak
tworzysz zmienne które przechowują dużą ilość liczb ponieważ millis w arduino rośnie wraz z upływem czasu od włączenia urządzenia dlatego najlepiej jest użyć zmiennie typu unsigned long a nie np int bo po około 30 sekunach zapełniła by się górna granica zmiennej int i program by stanął znaczy się ta funkcja. Wiec kawałek kodu wygladałby tak

unsigned long newTime;
unsigned long oldTime;

void loop (){
newTime = millis();
if(newTime - oldTime >= 1000){
//Twój blok który wykona się po określonym czasie np wyłączenie danej diody
oldTime = newTime;
}
}
w tym przypadku co sekunde będzie wykonywany kod zawarty w ifie tym samym kiedy program będzie odliczał 1000 ms może lecieć dalej
w dodatku jak chcesz kilka takich różnych ifów sprawdzających czy nie upłynął dany czas nie musisz tworzyć nowych zmiennych dla newTime tylko wystarczy oldTime2, oldTime3 itp itd
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości