aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Stendahl <jakob@Jakobs-MacBook-Pro.local>2016-10-21 07:57:13 +0200
committerJakob Stendahl <jakob@Jakobs-MacBook-Pro.local>2016-10-21 07:57:13 +0200
commit3c6a622c71c8f092e3de3f9a2fbbbfcca67cf720 (patch)
tree98c824fd583530da53e4eb2c697a4db1f01c7045
parent6dafff0b4844f50df78bc23cb5aa26ba339cc3b0 (diff)
downloadi2c-Neopixel-3c6a622c71c8f092e3de3f9a2fbbbfcca67cf720.tar.gz
i2c-Neopixel-3c6a622c71c8f092e3de3f9a2fbbbfcca67cf720.zip
Make Arduino Project. update scripts
-rw-r--r--Arduino/i2cPixelSlave/i2cPixelSlave.ino (renamed from Arduino/i2cPixelSlave.ino)75
-rw-r--r--Raspberry Pi/i2cPixel.py198
-rw-r--r--Raspberry Pi/python.py166
3 files changed, 308 insertions, 131 deletions
diff --git a/Arduino/i2cPixelSlave.ino b/Arduino/i2cPixelSlave/i2cPixelSlave.ino
index fa5bf45..bc7dc56 100644
--- a/Arduino/i2cPixelSlave.ino
+++ b/Arduino/i2cPixelSlave/i2cPixelSlave.ino
@@ -2,7 +2,7 @@
#include <Adafruit_NeoPixel.h>
#define PIN 6
-#define PIXELS 10 // Set this to the number of pixels in yout strip
+#define PIXELS 348 // Set this to the number of pixels in yout strip
#define SLAVE_ADDRESS 0x04
// Parameter 1 = number of pixels in strip
@@ -14,6 +14,10 @@
// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXELS, PIN, NEO_GRB + NEO_KHZ800);
+// Timer
+unsigned long previousMillis = 0;
+long millisLockTime = 60000;
+
// i2c Config
int number = 0;
int state = 0;
@@ -37,6 +41,12 @@ int val2 = 0; // variable for reading the pin status
boolean lockLow2 = true;
boolean takeLowTime2;
+boolean timeoutHappened = false;
+boolean timeoutEnabled = true;
+
+// pixelInt
+long pixelInt = 0;
+
void setup() {
// Set pins
@@ -78,6 +88,7 @@ void setup() {
delay(50);
// Open i2c connection
+ Wire.setClock(400000L);
Wire.begin(SLAVE_ADDRESS);
Wire.onReceive(receiveData);
@@ -87,12 +98,27 @@ void setup() {
Serial.println("Ready!");
// Flash once Red
- flashColor(204, 0, 0, 1100);
+ // flashColor(0, 5, 165, 70);
}
void loop() {
-
+
+ if(!timeoutEnabled) {
+ unsigned long currentMillis = millis();
+
+ if (currentMillis-previousMillis >= millisLockTime) {
+ for(int j=0; j < PIXELS; j++) {
+ if (!timeoutHappened) {
+ fadeFromBlack(255, 0, 0, 30);
+ timeoutHappened = true;
+ }
+ }
+ strip.show();
+ } else {
+ timeoutHappened = false;
+ }
+ }
// Sensor 1 //
if(digitalRead(pir1) == HIGH){
digitalWrite(13, HIGH); //the led visualizes the sensors output pin state
@@ -173,6 +199,8 @@ void loop() {
}
void receiveData(int byteCount) {
+ previousMillis = millis();
+
digitalWrite(13, HIGH);
int bytes[byteCount];
int i = 0;
@@ -185,16 +213,18 @@ void receiveData(int byteCount) {
i++;
}
+
switch (bytes[0]) {
case 0x01:
Serial.println("Life is discovered");
number = 1;
- flashColor(0, 204, 0, 1100);
+ flashColor(0, 204, 0, 30);
break;
case 0x02:
- strip.setPixelColor(bytes[2], bytes[3], bytes[4], bytes[5]);
+ pixelInt = bytes[2] + bytes[3];
+ strip.setPixelColor(pixelInt, bytes[4], bytes[5], bytes[6]);
break;
case 0x03:
@@ -205,6 +235,19 @@ void receiveData(int byteCount) {
flashColor(bytes[2], bytes[3], bytes[4], bytes[5]);
break;
+ case 0x05:
+ timeoutEnabled = false;
+ break;
+
+ case 0x06:
+ strip.setBrightness(bytes[2]);
+ break;
+
+ case 0x07:
+ number = 42;
+ break;
+
+
default:
Serial.println("Nothing New");
break;
@@ -215,6 +258,7 @@ void receiveData(int byteCount) {
}
void sendData() {
+ previousMillis = millis();
Wire.write(number);
}
@@ -222,8 +266,25 @@ void sendString(int Data) {
Wire.write(Data);
}
-void testCoid() {
- flashColor(0, 204, 0, 1100);
+void fadeFromBlack(byte Red, byte Green, byte Blue, long n) {
+ byte Rstart=0;
+ byte Gstart=0;
+ byte Bstart=0;
+ byte Rend=Red;
+ byte Gend=Green;
+ byte Bend=Blue;
+
+ for(long i = 0; i < n; i++) // larger values of 'n' will give a smoother/slower transition.
+ {
+ byte Rnew = Rstart + (Rend - Rstart) * i / n;
+ byte Gnew = Gstart + (Gend - Gstart) * i / n;
+ byte Bnew = Bstart + (Bend - Bstart) * i / n;
+ // set pixel color here
+ for(int j=0; j < PIXELS; j++) {
+ strip.setPixelColor(j, strip.Color(Rnew, Gnew, Bnew));
+ }
+ strip.show();
+ }
}
void flashColor(byte Red, byte Green, byte Blue, long n) {
diff --git a/Raspberry Pi/i2cPixel.py b/Raspberry Pi/i2cPixel.py
index 4e6785c..360b3f3 100644
--- a/Raspberry Pi/i2cPixel.py
+++ b/Raspberry Pi/i2cPixel.py
@@ -2,6 +2,28 @@
import smbus
import sys
import time
+import logging
+
+logging.basicConfig(filename='error.log',level=logging.DEBUG)
+
+def errorHandler(type, errorMsg):
+ if type == 1: # Debug
+ logging.debug(errorMsg)
+ print("Debug Message: See logfile")
+ elif type == 2: # info
+ logging.info(errorMsg)
+ elif type == 3: # Warning
+ logging.warning(errorMsg)
+ elif type == 4: # Error
+ logging.error(errorMsg)
+ print("Error: See logfile")
+ elif type == 5: # Error
+ logging.critical(errorMsg)
+ print("Critical Error: See logfile")
+ else:
+ logging.critical(errorMsg)
+ print("Something went terribly wrong! Not even the errorhandler was able to find out what. Which basically means 'You are doomed'")
+
""" Variables """
lockdown = False
@@ -9,84 +31,132 @@ lockdown = False
def version():
print "i2cPixel is Version 1.0.0"
+def available():
+ global lockdown
+ return lockdown
+
def setAddress(address):
global arduinoAddress
arduinoAddress = address
def setBus(n):
- if available = False:
- return 2
- else:
- global bus
- try:
- bus = smbus.SMBus(n)
- except:
- errorMsg = sys.exc_info()[0]
- errorHandler(5, errorMsg)
-
-def available():
- global lockdown
- return lockdown
-
+ if available == False:
+ return 2
+ else:
+ lockdown = False
+ global bus
+ try:
+ bus = smbus.SMBus(n)
+ except:
+ errorMsg = sys.exc_info()[0]
+ errorHandler(5, errorMsg)
+ lockdown = True
+
def greeting():
- if available = False:
- return 2
- else:
- try:
- """ Send heartbeat """
- bus.write_byte(arduinoAddress, 0x01)
+ if available == False:
+ return 2
+ else:
+ lockdown = False
+ try:
+ """ Send heartbeat """
+ bus.write_byte(arduinoAddress, 0x01)
+
+ """ Wait for response """
+ try:
+ response = bus.read_byte(arduinoAddress)
+ if response == 0x01:
+ returnMsg = True
+ else:
+ returnMsg = False
+ except:
+ errorMsg = sys.exc_info()[0]
+ errorHandler(5, errorMsg)
+ returnMsg = False
+
+ """ Return if heartbeat was received """
+ return returnMsg
+
+ except:
+ errorMsg = sys.exc_info()[0]
+ errorHandler(5, errorMsg)
+ lockdown = True
- """ Wait for response """
- try:
- response = bus.read_byte(arduinoAddress)
- if response == 0x01:
- returnMsg = True
- else:
- returnMsg = False
- except:
- errorMsg = sys.exc_info()[0]
- errorHandler(5, errorMsg)
- returnMsg = False
-
- """ Return if heartbeat was received """
- return returnMsg
-
- except:
- errorMsg = sys.exc_info()[0]
- errorHandler(5, errorMsg)
+def ping():
+ # Send 0x07 vil faa tilbake 42 hvis live
+ return False
+def setBrightness(intensity):
+ if available == False:
+ return 2
+ else:
+ lockdown = False
+ try:
+ bus.write_block_data(arduinoAddress, 0x06, [intensity])
+ except:
+ errorMsg = sys.exec_info()[0]
+ errorHandler(5, errorMsg)
+ lockdown = True
+
+def disableTimeout():
+ if available == False:
+ return 2
+ else:
+ lockdown = False
+ try:
+ bus.write_byte(arduinoAddress, 0x05)
+ except:
+ errorMsg = sys.exec_info()[0]
+ errorHandler(5, errorMsg)
+ lockdown = True
+
+def blink(n, Red, Green, Blue):
+ bus.write_block_data(arduinoAddress, 0x04, [Red, Green, Blue, n])
+
def setPixel(n, red, green, blue):
""" Send values for changing pixel values """
- if available = False:
- return 2
- else:
- try:
- bus.write_block_data(arduinoAddress, 0x02, [n, red, green, blue])
- except:
- errorMsg = sys.exc_info()[0]
- errorHandler(5, errorMsg)
+ if available == False:
+ return 2
+ else:
+ lockdown = False
+ try:
+ if n > 255:
+ n1 = 255
+ n2 = n - 255
+ else:
+ n1 = 0
+ n2 = n
+ #print("{", n1, n2, "}")
+ bus.write_block_data(arduinoAddress, 0x02, [n1, n2, red, green, blue])
+ except:
+ errorMsg = sys.exc_info()[0]
+ errorHandler(5, errorMsg)
+ lockdown = True
def show():
- """ Send values for turning pixels on """
- if available = False:
- return 2
- else:
- try:
- bus.write_byte(arduinoAddress, 0x03)
- except:
- errorMsg = sys.exc_info()[0]
- errorHandler(5, errorMsg)
+ """ Send values for turning pixels on """
+ if available == False:
+ return 2
+ else:
+ lockdown = False
+ try:
+ bus.write_byte(arduinoAddress, 0x03)
+ except:
+ errorMsg = sys.exc_info()[0]
+ errorHandler(5, errorMsg)
+ lockdown = True
def blink(time, red, green, blue):
- """ Flash all pixels with a colour """
- if available = False:
- return 2
- else:
- try:
- bus.write_block_data(arduinoAddress, 0x04, [red, green, blue, time])
- except:
- errorMsg = sys.exc_info()[0]
- errorHandler(5, errorMsg)
+ """ Flash all pixels with a colour """
+ if available == False:
+ return 2
+ else:
+ lockdown = False
+ try:
+ bus.write_block_data(arduinoAddress, 0x04, [red, green, blue, time])
+ except:
+ errorMsg = sys.exc_info()[0]
+ errorHandler(5, errorMsg)
+ lockdown = True
def waitForSensor():
while True:
diff --git a/Raspberry Pi/python.py b/Raspberry Pi/python.py
index ee61bec..3078683 100644
--- a/Raspberry Pi/python.py
+++ b/Raspberry Pi/python.py
@@ -7,8 +7,7 @@ import json
import i2cPixel
""" Decalrations """
-pixels = 72 # Change this to the appropriate number for your setup
-pixels = 10
+pixels = 348 # Change this to the appropriate number for your setup
addresses = [0, 24, 25, 35] # legg til en start og en stopp for hvert trinn
def hexToRgb(value):
@@ -17,76 +16,123 @@ def hexToRgb(value):
return tuple(int(value[i:i+lv/3], 16) for i in range(0, lv, lv/3))
def lightStaircase(direction):
- repeats = len(addresses)
- repeats = repeats / 2
-
- if direction = "up":
- loopCondition = repeats
- while loopCondition >> pixels
-
- else:
- loopCondition = 0
-
- return true
-
+ repeats = len(addresses)
+ repeats = repeats / 2
+
+ if direction == "up":
+ loopCondition = repeats
+
+
+ else:
+ loopCondition = 0
+
+ return true
+
def errorHandler(type, errorMsg):
- if type = 1: # Debug
- logging.debug(errorMsg)
- print("Debug Message: See logfile")
- else if type = 2: # info
- logging.info(errorMsg)
- else if type = 3: # Warning
- logging.warning(errorMsg)
- else if type = 4: # Error
- logging.error(errorMsg)
- print("Error: See logfile")
- else if type = 5: # Error
- logging.critical(errorMsg)
- print("Critical Error: See logfile")
- else:
- logging.critical(errorMsg)
- print("Something went terribly wrong! Not even the errorhandler was able to find out what. Which basically means 'You are doomed'")
-
+ if type == 1: # Debug
+ logging.debug(errorMsg)
+ print("Debug Message: See logfile")
+ elif type == 2: # info
+ logging.info(errorMsg)
+ elif type == 3: # Warning
+ logging.warning(errorMsg)
+ elif type == 4: # Error
+ logging.error(errorMsg)
+ print("Error: See logfile")
+ elif type == 5: # Error
+ logging.critical(errorMsg)
+ print("Critical Error: See logfile")
+ else:
+ logging.critical(errorMsg)
+ print("Something went terribly wrong! Not even the errorhandler was able to find out what. Which basically means 'You are doomed'")
+
def setup():
-
- """ Setup Log File """
- logging.basicConfig(filename='error.log',level=logging.DEBUG)
-
- """ Print first line of log file """
- logging.info('Starting App')
-
+
+ """ Setup Log File """
+ logging.basicConfig(filename='error.log',level=logging.DEBUG,mode='w')
+
+ """ Print first line of log file """
+ logging.info('Starting App')
+
+ """ Set time """
+ start_time = time.time()
+
""" Setup i2c communication """
i2cPixel.version()
i2cPixel.setBus(1)
i2cPixel.setAddress(0x04)
-
-def main():
-
""" Wait for heartbeat from Arduino """
while True:
- try:
- if i2cPixel.greeting():
- print "Arduino is Online"
- break
- except Exception:
- pass
+ try:
+ if i2cPixel.greeting():
+ print "Arduino is Online"
+ time.sleep(1)
+ break
+ except Exception:
+ pass
+
+ """i = 0
+ while i < pixels:
+ i2cPixel.setPixel(i, 0, 0, 0)
+ i2cPixel.show()"""
- """while True:
- i2cPixel.waitForSensor()"""
- """ Test, set all pixels to entered color """
- while True:
- test = raw_input()
- colour = hexToRgb(test)
-
- i = 0
- while i < pixels:
- i2cPixel.setPixel(i, colour[0], colour[1], colour[2])
- i = i + 1
- i2cPixel.show()
+def main():
+
+ print "GO!"
+ timer = time.time()
+ i = 0
+ while i < pixels:
+ i2cPixel.setPixel(i, 255, 255, 255)
+ i2cPixel.show()
+ i = i + 1
+ print("--- %s seconds ---" % (time.time() - timer))
- i2cPixel.waitForSensor()
+ timer = time.time()
+ i = 0
+ while i < pixels:
+ i2cPixel.setPixel(i, 255, 255, 255)
+ i = i + 1
+ i2cPixel.show()
+ print("--- %s seconds ---" % (time.time() - timer))
+
+ pixelsPerStair = [21, 23, 23, 24, 25, 27, 31, 33, 28, 26, 25, 24, 24]
+
+ i = 0
+ o = 0
+ j = 0
+ timer = time.time()
+ while i < len(pixelsPerStair):
+ time1 = time.time()
+ mellomRekning = o + pixelsPerStair[i]
+
+ if j == 0:
+ color = (255, 0, 225)
+ j = j + 1
+ elif j == 1:
+ color = (0, 63, 255)
+ j = j + 1
+ elif j == 2:
+ color = (25, 255, 0)
+ j = j + 1
+ elif j == 3:
+ color = (255, 0, 4)
+ j = j + 1
+ else:
+ color = (255, 250, 0)
+ j = 0
+
+ while o <= mellomRekning:
+ i2cPixel.setPixel(o, *color)
+ o = o + 1
+ i2cPixel.show()
+ i = i + 1
+ print("--- %s seconds ---" % (time.time() - timer))
+
+
+
+
""" Start script """