Skocz do zawartości
kayhoo

Arduino przerobienie programu

Pomocna odpowiedź

Witam chciałbym się zapytać czy ktoś może mi pomóc przerobić kod do arduino na sterowanie 2 serwami zdalnie za pomocą joysticka 

kod odbiornika

#include <Servo.h>    
#include <SPI.h>      
#include "RF24.h"     

Servo myServo; 
Servo myServo2;

RF24 radio(5,10);     

const uint64_t pipe = 0xE8E8F0F0E1LL; 

int msg[2];

void setup(){
  myServo.attach(3);          
  myServo2.attach(4);
  radio.begin();                    
  radio.openReadingPipe(1, pipe);   
  radio.startListening();           
  }

void loop(){
  if(radio.available()){            
    bool done = false;              
    while (!done) {
      done = radio.read(msg, sizeof msg);
     myServo.write(msg[0]);
 myServo2.write(msg[1]);
      
     
    }
    
  }
}

i kod nadajnika :

#include <SPI.h>                      
#include "RF24.h"                     

int msg[2];
int xValue;
int yValue;


RF24 radio(5,10);                     
                                      
const uint64_t pipe = 0xE8E8F0F0E1LL; 


void setup(void){
  radio.begin();                      
  radio.openWritingPipe(pipe);        
}

void loop(void){
  xValue = analogRead(0);
  xValue = map(xValue, 0, 1023, 0, 179); 
  msg[0] = xValue;
  radio.write(msg, sizeof msg);
  
  yValue = analogRead(1);
  yValue = map(yValue, 0, 1023, 0, 179);
  msg[1] = yValue;
  radio.write(msg, sizeof msg);
}

ten kod mam z tego filmiku tylko go przerobiłem : 

 

 a chciałbym tam wcisnąć ten kod żeby to działało mniej więcej tak : czyli jak dam joystick w prawo to będzie się servo powoli obracało w tamtą stronę a jak puszcze joystick to nie będzie wracało do punktu startowego .Czyli będzie to działało to jak tu  :

#include <Servo.h>
Servo servo1;
Servo servo2;
int x_key = A1;                                               
int y_key = A0;                                               
int x_pos;
int y_pos;
int servo1_pin = 8;
int servo2_pin = 9;  
int initial_position = 90;
int initial_position1 = 90;

void setup ( ) {
Serial.begin (9600) ;
servo1.attach (servo1_pin ) ; 
servo2.attach (servo2_pin ) ; 
servo1.write (initial_position);
servo2.write (initial_position1);
pinMode (x_key, INPUT) ;                     
pinMode (y_key, INPUT) ;                      
}

void loop ( ) {
x_pos = analogRead (x_key) ;  
y_pos = analogRead (y_key) ;                      

if (x_pos < 300){
if (initial_position < 10) { } else{ initial_position = initial_position - 20; servo1.write ( initial_position ) ; delay (100) ; } } if (x_pos > 700){
if (initial_position > 180)
{  
}  
else{
initial_position = initial_position + 20;
servo1.write ( initial_position ) ;
delay (100) ;
}
}

if (y_pos < 300){
if (initial_position1 < 10) { } else{ initial_position1 = initial_position1 - 20; servo2.write ( initial_position1 ) ; delay (100) ; } } if (y_pos > 700){
if (initial_position1 > 180)
{  
}        
else{
initial_position1 = initial_position1 + 20;
servo2.write ( initial_position1 ) ;
delay (100) ;
}
}
}

czy w ogóle dało by się coś takiego wykonać ?

Udostępnij ten post


Link to post
Share on other sites

Z czym dokładnie masz problem, na czym utknąłeś?

Udostępnij ten post


Link to post
Share on other sites

nie mogę tego pierwszego kodu nadajnika i odbiornika przerobić tak aby serwa obracały się powoli w wybranym kierunku i tam zostawały . próbuje się z tym zmagać od dobrej godziny ale dalej nie wiem jak to zrobić .

@Treker czy masz jakiś pomysł co do tego bo ja już po prostu wymiękam 

