Skocz do zawartości

Błędnie działający program - joystick


Neeeds

Pomocna odpowiedź

Witam, posiadam program podany poniżej i mam z nim pewien problem. Włączam monitor portu szeregowego i pokazuje 0 - tak powinno byc, potem wychylam joystick w kazda strone i te wartosci takze są poprawne, ale gdy juz wroce do ,,środka'' joysticka to nie wysyła 0 tylko wartości 0 wymieszane z jakąś inna liczbą z przedziału kiedy wychyliłem joystick. Nie wiem czemu tak jest, jakby poprzedni warunek sie zawiesił i sie dalej wykonuje. Nie wiem jak zrobic by w środku działał tylko warunek by wysyłało 0 a inne warunki przestały. Chciałbym by ktoś poprawił mój program i nieco wyjaśnił czemu nie działa poprawnie.

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


#define CE_PIN   9
#define CSN_PIN 10


const uint64_t pipe = 0xE8E8F0F0E1LL; 



RF24 radio(CE_PIN, CSN_PIN); 



int joystick[2]; 
int Throttle ;
int Steering;

int speeed;
void setup() 
{

 Serial.begin(250000);
 delay(1000);
 Serial.println("Nrf24L01 Receiver Starting");
 radio.begin();
 radio.setDataRate(RF24_250KBPS);
 radio.openReadingPipe(1, pipe);
 radio.startListening();

}//--(end setup )-


void loop() 
{
 if ( radio.available() )
 {


     radio.read( joystick, sizeof(joystick) );

     Throttle = map(joystick[0], 0, 1023, 0, 100);
     Steering = map(joystick[1], 0, 1023, 101, 200);

  if(Throttle > -1 && Throttle < 45)
  {
   speeed = map(Throttle, 0, 45, 255, 50);
   right(speeed);
  }
  if(Throttle > 55 && Throttle < 100)

   speeed = map(Throttle, 99, 55, 255, 50);
   left(speeed);

  if(Steering > 101 && Steering < 145)
  {
  speeed = map(Steering, 101, 145, 255, 50);
  gora(speeed);
  }
   if(Steering > 155 && Steering < 200)
   {
  speeed = map(Steering, 200, 155, 255, 50);
  dol(speeed);
   }
   if((Throttle > 45 && Throttle < 55) && (Steering > 145 && Steering < 155))
   {
     stopp();
   }
   }

}
void right(int speeed)
{
 Serial.println(speeed);
}
void left(int speeed)
{
 Serial.println(speeed);
}
void stopp()
{
Serial.println(0);
}
void gora(int speeed)
{
 Serial.println(speeed);
}
void dol(int speeed)
{
 Serial.println(speeed);
}
Link do komentarza
Share on other sites

Nie wydaje mi się by cokolwiek było tu źle.

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define CE_PIN   9
#define CSN_PIN 10
#define JOYSTICK_X A0
#define JOYSTICK_Y A1


const uint64_t pipe = 0xE8E8F0F0E1LL; 



RF24 radio(CE_PIN, CSN_PIN);

int joystick[2];

void setup()  
{
 radio.begin();
 radio.setDataRate(RF24_250KBPS);
 radio.openWritingPipe(pipe);
}//--(end setup )-


void loop()  
{
 joystick[0] = analogRead(JOYSTICK_X);
 joystick[1] = analogRead(JOYSTICK_Y);

 radio.write( joystick, sizeof(joystick) );

}
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

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.