From 38d8f89f2f2b27fb25e0b4b9a34b45b76f6dc6f2 Mon Sep 17 00:00:00 2001 From: daniel-Jones Date: Mon, 13 Feb 2017 16:06:14 +1030 Subject: added fade ability to Arduino sketch, using psuedo threading. Rework of serial communication also started, the Qt interface is currently under development to support fading. --- arduino/rgb/rgb.ino | 130 +++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 97 insertions(+), 33 deletions(-) (limited to 'arduino/rgb/rgb.ino') diff --git a/arduino/rgb/rgb.ino b/arduino/rgb/rgb.ino index 702fbe1..7d61ceb 100644 --- a/arduino/rgb/rgb.ino +++ b/arduino/rgb/rgb.ino @@ -1,4 +1,6 @@ -int incomingByte = 0; // for incoming serial data +#include +#include + const int redPin = 2; const int greenPin = 4; const int bluePin = 3; @@ -7,38 +9,100 @@ int red; int green; int blue; -String inData; -void setup() { - Serial.begin(9600); // opens serial port, sets data rate to 9600 bps - red = 0; - green = 0; - blue = 0; - pinMode(redPin, OUTPUT); - pinMode(greenPin, OUTPUT); - pinMode(bluePin, OUTPUT); +void red_thread(); +bool r_rev = false; + +void green_thread(); +bool g_rev = false; + +void blue_thread(); +bool b_rev = false; + +Thread r_fade = Thread(); +Thread g_fade = Thread(); +Thread b_fade = Thread(); + +void setup() +{ + Serial.begin(9600); + pinMode(redPin, OUTPUT); + pinMode(greenPin, OUTPUT); + pinMode(bluePin, OUTPUT); + + /* set all values to 0 */ + red = 0; + green = 0; + blue = 0; + r_fade.enabled = false; + r_fade.onRun(red_thread); + r_fade.setInterval(10); + + g_fade.enabled = false; + g_fade.onRun(green_thread); + g_fade.setInterval(10); + + b_fade.enabled = false; + b_fade.onRun(blue_thread); + b_fade.setInterval(10); + } -void loop() { - - // send data only when you receive data: - if (Serial.available() > 0) { - char recieved = Serial.read(); - inData += recieved; - - // Process message when new line character is recieved - if (recieved == '\n') - { - Serial.print("string: "); - Serial.print(inData); - String first = Serial.readStringUntil(','); - Serial.read(); //next character is comma, so skip it using this - String second = Serial.readStringUntil(','); - Serial.read(); - String third = Serial.readStringUntil('\0'); - Serial.print(first + "\n"); - Serial.print(second + "\n"); - Serial.print(third + "\n"); - inData = ""; // Clear recieved buffer - } - } +void red_thread() +{ + if (red == 255) + r_rev = true; + if (red == 0) + r_rev = false; + if (!r_rev) + red++;analogWrite(redPin, red); + if (r_rev) + red--;analogWrite(redPin, red); +} + +void green_thread() +{ + if (green == 255) + g_rev = true; + if (green == 0) + g_rev = false; + if (!g_rev) + green++;analogWrite(greenPin, green); + if (g_rev) + green--;analogWrite(greenPin, green); +} + + +void blue_thread() +{ + if (blue == 255) + b_rev = true; + if (blue == 0) + b_rev = false; + if (!b_rev) + blue++;analogWrite(bluePin, blue); + if (b_rev) + blue--;analogWrite(bluePin, blue); +} + + +void loop() +{ + if (r_fade.shouldRun()) + r_fade.run(); + if (g_fade.shouldRun()) + g_fade.run(); + if (b_fade.shouldRun()) + b_fade.run(); + + /* read serial data */ + while (Serial.available() > 1) + { + + red = Serial.parseInt(); + green = Serial.parseInt(); + blue = Serial.parseInt(); + analogWrite(redPin, red); + analogWrite(greenPin, green); + analogWrite(bluePin, blue); + } } -- cgit v1.2.3