Skip to content

Instantly share code, notes, and snippets.

@johncrisostomo
Created May 7, 2018 01:22
Show Gist options
  • Save johncrisostomo/e99c7ac69f18a18919bddf9ef91f0bc3 to your computer and use it in GitHub Desktop.
Save johncrisostomo/e99c7ac69f18a18919bddf9ef91f0bc3 to your computer and use it in GitHub Desktop.
Arduino LED controlled over Bluetooth with NodeJS forked from eelcocramer
// This code uses the SoftwareSerial library.
// It can be obtained here: http://arduino.cc/en/Reference/SoftwareSerial
unsigned int timeout=0;
unsigned char state=0;
char val; // variable to receive data from the serial port
int ledpin = 13; // LED connected to pin 13
// Timer2 service
ISR(TIMER2_OVF_vect) {
TCNT2 = 0;
timeout++;
if (timeout>61) {
state=1;
timeout=0;
}
}
// initialize the timer 2 service
void init_timer2(void) {
TCCR2A |= (1 << WGM21) | (1 << WGM20);
TCCR2B |= 0x07; // by clk/1024
ASSR |= (0<<AS2); // Use internal clock - external clock not used in Arduino
TIMSK2 |= 0x01; //Timer2 Overflow Interrupt Enable
TCNT2 = 0;
sei();
}
// sets up the program
void setup() {
// open the serial port
Serial.begin(9600);
// bind the ledpin as output
pinMode(ledpin, OUTPUT);
// bind pin 2 as input
pinMode(2,INPUT);
// interrupt for reading from the bluetooth connection
attachInterrupt(0, cleantime, FALLING);
init_timer2();
}
// function for controlling the led
void control(void) {
if (Serial.available()) { // if data is available to read
val = Serial.read(); // read it and store it in 'val'
}
if (val == '1') { // if '1' was received
Serial.println('1'); // display the new value
digitalWrite(ledpin, HIGH); // turn ON the LED
} else if (val == '0') {
Serial.println('0'); // display the new value
digitalWrite(ledpin, LOW); // otherwise turn it OFF
} else if (val == 's') { // if 's' is received display the current status of the led
if (digitalRead(ledpin) == HIGH) {
Serial.println('1');
} else {
Serial.println('0');
}
}
val = ' ';
delay(100); // wait 100ms for next reading
}
// control loop for the program
void loop() {
switch(state) {
case 0:
// no bt connection, do nothing
break;
case 1:
// when there is a bt connection enter the control function
control();
break;
}
}
void cleantime() {
timeout=0;
state=0;
}
node-led-control.js
var BTSP = require('bluetooth-serial-port');
var serial = new BTSP.BluetoothSerialPort();
serial.on('found', function(address, name) {
// you might want to check the found address with the address of your
// bluetooth enabled Arduino device here.
serial.findSerialPortChannel(address, function(channel) {
serial.connect(bluetoothAddress, channel, function() {
console.log('connected');
process.stdin.resume();
process.stdin.setEncoding('utf8');
console.log('Press "1" or "0" and "ENTER" to turn on or off the light.')
process.stdin.on('data', function (data) {
serial.write(data);
});
serial.on('data', function(data) {
console.log('Received: ' + data);
});
}, function () {
console.log('cannot connect');
});
});
});
serial.inquire();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment