• 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
program obsługi enkodera, lcd 4x20
#1
Smile 
Witam, napisałem kod do obsługi enkodera. Generalnie docelowo ma to być prymitywny wskaźnik wartości osi x,y,z,a cnc.
Założenie jest takie  ,że po starcie programu wyświetlić mi się mają zerowe położenia  każdej z osi.
Przyciskiem zdefiniowanym jako "int xyz" mam wybierać dla której osi enkoder będzie mi zmieniał wartość.
jedno naciśnięcie -oś x , drugie naciśnięcie przechodzi w oś y itd.  Po przejściu na inną oś poprzednia wartosć musi zostać zachowana dopóki jej nie wyzeruje (docelowo mają być jeszcze 4 przycicki do zerowania każdej z osi).

Niestety chociaż sam enkoder działa -a przynajmniej dobrze zlicza tylko w jedną stroną (w drugą się gubi)[Obrazek: smile.png]
to przechodzenie pomiędzy osiami zupełnie nie działa. na wszystkich osiach wyświetla mi siędokładnie to samo.
Być może nie tędy droga ( instrukcja switch /case )
Nie potrafię jeszcze dobrze programować więc zwracam się z prośbą do Was o pomoc jak to ma być żeby "grało" Smile
...oraz podpowiedź co jest nie tak ,że zliczanie enkodera działa jak działa.
Pozdrawiam.
Kod:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);

int encoderA = 2;
int encoderB = 3;
int encoder0PinALast = 0;
int pozycja_x = 0;
int pozycja_y = 0;
int pozycja_z = 0;
int pozycja_a = 0;
long int n = 0;
int xyz =4;
int zerowanie =5;
long int licznik =0;

void setup() {
  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  pinMode(4, INPUT_PULLUP);
  pinMode(5, INPUT_PULLUP);
 
   lcd.begin(20, 4);
   lcd.setCursor(0,0);
  lcd.print("os X :");
   lcd.setCursor(0,1);
   lcd.print("os Y :");
   lcd.setCursor(0,2);
   lcd.print("os Z :");
   lcd.setCursor(0,3);
   lcd.print("os A :");  
 }
int obsluga_enc (){
n = digitalRead(encoderA);
 if((encoder0PinALast == LOW) && (n == HIGH)) {
   if(digitalRead(encoderB) == LOW) {
     licznik--;
   }
   else {
     licznik++;
   }
 }
  encoder0PinALast = n;
 return licznik;
 }
 void loop (){
int n = digitalRead(xyz);
 for ( n =0 ; n<4 ; n++){
   switch (n)
   {
   case 0:
       lcd.setCursor(7,0);
  lcd.print(pozycja_x+(obsluga_enc ()));
         break;
  case 1:
      lcd.setCursor(7,1);
  lcd.print(pozycja_y+(obsluga_enc ()));
         break;
  case 2:
      lcd.setCursor(7,2);
  lcd.print(pozycja_z+(obsluga_enc ()));

    break;
  case 3:
      lcd.setCursor(7,3);
  lcd.print(pozycja_y+(obsluga_enc ()));
    break;
   }
 
 }
 
}
 
Odpowiedź
  


Wiadomości w tym wątku
program obsługi enkodera, lcd 4x20 - przez kharadrast - 04-05-2017, 18:59

Skocz do:


Przeglądający: 1 gości