-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathapp.js
More file actions
134 lines (102 loc) · 3.03 KB
/
app.js
File metadata and controls
134 lines (102 loc) · 3.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
var fs = require('fs');
var cors = require('cors')
var http = require('http');
var https = require('https');
var express = require('express');
var privateKey = fs.readFileSync('numlinebot-key.pem', 'utf8');
var certificate = fs.readFileSync('numlinebot-cert.pem', 'utf8');
var credentials = {key: privateKey, cert: certificate};
var app = express();
app.use(cors())
app.use(express.static(__dirname));
// pin states for both motors based on L293 driver
// http://www.rakeshmondal.info/L293D-Motor-Driver
// Forward (Clockwise)
var forward_pins = [
{pin: 2, state: 1},
{pin: 7, state: 0},
{pin: 15, state: 1},
{pin: 10, state: 0}
];
// Backward (Anti-clockwise)
var backward_pins = [
{pin: 2, state: 0},
{pin: 7, state: 1},
{pin: 15, state: 0},
{pin: 10, state: 1}
];
// Stop moving
var stop_pins = [
{pin: 2, state: 0},
{pin: 7, state: 0},
{pin: 15, state: 0},
{pin: 10, state: 0}
];
// Duration of rotation for each step
var milliseconds_per_step = 500;
var currentPos = 1;
// move rover N steps forward
app.get('/forward/:steps', function (req, res) {
var steps = Number(req.params.steps);
currentPos = currentPos + steps;
res.send(String(currentPos));
console.log('Forward ' + steps + ' steps' + '. Final position = ' + currentPos);
move_forward(steps);
});
// move rover N steps backward
app.get('/backward/:steps', function (req, res) {
var steps = Number(req.params.steps);
currentPos = currentPos - steps;
res.send(String(currentPos));
console.log('Forward ' + steps + ' steps' + '. Final position = ' + currentPos);
move_backward(steps);
});
// reset rover state
app.get('/reset', function (req, res) {
currentPos = 1;
res.send(String(currentPos));
console.log('Reset bot to 1');
});
function move_forward(steps) {
console.log('Started moving forward...');
// start forward movement
set_state(forward_pins);
// stop after the number of steps
setTimeout(function () {
console.log('Stopped moving...');
stop();
}, milliseconds_per_step * steps);
}
function move_backward(steps) {
console.log('Started moving backward...');
// start backward movement
set_state(backward_pins);
// stop after the number of steps
setTimeout(function () {
console.log('Stopped moving...');
stop();
}, milliseconds_per_step * steps);
}
function stop() {
set_state(stop_pins);
}
function set_state(pin_states) {
for (var i = 0; i < pin_states.length; ++i) {
var pin = pin_states[i];
// set the gpio pin state
// gpio.write(pin.pin, pin.state);
}
}
process.on('SIGINT', function() {
console.log("\nGracefully shutting down from SIGINT (Ctrl+C)");
process.exit();
});
// ------------------------------------------------------------------------
// Start Express App Server
//
var httpServer = http.createServer(app);
var httpsServer = https.createServer(credentials, app);
httpServer.listen(3030);
httpsServer.listen(3443);
console.log('Raspberry Pi Emulator API is up and running');
console.log('Bot is waiting for your commands at ' + currentPos);