Skocz do zawartości

Sterowanie bezprzewodowe serwomechanizmem za pomocą tact switchy i nrf24l01.


Lolheadshootpl

Pomocna odpowiedź

(edytowany)
  void loop(){
  char text1[] = "up";
  char text2[] = "down";
  int button_1 = digitalRead(4);
  int button_2 = digitalRead(5);
  if (button_1 == 0){
  	radio.write(&text1, sizeof(text1));
  	delay(200);
  }
  if (buttton_2 == 0){
  	radio.write(&text2, sizeof(text2));
  	delay(200);
  }
  }

Zakładam, że przyciski są na pinach D4 i D5 to wyżej masz kod nadajnika.

Odbiornik natomiast:

void loop()
{  
  if (radio.available())
  {
    char text[32] = {0};
    radio.read(&text, sizeof(text));
    
   if (text=="up"){
     //zwiększasz zmienną pos
   }
   if (text=="down"){
     //zmniejszasz zmienną pos
   }
 }
}

 

Edytowano przez matural
Link do komentarza
Share on other sites

No wpisałem ten twój kod do tego co ja dałem ale dalej nie działa. Kod wygląda tak:

TRANSMITER

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001";


void setup() {
  radio.begin();
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MIN);
  radio.stopListening();


}
 void loop(){
  char text1[] = "up";
  char text2[] = "down";
  int button_1 = digitalRead(2);
  int button_2 = digitalRead(3);
  if (button_1 == 0){
    radio.write(&text1, sizeof(text1));
    
  }
  if (button_2 == 0){
    radio.write(&text2, sizeof(text2));
   
  }
  }

RECIVER

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h> 
int pos = 90;
int delayPeriod = 50;

Servo myservo;

RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001";
void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
 myservo.attach(9);  // attaches the servo on pin 9 to the servo object 
 myservo.write(pos); // center the servo
}

void loop()
{  
  if (radio.available())
  {
    char text[32] = {0};
    radio.read(&text, sizeof(text));
    
   if (text=="up"){
     if( pos > 0)
     --pos;
   myservo.write(pos);              // tell servo to go to position in variable 'pos' 
   delay(delayPeriod);     
   }
   if (text=="down"){
     if( pos < 180)
      ++pos;
   myservo.write(pos);              // tell servo to go to position in variable 'pos' 
   delay(delayPeriod); 
   }
 }
}

Przyciski mam na pinach 2 i 3. Przyciski podłączone z jednej strony do +5v a z drugiej do Arduino. Serwo to pinu 9.

Link do komentarza
Share on other sites

Koledze @matural proponuję zastanowienie się, dlaczego ten kod jest kompletną bzdurą:

   char text[32] = {0};
   radio.read(&text, sizeof(text));
    
   if (text=="up"){
     

@Lolheadshootpl po pierwsze: ustaw stałą wielkość payloadu (np. jeden bajt)

Po drugie wysyłaj np. 1 jeśli wciśniesz "góra", 2 jeśli wciśniesz "dół"

Po trzecie: zostaw na razie to serwo w spokoju i czytaj sobie z seriala co Ci z tego radia przyszło.

Link do komentarza
Share on other sites

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

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h> 
int pos = 90;
int delayPeriod = 50;

Servo myservo;

RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001";
void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
 myservo.attach(9);  // attaches the servo on pin 9 to the servo object 
 myservo.write(pos); // center the servo
}

void loop()
{  
  if (radio.available())
  {
    char text[32] = {0};
    radio.read(&text, sizeof(text));
    
   if (text=="up"){
     Serial.print('up');
   }
   if (text=="down"){
     Serial.print('down');
   }
 }
}

Jeżeli kod jest poprawny to nie otrzymuje .

 

Link do komentarza
Share on other sites

(edytowany)
3 minuty temu, Lolheadshootpl napisał:

Jeżeli kod jest poprawny

Tak jak pisałem, ten kawałek kodu jest zupełnie bez sensu i nadaje się wyłącznie do śmieci. A zamiast jakichś ifów zrób po prostu:

Serial.println(text);

 

Edytowano przez ethanak
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.