Skocz do zawartości

Sterowanie bezprzewodowe serwomechanizmem za pomocą tact switchy i nrf24l01.


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 to post
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 to post
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 to post
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 to post
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 to post
Share on other sites
6 minut temu, Lolheadshootpl napisał:

Jeżeli kod jest poprawny to nie otrzymuje .

 

Nie jest poprawny...co to ma byc?

Serial.print('down');

Co ta linia robi??

Link to post
Share on other sites
6 minut temu, Lolheadshootpl napisał:

No chciałem otrzymane dane zapisać w serial monitorze

 

Ale to w cudzyslowiu ma byc...("...")

Link to post
Share on other sites

Z laski swojej wywal wszystko, zostaw kod tylko od rf i przesylaj jeden bajt...nie wazne jaki, chodzi zeby sprawdzic czy cos sie przesyla

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!

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.