Skocz do zawartości

Sterowanie bezprzewodowe serwomechanizmem za pomocą tact switchy i nrf24l01.


Lolheadshootpl

Pomocna odpowiedź

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

18 minut temu, Lolheadshootpl napisał:

I teraz żeby dodać do tego kodu serwomechanizm to co muszę dać po if?

A jak myślisz? Spróbuj sam, nie będę podpowiadać.

Link do komentarza
Share on other sites

1 godzinę temu, Lolheadshootpl napisał:

nie zauważyłem tego

To włącz sobie wyświetlanie wszystkich błędów i ostrzeżeń kompilatora (nie, nie będę siedemnasty raz tłumaczyć jak to się robi, znajdź sobie na forum albo po prostu otwórz preferencje IDE i pomyśl co tam trzeba kliknąć).

 

Link do komentarza
Share on other sites

11 minut temu, Lolheadshootpl napisał:

Wydawało mi się że po prostu

Dobrze ci się wydawało - jakbyś włączył te nieszczęsne ostrzeżenia kompilatora to byś zauważył, że znów pomyliłeś operator podstawienia (=) z operatorem porównania (==) i nie zawracał du^Wgłowy na forum (szczególnie, że dokładnie taki sam błąd poprawiałeś godzinę temu) bo program by działał.

Już wiesz?

tzn. czy wiesz co masz poprawić i czy wiesz gdzie i po co się włącza te ostrzeżenia?

 

Link do komentarza
Share on other sites

Jeszcze ostatnie pytanie. Czy do sterowania silnikiem krokowym taki kod jest poprawny? 

int dirPin = 12;
int stepPin = 13;


if (odbior == 5) {
  digitalWrite(dirPin , HIGH);
  digitalWrite(stepPin,HIGH); 
  delayMicroseconds(500); 
  digitalWrite(stepPin,LOW); 
  delayMicroseconds(500);
}

if (odbior == 6) {
  digitalWrite(dirPin , LOW);
  digitalWrite(stepPin,HIGH); 
  delayMicroseconds(500); 
  digitalWrite(stepPin,LOW); 
  delayMicroseconds(500);
}

 

Link do komentarza
Share on other sites

Jeśli nie działa to coś musi być nie tak z kodem poza tym kawałkiem.

Jesteś pewien, że odbierasz 5 albo 6? Wypisuj sobie na serialu to co odebrałeś, bo inaczej nie będziesz wiedział czy coś jest nie tak z odbiornikiem, czy może nadajnik nie raczył wysłać polecenia.

A przede wszystkim pokaż cały kod odbiornika (nadajnika nie musisz jeśli reszta działa), bo zgadywanki są fajne ale ja na przykład aż tak się nie nudzę 🙂

Link do komentarza
Share on other sites

Tak cały nadajnik odbiornik działa bo sterowanie serwomechanizmem na tych pinach działa ( oczywiście inny kod na serwo a inny na silniki krokowe, teraz wywaliłem serwomechanizm i zrobiłem to na silnik krokowy).

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h> 
int pos = 90;
int pos1 = 90;
int delayPeriod = 50;
int dirPin = 12;
int stepPin = 13;

RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001";
 byte odbior;
Servo myservo;
Servo myservo1;
Servo myservo2;
Servo myservo3;
Servo myservo4;
Servo myservo5;


void setup() {

  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_HIGH);
  radio.startListening();
  radio.setPayloadSize(1);
  radio.setAutoAck(true) ;
  radio.setDataRate(RF24_2MBPS);

 myservo.attach(2);   
 myservo1.attach(3);   
 myservo2.attach(4);   
 myservo3.attach(5);   
 myservo4.attach(6);   
 myservo5.attach(9);
}

void loop()
{
  if (radio.available()) {
   
    radio.read(&odbior, 1);
   Serial.println((int)odbior);  
{    


  

if (odbior == 1){
  if( pos > 0)
     --pos;
   myservo.write(pos);  
  delay(delayPeriod);               
    
}
if (odbior == 2){
  if( pos < 180)
      ++pos;
   myservo.write(pos);               
  delay(delayPeriod); 
  } 
  
  if (odbior == 3){
  if( pos > 0)
     --pos;
   myservo1.write(pos);  
  delay(delayPeriod);               
    
}
 if (odbior == 4){
  if( pos < 180)
      ++pos;
   myservo1.write(pos); 
   delay(delayPeriod); }    
             
  }

if (odbior == 5) {
  digitalWrite(dirPin , HIGH);
  digitalWrite(stepPin,HIGH); 
  delayMicroseconds(500); 
  digitalWrite(stepPin,LOW); 
  delayMicroseconds(500);
}

if (odbior == 6) {
  digitalWrite(dirPin , LOW);
  digitalWrite(stepPin,HIGH); 
  delayMicroseconds(500); 
  digitalWrite(stepPin,LOW); 
  delayMicroseconds(500);
}


   if (odbior == 7){
  if( pos > 0)
     --pos;
   myservo2.write(pos);  
   delay(delayPeriod); 
                
    
}
 if (odbior == 8){
  if( pos < 180)
      ++pos;
   myservo2.write(pos); 
   delay(delayPeriod);               
  } 
  if (odbior == 9){
  if( pos > 0)
     --pos;
   myservo3.write(pos);  
   delay(delayPeriod); 
}
 if (odbior == 10){
  if( pos < 180)
      ++pos;
   myservo3.write(pos); 
   delay(delayPeriod);               
  } 
  if (odbior == 11){
  if( pos > 0)
     --pos;
   myservo4.write(pos);  
   delay(delayPeriod);              
    
}
 if (odbior == 12){
  if( pos < 180)
      ++pos;
   myservo4.write(pos); 
   delay(delayPeriod);              
  } 

  if (odbior == 12){
  if( pos1 > 0)
     --pos1;
   myservo5.write(pos1);  
   delay(delayPeriod);              
    
}
 if (odbior == 11){
  if( pos1 < 180)
      ++pos1;
   myservo5.write(pos1); 
   delay(delayPeriod);              
  } 

  } 
 
  
  
  
  
  }
  

 

Link do komentarza
Share on other sites

Ja powiem tak:

Pisałem, że w odbiorniku nie możesz użyć delay (wyjątkiem jest delayMicroseconds w kodzie steppera, ale to co innego). Delay ma być w nadajniku, żeby radio nie napierdzielało cały czas wciśniętym guzikiem, tylko z gracją przesyłało polecenie co jakiś czas (analogicznie jak pilot od telewizora robi to samo na IR). Nawet chciałem wyjaśnić dlaczego tylko nie chciałem za dużo się rozpisywać...

No - ale Ty chyba stwierdziłeś, że ten stary dziad ethanak daje jakieś durne porady, on się na pewno nie zna a Ty wiesz lepiej, delaj jest zajefajny i w ogóle bez niego żyć nie możesz.

No to wiedz i sobie pisz dalej.

 

Link do komentarza
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.