Skocz do zawartości

Pomocna odpowiedź

Napisano (edytowany)

Mam problem z robotem 2WD. NRF działa, jak dam zamiast v wartość bezpośrednio 255 to też jedzie do przodu i do tyłu. Nie działa w momencie gdy wstawiam v, czytane z NRFa. Na razie chcę żeby chociaż to działało, potem będę się głowił nad skrętami. Jest tam trochę śmieci, gdyż usuwałem kod związany ze skręcaniem (chciałbym zmieniać prędkość każdego z kół w zależności od kierunku skrętu) Prosiłbym o pomoc.

Zakres joysticka wynosi ok. 0-675. Środek w pkt ok. X:336, Y:335

Robot na arduino nano, nadajnik na uno.

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

RF24 radio(9,8);
const byte adres[6]="00001";
int v;      //predkosc do przodu/tyłu
int a;      //predkosc obrotu
struct Data{
  int x; int y;
};


void setup() {
  
  Serial.begin(9600);
  radio.begin();
  radio.setPALevel(RF24_PA_HIGH);
  radio.setDataRate(RF24_250KBPS);
  radio.openReadingPipe(0, adres);
  radio.startListening();
  
  
  pinMode(10, OUTPUT);   //IN 1
  pinMode(6, OUTPUT);    //IN 2
  pinMode(7, OUTPUT);    //IN 3
  pinMode(4, OUTPUT);    //IN 4
  pinMode(3, OUTPUT);    //EN 1 2
  pinMode(5, OUTPUT);    //EN 3 4 
  
}

void loop() {

  bool kierunek=true;    //true dla przodu, false dla tyłu
  bool zwrot=false;       //true że zmienia kierunek, false że nie
  float v2, a2;
  int pwm1=0, pwm2=0;
  Data data;
  bool zwrot2=false;      //true dla prawo, false dla lewo
    
    if(radio.available())
    {
      radio.read(&data, sizeof(data));

      v=data.x-338;

      if(v<0)
      {
        kierunek=false;
        v=-1*v;
      }
      
      a=data.y-338;

      if(a<-10)         //skręt w lewo
      {
        zwrot=true;
        zwrot2=false;
        a=-1*a;
      }

      else if(a>10)     //skręt w prawo
      {
        zwrot=true;
        zwrot2=true;
      }

      else
      {
        a=0;
      }
      
       int a2=map(a, 0, 350, 0, 250);
       int v2=map(v, 0, 350, 0, 255);
       
      pwm1=min(255, a);

      
      if(v<10)
      {
        analogWrite(3, 0);
        analogWrite(5, 0);
        
        digitalWrite(10, LOW);
        digitalWrite(6, LOW);
        digitalWrite(7, LOW);
        digitalWrite(4, LOW);
      }

      else if(kierunek==true)
      {
        analogWrite(3, v2);
        analogWrite(5, v2);
        
        digitalWrite(10, HIGH);
        digitalWrite(6, LOW);
        digitalWrite(7, HIGH);
        digitalWrite(4, LOW);
      }

      else if(kierunek==false)
      {
        analogWrite(3, v2);
        analogWrite(5, v2);
        
        digitalWrite(10, LOW);
        digitalWrite(6, HIGH);
        digitalWrite(7, LOW);
        digitalWrite(4, HIGH);
      }
      
       }

    else if(radio.available()==false)
    {
      pwm1=0; pwm2=0;
      analogWrite(3, pwm2);
      analogWrite(5, pwm1);

      digitalWrite(10, LOW);
      digitalWrite(6, LOW);
      digitalWrite(7, LOW);
      digitalWrite(4, LOW);

      Serial.print("Nie połączono");
    }

}

 

Edytowano przez kamyk11

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