Liczba postów: 5
Liczba wątków: 1
Dołączył: Dec 2019
Reputacja:
0
26-12-2019, 00:21
(Ten post był ostatnio modyfikowany: 26-12-2019, 01:17 przez marhes.)
Cześć,
próbuję przycisk chwilowy wykorzystać do włączania/wyłączania silnika krokowego. Wykorzystuję zestaw uno. Jedyny pomysł jaki mi przychodzi to zasilać silniczek 5V 28BY-48 z pinu cyfrowego wyjścia, który mogę oprogramować tak aby włączał się lub wyłączał kiedy użyję przycisku. Niestety przypuszczam, że nie jest to dobry sposób bo silniczek nie chce się włączać choć jestem pewny, że na pin prawidłowo się włącza i wyłącza. Zapomniałem dodać, że przyciski jest z diodą podświetlającą, którą tez steruję z jednego pin cyfrowego.
Z góry dziękuję za podpowiedź.
Liczba postów: 178
Liczba wątków: 12
Dołączył: Feb 2018
Reputacja:
7
Wiesz że silniczek krokowy ma ciut więcej wyprowadzeń niż +5V i GND i ot tak z jednego pinu cyfrowego bezpośrednio raczej nie zadziała (nie wnikam ile w ogóle prądu pobiera, ale pewnie też za dużo dla Atmegi, tyle dobrze że nie uszkodziłeś atmegi bo silniczek nie zadzialal) ?
Liczba postów: 880
Liczba wątków: 19
Dołączył: Jun 2018
Reputacja:
42
Czasami włączy/wyłączy bo nie rozumiesz drgania styku i komend,
Te dalay() to wielkie nie porozumienie praktycznie do niczego nie potrzebne. A te "while" blokuje wykonania "myStepper.step"
Co to za przycisk?? bistabilny czy monostabilny?
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą.
Liczba postów: 880
Liczba wątków: 19
Dołączył: Jun 2018
Reputacja:
42
(26-12-2019, 21:35)marhes napisał(a): Funkcja delay() oraz pusta pętla while zastosowana po to aby sprawnie włączało się i wyłączało oświetlenie dla przycisku. Tak w tutorialach podpatrzyłem i działa to całkiem sprawnie.
Tak ale blokuje silniczek..
użyj funkcji nie blokującej bez while bez długiego blokowania.
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą.
Liczba postów: 5
Liczba wątków: 1
Dołączył: Dec 2019
Reputacja:
0
Nie mam pomysłu. I zdecydowanie nie rozumiem co masz na myśli, oprócz tego, że wszystko jest do bani. Jedyne co mi przychodzi na myśl, to zmienić przycisk na pojedynczy lub może na bistabilny, który poda napięcie do arduino, i wtedy wykona się jakiś tam program dla silniczka.
W każdym razie dziękuję, że starałeś się pomóc.
Liczba postów: 880
Liczba wątków: 19
Dołączył: Jun 2018
Reputacja:
42
27-12-2019, 23:14
(Ten post był ostatnio modyfikowany: 27-12-2019, 23:15 przez Jarewa0606.)
Kod:
#include <Stepper.h>
//ustawienia dla silnika
const int stepsPerRevolution = 64;
signed int direction = -1;
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);
long motorSpeed = 256;
//--------------------------
boolean level = 0; // poziom początkowy oswietlenia i pracy silnika
uint32_t Tims =0;
uint8_t ostatni_odczyt =0;
uint8_t stan_sw =0;
void setup() {
myStepper.setSpeed(motorSpeed);
pinMode(3,OUTPUT); //oswietlenie przycisku
pinMode(2,INPUT_PULLUP); // przycisk
digitalWrite(3,level);
}
void loop() {
//włączenie silnika w zależnosci od poziomu
if(level){
myStepper.step(direction);
}
//----------------------------
//obsługa przycisku chwilowego
uint8_t odczyt = digitalRead(2);
if(odczyt != ostatni_odczyt){
Tims=millis();
}
if(millis()- Tims >= 100UL){
if(odczyt!=stan_sw){
stan_sw=odczyt;
if(stan_sw==LOW){
level = !level;
digitalWrite(3,level);
}
}
}
}
Jak zadziała to pomyśl co zrobiłem...
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą.
Liczba postów: 5
Liczba wątków: 1
Dołączył: Dec 2019
Reputacja:
0
Działa i to bardzo ładnie.
Generalnie chodzi tu o to aby nasłuchiwać sygnał od przycisku, jeżeli się zmieni po 100 milisekundach (zmieniłem na 10 bo dla 100 nie chciało działać) w każdym razie pewnie po ustabilizowaniu styków sprawdza czy na pewno przycisk został wciśnięty i jeżeli potrzeba zmienia poziom sygnału dla diody i oczywiście silnika.
Dziękuję bardzo. Nie wpadłbym na to.
Ale mam pytanie. Czy pętla while, którą wcześniej użyłem zatrzymywała mój program czy nie, bo już zgłupiałem. Tutorial wskazywał, że pętła while działała tak długo, aż był wciśnięty przycisk.
Liczba postów: 880
Liczba wątków: 19
Dołączył: Jun 2018
Reputacja:
42
(28-12-2019, 20:56)marhes napisał(a): Generalnie chodzi tu o to aby nasłuchiwać sygnał od przycisku, jeżeli się zmieni po 100 milisekundach (zmieniłem na 10 bo dla 100 nie chciało działać)
Nasłuchiwać to się zgadza, ciągle odczytuje w pętli stan przycisku. A te 100ms nie chodzi o zmianę lecz o stan przycisku millis() wyeliminował krótkie zmiany przycisku czyli wszystkie zmiany które trwały poniżej 100ms były odrzucane. Dziwne że nie działało bo powinno tylko przycisk musi być dłużej naciśnięty powyżej 100ms i przerwa miedzy przyciskaniem powyżej 100ms.
(28-12-2019, 20:56)marhes napisał(a): Ale mam pytanie. Czy pętla while, którą wcześniej użyłem zatrzymywała mój program czy nie, bo już zgłupiałem. Tutorial wskazywał, że pętła while działała tak długo, aż był wciśnięty przycisk.
W twoim przypadku działał tak długo dopóki nie włączyłeś przycisk. I zablokował cały loop teoretycznie
if(level){
myStepper.step(direction);
}
wykonywał sie tylko jak był przyciśnięty przycisk i co drugi raz..
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą.