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

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.