Edycja:

zapomniałem wczoraj dopisać że chciałbym zrobić szczękę na arduino która by miała kontrolowaną moc ścisku

zdalnie sterowaną

Udostępnij ten post


Link to post
Share on other sites
14 godzin temu, kayhoo napisał:

próbuje się z tym zmagać od dobrej godziny ale dalej nie wiem jak to zrobić .

Wklej to co masz i opisz, w którym miejscu utknąłeś lub co nie działa 🙂

Udostępnij ten post


Link to post
Share on other sites

Sorry ale niestety nie zapisałem tego co wczoraj zdążyłem zrobić ale wiem że próbowałem przekopiowywać z tego ostatniego kodu do kodu odbiornika i nadajnika i nie działało . (od razu mówię mam 15 lat i nie do końca wiem jak to zrobić i nie jestem nie wiadomo jakim mózgiem więc proszę raczej  mówić prostym językiem a nie jakieś skąplikowane wyrazy odnośnie programowania 🙂🙂)

Udostępnij ten post


Link to post
Share on other sites

Jeśli próbujesz bezmyślnie kopiować to żadna różnica , czy masz lat 15 czy 85.

Masz tu bardzo fajne kursy elektroniki i Arduino.- może sobie poczytasz? My tu na forum nie jesteśmy interfejsem dla nieczytatych...

I uwierz mi, 15 lat to wcale nie jest tak mało, jest na forum paru młodszych... i umieją czytać!

Tak że na razie zapoznaj się z kursami, jeśli czegoś nie zrozumiesz chętnie wyjaśnimy. Powodzenia!

Tak przy okazji - jeśli czegoś nie zapisałeś to nie trąb o tym na forum, bo nie jest to powód do dumy i chwały. 

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

ok wiem tylko że w waszych kursach nie znalazłem rozwiązania mojego problemu jakbym znalazł to bym nawet nie zakładał tematu a i a propo to z arduino zaczełem zabawę z rok temu tylko ze względu na brak czasu to nie mogłem się pożądnie nauczyć więc proszę o wyrozumiałość

teraz mam więcej czasu to się uczę na nowo

 

Udostępnij ten post


Link to post
Share on other sites

więc proszę o pomoc w tym projekcie bo ten sprawia mi dużą trudność 

Udostępnij ten post


Link to post
Share on other sites

Jesteśmy wyrozumiali, ale jeśli rozwiążemy to za Ciebie to efekt będzie raczej marny, bo przy kolejnym projekcie nadal będziesz potrzebował pomocy. Cała zabawa z Arduino polega na tym, aby samemu tworzyć programy. Chętnie więc pomożemy i naprowadzimy Cie na rozwiązanie, ale pokaż jakiś konkret i konkretne miejsce, na którym utknąłeś. Rozumiem, że się niecierpliwisz i od razu chciałbyś tworzyć rozbudowane projekty, ale niestety czasami trzeba zacząć od czegoś łatwiejszego 😉 Może warto uprościć ten problem i zacząć od czegoś mniejszego?

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

nie bo ja szybko uczę już raz zrobiłem projekt co steruje 2 srewa przez moduł nrf24l01 ale teraz go chce tylko usprawnić. a stanełem na tym że nie wiem jak ten kod tam wcisnąć

bo w tym projekcie będzie się musiało chyba komunikować w dwie strony

Udostępnij ten post


Link to post
Share on other sites
23 minuty temu, Treker napisał:

ale jeśli rozwiążemy to za Ciebie to efekt będzie raczej marny, bo przy kolejnym projekcie nadal będziesz potrzebował pomocy.

wiem o co ci chodzi ale jeżeli teraz ktoś mi z tym projektem pomoże to będę mógł się do niego odnosić w przyszłości i też się nauczę przy okazji

Udostępnij ten post


Link to post
Share on other sites

