Arduino Polska Forum

Pełna wersja: push button i czujnik halla problem z uruchomieniem
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
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(){
/*
 * ??????
 *
*/
  }
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.
dziękuję za pomoc (bounce2), wszystko działa.
pozdrawiam
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();
  }
}
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ł.