Skocz do zawartości

Klawiatura + serwo


Wiktor2019

Pomocna odpowiedź

Witam

Chcę zrobić program z arduino uno, klawiatury, i serwo. Który po kliknięciu na klawiaturze przycisku ,,5'' serwo na pozycję np. 50 a po kliknięciu przycisków ,,2 i 3'' serwo na pozycje 170.

Nie wiem co w tym kodzie jest nie tak żeby działał tak jak chcę albo jak powinien wyglądać prawidłowy kod.

#include <Keypad.h> //biblioteka od klawiatury
#include <Servo.h> //Biblioteka odpowiedzialna za serwa
Servo serwo;

const byte ROWS = 4; // ile wierszy
const byte COLS = 4; //ile kolumn

byte rowPins[ROWS] = {5, 4, 3, 2}; //piny wierszy
byte colPins[COLS] = {6, 7, 8, 9}; //piny kolumn

char keys[ROWS][COLS] = { //mapowanie klawiatury
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

Servo serwomechanizm;  //Tworzymy obiekt, dzięki któremu możemy odwołać się do serwa 
int pozycja = 0; //Aktualna pozycja serwa 0-180
int zmiana = 6; //Co ile ma się zmieniać pozycja serwa?

void setup() 
{ 
  serwomechanizm.attach(9);  //Serwomechanizm podłączony do pinu 9
} 


  char klawisz = 5; //zmienna do przetrzymywania znakow z klawiatury
  int i = 0; //zmienna pomocnicza do pętli
  //Serwo na pozycje srodkowa 90 (bo zakres 0-180)
  serwo.write(50);
}

  char klawisz = 2,3; //zmienna do przetrzymywania znakow z klawiatury
  int i = 0; //zmienna pomocnicza do pętli
  //Serwo na pozycje srodkowa 90 (bo zakres 0-180)
  serwo.write(170);
}

 

Link do komentarza
Share on other sites

@Wiktor2019 to na pewno cały kod? Chyba zgubiłeś początek pętli loop 😉

Szczerze mówiąc nie rozumiem jak miałoby to działać nawet z poprawnym loop'em. Co dokładnie chciałeś uzyskać za pomocą poniższego zapisu?

char klawisz = 2,3;

W tym wklejonym programie przecież nawet nigdzie nie odczytujesz znaków z klawiatury... Coś tu nie gra 😉

Link do komentarza
Share on other sites

Program złożyłem z kurów arduino część 1 i 2. Za pomocą tego zapisu chciałem uzyskać że po wciśnięciu klawiszów 2 i 3 serwo przestawia się na pozycję 170. Myślałem, że

char klawisz = 2,3;

to wybór przycisku w tym wypadku 2 i 3. W takim wypadku jak powinien wyglądać taki kod?

Link do komentarza
Share on other sites

W takim razie coś źle złożyłeś, bo brakuje tu ważnych elementów programu. Proponowałbym na początek wykonać ćwiczenia z kursu Arduino 2 (przynajmniej z tej części o klawiaturze), bo tutaj robisz takie błędy, że naprawdę ciężko jakoś sensownie pomóc bez pisania całości za Ciebie.

38 minut temu, Wiktor2019 napisał:

to wybór przycisku w tym wypadku 2 i 3. W takim wypadku jak powinien wyglądać taki kod?

W zmiennej tego typu możesz trzymać informację o jednym znaku, a nie o dwóch. Taki zapis z przecinkiem nie istnieje. Jeśli chcesz interpretować wpisywanie liczb to musisz zapamiętać pierwszą cyfrę, później drugą, stworzyć z nich liczbę i dopiero coś takiego interpretować dalej (pisząc w dużym skrócie) 🙂

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

To w takim razie taki kod będzie działał?

#include <Keypad.h> //biblioteka od klawiatury
#include <Servo.h> //Biblioteka odpowiedzialna za serwa

Servo serwomechanizm;  //Tworzymy obiekt, dzięki któremu możemy odwołać się do serwa 
int pozycja = 0; //Aktualna pozycja serwa 0-180
int zmiana = 6; //Co ile ma się zmieniać pozycja serwa?
void setup() 
{ 
  serwomechanizm.attach(9);  //Serwomechanizm podłączony do pinu 9
} 
 

const byte ROWS = 4; // ile wierszy
const byte COLS = 4; //ile kolumn

byte rowPins[ROWS] = {5, 4, 3, 2}; //piny wierszy
byte colPins[COLS] = {6, 7, 8, 9}; //piny kolum

char keys[ROWS][COLS] = { //mapowanie klawiatury
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

Keypad klawiatura = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //inicjalizacja klawiatury

void loop() {
  char klawisz = 0; //zmienna do przetrzymywania znakow z klawiatury
  int i = 0; //zmienna pomocnicza do pętli
}

klawisz  = klawiatura.getKey();
      if (klawisz == '5')  {
    serwomechanizm.write(50); //Wykonaj ruch
  } else { //Jeśli nie, to powrót na początek
    pozycja = 0;
      }
      
volatile int  serwomechanizm.write(0);
char pinCyfra1 = '1';
char pinCyfra2 = '2';

klawisz = klawiatura.getKey();
      if (klawisz) {
        //Czy kolejna podana cyfra jest poprawna?
        if (pinAlarmuPozycja == 1 && klawisz == pinCyfra1) { //Jesli sprawdzamy 1 pozycje PINu
          pinAlarmuPozycja++; //Cyfra poprawna, mozna sprawdzic na kolejna
        } else if (pinAlarmuPozycja == 2 && klawisz == pinCyfra2){  //Jesli sprawdzamy 2 pozycje PINu     
         } else {
          serwomechanizm.write(120); //Wykonaj ruch
         }

      }
        

 

Link do komentarza
Share on other sites

@Wiktor2019 ten kod nie ma praktycznie sensu, znów masz namieszane coś z pętlą główną, która kończy się zaraz po deklaracji zmiennych. Czy wykonałeś ćwiczenia z kursu elektroniki czy tylko próbujesz skleić kody? Naprawdę chętnie Ci pomożemy, ale widać, że przy tym łączeniu programów chyba nie wiesz co dokładnie i gdzie wklejasz. Pomijając pętlę główną reszta nadal jest źle. Nawet jak w końcu uda Ci się strzelić i poprawnie coś połączysz to zawiesisz się przy kolejnym programie. Gorącą zachęcam, aby "poświęcić" jeden dzień na naukę podstaw 😉

  • Lubię! 1
Link do komentarza
Share on other sites

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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.