Measuring voltage change [SOLVED]

Good evening,

On one of my projects im trying to read from a RC receiver, im taking the ouput of the signal line and trying to read it on pin D2 or A2 but i dont think the voltage change from 0.19v to 0.32 is enough for the spark core to recognise the difference. Also to note is the other 4 channels of the receiver are connected to an arducopter board receiving 5v

Any advice on how to get it to read this value , voltmeter can recognise the change but not the spark core, seen ideas of op amps and the like but my electronics skill is weak at best.



What type of receiver have you got there?
Have you got an oscillograph to have a better way of seeing your actual output?

If your voltages to measure are actually as low as you’ve said, you’d need to amplify your signal - e.g. with an opamp.
If it is digital transmission, these voltages seem a bit low to me - I’d guess they might actually be higher, but due to their short periode, a DMM might not read correctly.

You could also have a look at something like this

@redking, you will need to use A2 since it is Analog to Digital (ADC) input which you can read using analogRead(A2). The ADC is 12-bit with a range of 3.3v (max), meaning each bit represents 805uV or 0.805mV. So an input between 0.19v and 0.32v represents digital values of 236 to 398. The Core will have no problems measuring the difference as long as there is no noise on the voltage.


its a turnigy 9x 8c v2 and unfortunately a voltmeter is the only sensor i have access to. Ive purchased a LM358, am i right in thinking that will bring the signal up aroudn 3.3v , will the spark core be able to tell the difference between a signal at 0.19 v boosted and one at 0.32 boosted ?

ok i thought i may have to use the analog inputs , i tried analog read as it is but ended up with a load of rubbish coming through:


which is odd, could be ive messed up somehere, ive set the pin as an input and have

mode = analogRead(channel5);

where channel5 is the defined pin.

Thanks again for the very very quick replies.

Hi @redking

This is an RC plane/car/boat receiver designed to control servos, so I would expect that the outputs are PWM at around 500Hz and not an analog voltage.

You might be able to simulate an analog voltage and read it with a Particle ADC analogRead() command if you put a capacitor on the receiver output to smooth out the PWM signal.

Alternatively you could read the PWM values using digital signaling, measuring the time the signal stays HIGH out of its total period. Interrupts would make this easier to measure I would think.

Yeah the platform im using the core on is a quadcopter and im just trying to get the spark core to react to the position of a switch on the controller changing and the controller uses PPM.

How would the capacitor idea work if you mind me asking , been quite a while since i had to deal with them but i assume it acts as an average timer giving a value before discharging ?

for this method i take it that’s digital read with a timer and then comparing the value ?

Very thankfull for all this help, ive been loving the project but it keeps taking me down directions i don’t expect.

If you have a look at the link I’ve posted, there they use pulseIn().
There are some threads on that function in this forum too.


As @ScruffR says, pulseIn() is a good way. I would go the digital route and avoid the analog measurement completely.

Once again you people are life savers :slight_smile: after a bit of messing around getting pulseIn working by copying the function into my code I can now read the 2 separate values.

Thanks, do i now set the title to solved ?