-
• #2
At the moment there isn't a direct replacement. You can do:
digitalWrite(pin, 1); setTimeout(function() { digitalWrite(pin, 0); setTimeout(function() { ... }, 0.35); },0.35);
or you can do:
digitalPulse(pin,1,0.35);
Which will be substantially more accurate. This actually starts executing subsequent commands (apart from other digitalPulses) before the pulse has ended, so for something more accurate, you could try:
digitalPulse(pin,1,0.35); digitalPulse(pin,0,0.35);
I'm trying to discourage people from writing code that delays (because then they start to get annoyed that Espruino isn't multithreaded), however I think delays do need to be added for this kind of thing - I've put a bug in for it, so hopefully I'll get around to it at some point.
-
• #3
Awesome! Worked like a charm! Thank you!
Now I can toggle an RF-controlled light switch using my HY board and Espruino \o/
-
• #4
Great! Could you post up some details about it? I'd love to get a list of 'stuff you can do' going :)
-
• #5
Sure. A tiny disclaimer though, I don't know anything about this, I'm learning about microcontrollers as I go ;) Therefore, I might use the wrong terminology :)
My board is the HYSTM32 3.2". It's currently running the 1v41 of Espruino (if that matters).
I have two separate modules for RF signals, one receiver and one transmitter. Sorry for these links leading to a swedish shop, they can probably be found in other online stores as well (probably cheaper too).Any way.
I soldered some headers onto my board so that I easily can connect and disconnect stuff while learning about these things. I tried connecting the modules using a breadboard, but the antenna pin seems to act up when doing so. So I just use male-female connector wires from the transmitter into the board. Connected ground and power (3v3) and the data pin to A2.
I had found examples online to receive and transmit rf signals, but they were either for arduino or for raspberry pi. I ended up using the rc-switch library as a base.
The example TypeA_WithDIPSwitches_Lightweight seemed to be the easiest way to start. My cheap RF-plugs is using this setup, 5dip on the remote and 2x5 dip on the plug. This example is more or less directly translatable into Espruino. Though I tweaked it a little bit:
var thePin = A2; function send(numberHigh, numberLow) { digitalPulse(thePin, 1, 0.35 * numberHigh); digitalPulse(thePin, 0, 0.35 * numberLow); } function sendCode(code) { for (repeat=0; repeat < 6; repeat++) { for (i=4; i < 16; i++) { send(1, 3); if (((code << (i-4)) & 2048) > 0) { send(1, 3); } else { send(3, 1); } } send(1,31); } } function on() { sendCode(0b101010100010); } function off() { sendCode(0b101010100001); }
As my plugs and remote is set with the following system code:
1 2 3 4 5 on off on off on
and the plug in the above code has the following dips set:
a b c d e off on off off off
I therefore use the code 1010101000 and append 10 for turning on and 01 for turning off.
Theres a pretty good explanation on the rc-switch wikipages for how these plugs operate.
My next goal is to port the receiving code so that my rf-receiver can react to the remote that comes along with the plugs.
-
• #6
Hi,
Thanks, this is awesome! So you can now control all your plugs from the touchscreen?
I actually bought a 433Mhz TX/RX pair a few days ago because I wanted to be able to read my heating oil level, but this is really neat. Do you have a link to the plugs/remote that you used?
The receiving code might be a bit tricky - I'm not sure, but when I looked at the signal from my receiver there was a huge amount of data being sent (maybe it's where I live). I think it's possible that the amount of data (4,000 pulses/sec non-stop) might be too much for Espruino at the moment :(
-
• #7
In theory, yes! I bought them at a cheap store here in Sweden quite some time ago so do't have a link for them, sorry. They are just some "noname" super cheap versions.
I noticed the spam in the receiver as well, haven't gotten that far yet though, got stuck experimenting with a gui on the touchscreen :)
I've been "porting" an Arduino code example and been successfully converting it so far (not much to change other than removing the datatypes) and the code uses
delayMicroseconds
. Is there a similar way to achieve this in Espruino?The code is basically: