• 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
push button i czujnik halla problem z uruchomieniem
#1
Cześć,
czy może mi ktoś podpowiedzieć jak powinna wyglądać pętla loop żeby wystartować poniższe, za pomocą przycisku??


#include <AccelStepper.h>



const int hallSensorPin = 8;
// initialize the stepper library on pins 8 through 11:
AccelStepper stepper1(1, 2, 3);

void setup() {
  home();
  boolean stan=0;
}

void home()
{
  stepper1.setMaxSpeed(200);
  stepper1.moveTo (10000);
  stepper1.setSpeed(200);

  while (digitalRead(hallSensorPin) != 0)
  {
    stepper1.runSpeed();
  }
  void loop(){
/*
 * ??????
 *
*/
  }
 
Odpowiedź
#2
Dodaj sobie zmienną np. int, naucz się obsługiwać przycisk tak by wciśnięcie było prawidłowo rozpoznawane, możesz użyć biblioteki bounce2 (podobnych jest na kopy), jak przycisk wciśniesz zmień stan zmiennej na 1, jak zmienna ma wartość 1 ma wchodzić w ifa gdzie pozwalasz silnikowi na ruch if(zmienna) stepper1.run();. Program nie wejdzie do loop jeśli nie wyjdzie z pętli while. Wszystkie metody do klasy masz w pliku keywords.txt. Naucz się która do czego służy.
 
Odpowiedź
#3
dziękuję za pomoc (bounce2), wszystko działa.
pozdrawiam
 
Odpowiedź
#4
Cześć,
jednak nie do końca działa tak jak bym tego chciał. Naciskam przycisk silnik obraca do momentu włączenia czujnika halla i dalej nic !
Będę bardzo wdzięczny za kolejną podpowiedź Smile

#include <AccelStepper.h>
#include <Bounce2.h>
#define BUTTON_PIN 12
#define LED_PIN 13
int ledState = LOW;
Bounce debouncer = Bounce();
const int hallSensorPin = 46;
int hallState = LOW;
AccelStepper stepper1(1, 2, 3);
void setup() {
  debouncer.attach(BUTTON_PIN, INPUT_PULLUP); // Attach the debouncer to a pin with INPUT_PULLUP mode
  debouncer.interval(25); // Use a debounce interval of 25 milliseconds
  pinMode(LED_PIN, OUTPUT); // Setup the LED
  digitalWrite(LED_PIN, ledState);
  digitalWrite(hallSensorPin,hallState);
}
void ruszaj ()
{
  stepper1.moveTo (10);
}
void szukaj()
{
  stepper1.setMaxSpeed(200);
  stepper1.moveTo (10000);
  stepper1.setSpeed(200);

  while (digitalRead(hallSensorPin) != 0)
  {
    stepper1.runSpeed();
  }

  stepper1.setCurrentPosition(0);
  stepper1.stop();
}


void loop() {
  debouncer.update(); // Update the Bounce instance


  if ( debouncer.fell() ) {  // Call code if button transitions from HIGH to LOW
    ledState = !ledState; // Toggle LED state
    digitalWrite(LED_PIN, ledState); // Apply new LED state
  }
  if (ledState != 0) {
    szukaj();
    delay(20);
    ruszaj();

  }

  if ((ledState != 0) && (hallState != 0)) {
    delay(20);
    ruszaj();
    delay(20);
    szukaj();
  }
}
 
Odpowiedź
#5
Pierwszą podpowiedzią będzie użyj edycji i wstaw podany kod w "code". Druga to zależy, rozumiem, że czujnik halla to jakaś krańcówka, silnik powinien mieć pozwolenie na pracę tylko jeśli punkt docelowy jest w przeciwnym kierunku. Po osiągnięciu obecnego punktu powinieneś też wyzerować pozwolenie na pracę od przycisku. Lub nie, zależy co chcesz by robił.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości