Arduino UART + Servo Mechanizm

Masz problem z Arduino? Tutaj możesz szukać pomocy.
ODPOWIEDZ
Maxxxx4
Młodszy majsterkowicz
Posty: 4
Rejestracja: 10 sie 2015, 21:00

Arduino UART + Servo Mechanizm

Post autor: Maxxxx4 » 1 wrz 2015, 19:57

Witam, ostatnio czytałem sobie o obsłudze UART, lecz program, który sobie wymyśliłem, jest za trudny do napisania dla początkującego gościa jak ja. Chodzi mi o program w którym po wpisaniu konta (0 -180 stopni) serwo ostawiło się w tym kącie. Zrobiłem cos w zasadzie półśrodka ale to nie jest to samo. Nie umiem połączyć dwóch zmiennych aby tworzyły jedna zmienna, jak wpiszemy w serial monitor to wygenerują sie nam dwie zmienne np. 1 i 0 (48 i 49 w kodzie ASCII). Moje pytanie brzmi czy można z tej 1 i 0 zrobić jakoś jedna zmienna o wartości 10?.
Kod do półśrodka:

Kod: Zaznacz cały

#include <Servo.h> //biblioteka do serva

Servo myservo; //tworzenie obiektu serva

int odebraneDane = 0; //stan poczatkowy zmienneych

void setup() {
  myservo.attach(9); //servo przypisane do pinu 9
  Serial.begin(9600); //Uruchomienie komunikacji
  

}
 
void loop() {
  if(Serial.available() > 0) { //Czy Arduino odebrano dane
    odebraneDane = Serial.read(); //Jeśli tak, to odczytaj je do znaku końca linii i zapisz w zmiennej odebraneDane
    odebraneDane = map(odebraneDane, 48, 57, 0, 255);
     Serial.println(odebraneDane); //Wyświetl komunikat
    myservo.write(odebraneDane); //przesunecie serva o ilosc wpisana w terminalu
    delay(50);
  }
}

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Artur997
Majsterkowicz
Posty: 101
Rejestracja: 23 paź 2013, 20:22

Re: Arduino UART + Servo Mechanizm

Post autor: Artur997 » 1 wrz 2015, 22:16

https://www.arduino.cc/en/Reference/ParseInt

Kod: Zaznacz cały

#include <Servo.h> //biblioteka do serva

Servo myservo; //tworzenie obiektu serva

int odebraneDane = 0; //stan poczatkowy zmienneych

void setup() {
  myservo.attach(9); //servo przypisane do pinu 9
  Serial.begin(9600); //Uruchomienie komunikacji
Serial.setTimeout(100) <--------------------ważne 

}
 
void loop() {
  if(Serial.available() > 0) { //Czy Arduino odebrano dane
  
  odebraneDane = Serial.parseInt(); // <---- voila! :-)

    odebraneDane = map(odebraneDane, 48, 57, 0, 255);
     Serial.println(odebraneDane); //Wyświetl komunikat
    myservo.write(odebraneDane); //przesunecie serva o ilosc wpisana w terminalu
    delay(50);
  }
}
Maxxxx4
Młodszy majsterkowicz
Posty: 4
Rejestracja: 10 sie 2015, 21:00

Re: Arduino UART + Servo Mechanizm

Post autor: Maxxxx4 » 2 wrz 2015, 10:10

Dzięki wielkie za poprawienie tego kodu, w tym przypadku nie potrzebne jest mapowanie, jak by ktoś chciał użyć :)
Maxxxx4
Młodszy majsterkowicz
Posty: 4
Rejestracja: 10 sie 2015, 21:00

Re: Arduino UART + Servo Mechanizm

Post autor: Maxxxx4 » 2 wrz 2015, 10:56

Dla chętnych trochę zmodyfikowany kod, z zabezpieczeniem zakresu kątów:

Kod: Zaznacz cały

   /*podłącznie serva:
     -Czerwony +5V
     -Brązowy GND
     -Pomaranczowy(żółty) dane (standardowo pin 9)*/
   
   
   
    #include <Servo.h> //biblioteka do serva

    Servo myservo; //tworzenie obiektu serva

    

    void setup() {
    myservo.attach(9); //servo przypisane do pinu 9
    Serial.begin(9600); //Uruchomienie komunikacji
    Serial.setTimeout(100); // <--------------------ważne
    }
     
    void loop() {
      static int odebraneDane = 0; //stan poczatkowy zmienneych
      if(Serial.available() > 0) { //Czy Arduino odebrano dane
        odebraneDane = Serial.parseInt(); // <---- voila! :-)
        Serial.println(odebraneDane); //Wyświetl komunikat
            if(odebraneDane > -1 && odebraneDane < 181){
               myservo.write(odebraneDane); //przesunecie serva o ilosc wpisana w terminalu
            }
            else{ 
              Serial.println("Wpisales zly kat mogles spalic servo(wpisz kat od 0-180 stopni): ");
            }
       delay(50);
      }
    }
Jeszcze raz dziękuje za pomoc :)
ODPOWIEDZ

Strony partnerskie: