Go Down

Topic: problem rc receiver signal (Read 2323 times) previous topic - next topic

KeithRB

Then you need something like (14330 < val) || (val < 14340))

or (abs (val-14335) < 5)


johncc

This thread is a comedy of errors :)

Guys, Arrch this worked.

Code: [Select]
int rcpin =7;
int motpin = 13;
const int THRESHOLD = 5;

void setup() {
  Serial.begin(9600);
  pinMode(rcpin, INPUT);
  pinMode(motpin, OUTPUT);
 
}

int val;

void loop()

{
  val = pulseIn(rcpin, INPUT);
  Serial.println(val);
  delay(1000);
   Serial.println(val);
// if ((val > 14535) && (val < 14335))
//if ( 14335 < val || val > 14535)
if ( (val > 14435 - THRESHOLD) && (val < 14435 + THRESHOLD) )
{
    digitalWrite(motpin, LOW);
  }
  else {
    digitalWrite(motpin, HIGH);
  }
}

trying to understand why it worked and not the previous code.  could it have something to do with the values continually moving slightly.

KeithRB

exactly. All the other code required the servo to read *exactly* 14335.

Again, run the code yourself!

sorry guys i can't get my head round this..  i thought if i use val > 14335 it would work for any value greater than 14335 regardless of wether the value moves slightly.

P18F4550

Code: [Select]
pulseIn(rcpin, INPUT);
shouldn't this be
Code: [Select]
pulseIn(rcpin, LOW);

I think INPUT is defined as 0 anyway but just to clarify the code shouldn't it be LOW?

johncc


exactly. All the other code required the servo to read *exactly* 14335.

I never saw any code of the OPs of the form ( (14335 ? val) ?? (val ? 14335)), other than your reply to OP which I thought was a typo and Arrch's misreading of it.  Did OP edit his 14335/14535s in the original post?

Quote

Again, run the code yourself!

Agreed

Guys thanks for all your help on this, it's late here in the UK so calling it a day.  i'll run the code and try and get a better understanding. fantastic forum and thanks for helping me out.

Cheers

johncc


sorry guys i can't get my head round this..  i thought if i use val > 14335 it would work for any value greater than 14335 regardless of wether the value moves slightly.

Hard to get your head around because you've gotten a lot of ideas, and some from every one of us has been wrong in one way or the other :)
You could probably understand better if you broke it up like this?
Code: [Select]

  if (val > 15555){
     // joystick is FORWARD
  }
  else if (val < 14444) {
     // joystick is REARWARD
  }
  else {
     // joystick is NEUTRAL
  }



I changed the numbers so we would quit misreading 14335/14535 :) 

PaulS

Quote
I changed the numbers so we would quit misreading 14335/14535

Actually, this is a perfect illustration of why magic numbers are a bad idea.

Code: [Select]
#define LOW_VAL 14335
#define HIGH_VAL 14535

if(val < LOW_VAL)
{
}
else if(val > HIGH_VAL)
{
}
else
{
}

means you correct an error/erroneous value in one place, and the logic is far easier to see.

johncc


Code: [Select]

if ( 14335 < val || val < 14535) {


Can be simplified to

Code: [Select]
if ( val != 14335) {

So you want the LED to be off at that value, and on otherwise? Seems a bit loft to expect it to be EXACTLY that value.


Actually I think that code simplifies to
Code: [Select]
if (val < 14535) {

Which is still in error, but not that error :)

johncc


Actually, this is a perfect illustration of why magic numbers are a bad idea.


Absolutely!

Go Up