-
Notifications
You must be signed in to change notification settings - Fork 0
/
orgue.js
65 lines (56 loc) · 1.48 KB
/
orgue.js
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
/*
Copyright ou © ou Copr. Clément Bossut, (2018)
Ce logiciel est un programme informatique servant à écrire et jouer une conduite lumière synchronisée avec du son sur une Raspberry Pi avec PCA8596.
Ce logiciel est régi par la licence CeCILL soumise au droit français et
respectant les principes de diffusion des logiciels libres. Vous pouvez
utiliser, modifier et/ou redistribuer ce programme sous les conditions
de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
sur le site "http://www.cecill.info".
*/
const pca = require("./pca.js")
let or = {
get state() {
return this.levels.slice()
},
set state(s) {
s.forEach((v,i,a)=>this.setLevel(i,v))
},
get minMsInter() {
return 1000/this.freq
}
}
or.freq = 200
or.pcas = pca.getAddresses()
or.patch = []
or.levels = []
or.pcas.forEach((v,j,a)=>{
for (let i = 0 ; i < 16 ; i++) {
or.patch.push({
pca: j,
leds: [i]
})
or.levels.push(0)
}
})
or.setLevel = function(n, val) {
if (!this.patch[n]) return;
if (val < 0 || !val) val = 0
else if (val > 4095) val = 4095
if (val == this.levels[n]) return;
this.levels[n] = val
let leds = this.patch[n].leds
, addr = this.pcas[this.patch[n].pca]
for (let j = 0 ; j < leds.length ; j++) {
pca.setLed(addr, leds[j], val)
}
}
or.init = function() {
pca.init(()=>{
let s = this.levels
this.levels = []
this.state = s
})
this.freq = 200
}
module.exports = or