Skocz do zawartości

Klawiatura + serwo


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 to post
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 to post
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 to post
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 to post
Share on other sites

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 to post
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 to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

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