Alright, so I worked it out how to use the multiplexer, but now I am struggling with coding HSB ( hue, saturation, brightness). I got RGB working fine, but when I try adding brightness nothing works ;/
Any thoughts?
Arduino code
int r0 = 0;
int r1 = 0; // the three digital pins for the bits
int r2 = 0;
int bin [] = {000, 1, 10, 11, 100, 101, 110, 111};//list of binary values
void setup(){
pinMode(2, OUTPUT); // r0
pinMode(3, OUTPUT); // r1
pinMode(4, OUTPUT); // r2
Serial.begin(9600); // fire up the serial
}
void loop () {
for (int count=0; count < 8; count++) { //loop through each channel, checking for a signal
int row = bin[count]; //channel 5 = 5th element in the bin list -> 101 etc.
r0 = bitRead(row,0); //bitRead() -> parameter 1 = binary sequence, parameter 2 = which bit to read, starting from the right most bit
r1 = bitRead(row,1); //channel 7 = 111, 1 = 2nd bit
r2 = bitRead(row,2); // third bit
digitalWrite(2, r0); // send the bits to the digital pins
digitalWrite(3, r1);
digitalWrite(4, r2);
// Serial.print(count);
// Serial.print(" ==== ");
Serial.print(analogRead(0));
Serial.print(",");
//Serial.print(","); // after sending the binary sequence, the mux determines which channel to read from and sends it to this analog input
// delay (1000); // time to read the values
}
Serial.print(analogRead(A1));
//Serial.print(",");
Serial.println();
}
Processing code
import processing.serial.*;
PImage img;
int redValue = 0; // red value
int greenValue = 0; // green value
int blueValue = 0; // blue value
Serial myPort;
void setup() {
size(800, 800);
img = loadImage("example.jpg");
println(Serial.list());
myPort = new Serial(this, Serial.list()[0], 9600);
myPort.bufferUntil('\n');
}
void draw() {
loadPixels();
while (myPort.available() > 0){
String inString = myPort.readStringUntil('\n');
if(inString != null){
inString = trim(inString);
int[] colors = int(split(inString, ","));
println(colors[0]+", "+colors[1]+", "+colors[2]+", "+colors[3]+", "+colors[4]+", "+colors[5]+", "+colors[6]+", "+colors[7]+", "+colors[8]);
tint(map(colors[4], 0, 1023, 0, 255),map(colors[1], 0, 1023, 0, 255),map(colors[2], 0, 1023, 0, 255));
image(img,0,0);
for (int x = 0; x < img.width; x++ ) {
for (int y = 0; y < img.height; y++ ) {
// Calculate the 1D pixel location
int loc = x + y*img.width;
// Get the R,G,B values from image
float r = red (img.pixels[loc]);
float g = green (img.pixels[loc]);
float b = blue (img.pixels[loc]);
// We calculate a multiplier ranging from 0.0 to 8.0 based on mouseX position.
// That multiplier changes the RGB value of each pixel.
float adjustBrightness = ((float) colors[0] / width) * 8.0;
r *= adjustBrightness;
g *= adjustBrightness;
b *= adjustBrightness;
// The RGB values are constrained between 0 and 255 before being set as a new color.
r = constrain(r,0,255);
g = constrain(g,0,255);
b = constrain(b,0,255);
// Make a new color and set pixel in the window
color c = color(r,g,b);
pixels[loc] = c;
}
}
}
}
}