Zacznij od porządnego sformatowania kodu - wcięcia, odpowiednie długości linii, podział na bloki. Linia musi mieścić się na ekranie (przyjmij 72 znaki jako bezwzględne maksimum). Możesz użyć programu indent - co prawda jest przeznaczony do C a nie C++, ale z takim kodem powinien sobie poradzić. Na razie kod jest po prostu nieczytelny i wątpię, aby komukolwiek się chciało w to wnikać.

10 godzin temu, kayhoo napisał:

nie wiem jak ten kod tam wcisnąć

Ty nie masz nic wciskać tylko napisać konkretny kod pod konkretne zastosowanie.

Poza tym... w dalszym ciągu wiemy jedynie że coś Ci nie działa, ale jeśli raczysz nas poinformować na czym owo niedziałanie polega może szybciej ktoś się zorientuje i da Ci odpowiedź.

Udostępnij ten post


Link to post
Share on other sites
#include <Servo.h>
Servo servo1;
Servo servo2;
int x_key = A1;
int y_key = A0;
int x_pos;
int y_pos;
int servo1_pin = 8;
int servo2_pin = 9;
int initial_position = 90;
int initial_position1 = 90;

void
setup()
{
  Serial.begin(9600);
  servo1.attach(servo1_pin);
  servo2.attach(servo2_pin);
  servo1.write(initial_position);
  servo2.write(initial_position1);
  pinMode(x_key, INPUT);
  pinMode(y_key, INPUT);
}

void
loop()
{
  x_pos = analogRead(x_key);
  y_pos = analogRead(y_key);

  if (x_pos < 300) {
    if (initial_position < 10) {
    } else {
      initial_position = initial_position - 20;
      servo1.write(initial_position);
      delay(100);
    }
  }
  if (x_pos > 700) {
    if (initial_position > 180) {
    } else {
      initial_position = initial_position + 20;
      servo1.write(initial_position);
      delay(100);
    }
  }

  if (y_pos < 300) {
    if (initial_position1 < 10) {
    } else {
      initial_position1 = initial_position1 - 20;
      servo2.write(initial_position1);
      delay(100);
    }
  }
  if (y_pos > 700) {
    if (initial_position1 > 180) {
    } else {
      initial_position1 = initial_position1 + 20;
      servo2.write(initial_position1);
      delay(100);
    }
  }
}

czy o taki efekt chodziło ? 

a i czy polecacie jakieś książki odnośnie programowania w arduino takie raczej dla średnio zaawansowanych . Albo jakieś kanały na you tube na których jest coś o programowaniu.

Udostępnij ten post


Link to post
Share on other sites

Bardzo dobrze - o to chodziło.

Od razu dwie uwagi:

Przede wszystkim - trochę bez sensu jest konstrukcja z pustym ifem. Czyli zamiast:

if (a > b) {
} else {
  coś_robimy();
}

powinno być

if (a <= b) {
  coś robimy();
}

Kompilator co prawda powinien dać sobie z tym radę, ale człowiek odniesie wrażenie że gdzieś tu się czai błąd.

Jeśli dodajesz/odejmujesz pozycję i x zadbaj o to, aby pozycja nie wyskoczyła poza zadany zakres. Ty odejmujesz 20 od pozycji jeśli jest >= 10... czyli ile wyjdzie?

Poza tym dalej nie napisałeś na czym polega niedziałanie tego czegoś... a nikomu się nie chce bawiś we wróżkę 😉

Co do programowania - co Ci się nie podoba w kursach na Forbocie? Prosto, po polsku... Możesz się wspomóc dowolną książką o C++. Poza tym na arduino.cc masz referencje i tutoriale, korzystając z takich źródeł nie potrzebujesz żadnych jutubów.

  • Lubię! 1
  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites
 if (initial_position1 < 10) {
    } else {
      initial_position1 = initial_position1 - 20;
      servo2.write(initial_position1);

czyli zamiast tego - 20 powinno być  -10 ?

ogólnie to ten kod działa tylko chciałbym żeby ten kod tak przerobić abym mógł sterować na odległość modułem nrf24l01     

Udostępnij ten post


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!

Gość
Napisz odpowiedź...

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