// connect from mis-marked D14 to pin below (B15) var col = {r:127,g:127,b:127}; var onInit = function () { SPI1.setup({sck:A5,miso:A6,mosi:A7}) SPI1.send([0x90,0],A4); // just wake the controller up SPI2.setup({baud:1600000,mosi:B15});//B14.reset(); SPI2.send4bit([255,0,0], 0b0001, 0b0011); // test LCD.clear(); drawCols(); drawRGB(); }; function setColArray(data) { SPI2.send4bit(data, 0b0001, 0b0011); } function setSolidCol(c) { var d = ""; var cstr = String.fromCharCode(c.r)+String.fromCharCode(c.g)+String.fromCharCode(c.b); for (var i=0;i<50;i++) d += cstr; setColArray(d); } function setBlendedCol() { var d = ""; for (var i=0;i<50;i++) { var a = (i/25.0)+(pos*3)-2; if (a<0) a=0; if (a>1) a=1; d += String.fromCharCode(colFrom.r*(1-a) + colTo.r*a)+ String.fromCharCode(colFrom.g*(1-a) + colTo.g*a)+ String.fromCharCode(colFrom.b*(1-a) + colTo.b*a); } setColArray(d); } var touchFunc = function () { if (!digitalRead(B6)) { // touch down var d = SPI1.send([0x90,0,0xD0,0],A4); var pos = {x:(d[1]*256+d[2])*LCD.WIDTH/0x8000, y:(d[3]*256+d[4])*LCD.HEIGHT/0x8000}; touchCallback(pos.x, pos.y); lastPos = pos; } else lastPos = null; }; var touchCallback = function (x,y) { var b = (y*1.2/LCD.HEIGHT - 0.1)*256; if (b<0) b=0; if (b>255) b=255; // check for colour sliders if (x>260) { col.b = b; setSolidCol(col); drawRGB(); } else if (x>200) { col.g = b; setSolidCol(col); drawRGB(); } else if (x>140) { col.r = b; setSolidCol(col); drawRGB(); } else { // check for taps on the colour boxes for (var i=0;ir[0] && y>r[1] && x1) { pos = 0; colFrom = colTo; colTo = cols[(Math.random()*cols.length)|0]; } // send data to the LEDs setBlendedCol(); } setInterval(step, 100); onInit();setInterval(touchFunc, 50); setWatch("save()", BTN1, {edge:"rising", repeat:true});