Skocz do zawartości

Pomocna odpowiedź

nic nie odpinaj... popelnilem jeden blad (jak narazie) wgraj to... 

#include <TM1638plus.h>


#define  STROBE_TM 2 
#define  CLOCK_TM 3  
#define  DIO_TM 4 

bool high_freq = false; 


int MIN = 100;
int MAX = 300;
int TIME_UP = 5;
int TIME_DOWN = 5;
int PIN_HALL = 12;
int CLEN_OBR = 15;
int R1 = 6;
int R2 = 7;
int MAX_OBR = 20;
int MIN_OBR = 50;


int stan = 0;
int stan1 = 0;
int stan2 = 0;
int stan3 = 0;
int stan4 = 0;
int stan5 = 0;
int stan6 = 0;
int stan7 = 0;

int obr_pot;
int obr;
int kopia_obr_nastawa;
int kopia_obr;
int obr_nastawa;

long time_obr;
long time_zero;
long last_up;
long last_down; 

TM1638plus tm(STROBE_TM, CLOCK_TM , DIO_TM, high_freq);


void setup() {
  pinMode(R1, OUTPUT);
  pinMode(R2, OUTPUT);
  pinMode(PIN_HALL, INPUT_PULLUP);
  
  tm.displayBegin();
}

void loop() {
  obr_nastawa = map(analogRead(A0), 0, 1023, MIN, MAX);

  if (digitalRead(PIN_HALL) == HIGH && stan == 0) {
    stan = 1;
    time_obr = millis();
    time_zero = millis();
    delay(30);
  } else if (digitalRead(PIN_HALL) == LOW && stan == 1) {
    stan = 2;
    time_zero = millis();
  } else if (digitalRead(PIN_HALL) == HIGH && stan == 2) {
    stan = 0;
    obr = 60000 / (millis() - time_obr);
    time_zero = millis();
  }

  if (millis() - time_zero >= (CLEN_OBR * 1000) && stan7 == 1) {
    stan7 = 0;
    obr = 0;
    time_zero = millis();
  }

  lcd();
  sterowanie_silownik();
}


void lcd() {
  if (obr != kopia_obr || obr_nastawa != kopia_obr_nastawa) {
    kopia_obr = obr;
    kopia_obr_nastawa = obr_nastawa;
    tm.reset();
    tm.DisplayDecNumNibble(obr, obr_nastawa, false, TMAlignTextRight); // "  43" " 991" , right aligned, NO leading zeros
  }
}


void sterowanie_silownik() {

  if (obr > (obr_nastawa + MAX_OBR) && stan1 == 0) {
    last_up = millis();
    stan1 = 1;
  } else if (obr > (obr_nastawa + MAX_OBR)) {
    stan2 = 1;
  } else {
    stan2 = 0;
    stan1 = 0;
  }

  if (millis() - last_up >= (TIME_UP * 1000) && stan2 == 1) {
    silownik_up();
    stan5 = 1;
    stan6 = 0;
  } else if (stan5 == 1) {
    silownik_stop();
    stan5 = 0;
  }



  if (obr < (obr_nastawa - MIN_OBR) && stan3 == 0) {
    last_down = millis();
    stan3 = 1;
  } else if (obr < (obr_nastawa - MIN_OBR)) {
    stan4 = 1;
  } else {
    stan4 = 0;
    stan3 = 0;
  }

  if (millis() - last_down >= (TIME_DOWN * 1000) && stan4 == 1) {
    silownik_down();
    stan5 = 0;
    stan6 = 1;
  } else if (stan6 == 1) {
    silownik_stop();
    stan6 = 0;
  }





}


void silownik_up() {
  digitalWrite(R1, HIGH);
  digitalWrite(R2, LOW);
}

void silownik_down() {
  digitalWrite(R1, LOW);
  digitalWrite(R2, HIGH);

}

void silownik_stop() {
  digitalWrite(R1, LOW);
  digitalWrite(R2, LOW);
}

 

  • Lubię! 1
1 minutę temu, galik19871987 napisał:

mam je podłączone pod 6 i 7 jak by coś te wejścia IN

No i tak jest w programie...🤔 Patrzę patrzę i nie widzę błędu...po 5 sekundach powinien ruszyć...jak znajdę halla to sprawdzę u siebie

  • Lubię! 1
Przed chwilą, galik19871987 napisał:

teraz po odłączeniu tych pinów nie było reakcji 

Powtarzam...nic nie odlaczaj...ustaw 100, rozkrec magnes do 200 i kręć minimum 5 sekund

  • Lubię! 1

@galik19871987  wgraj to....co 2 sekundy powinien sie zmieniac kierunek silownika   

void setup() {
 pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
}

void loop() {
 

  digitalWrite(6, HIGH);
  digitalWrite(7, LOW);
  delay(2000);
  digitalWrite(6, LOW);
  digitalWrite(7, HIGH);
  delay(2000);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  delay(2000);

}

 

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...