 
 ////////////////////////////////////////////////////////////////////////////////////
 
-unsigned char rgb_colors[3];
-
+
+inline void interruptSetup() {
+    const unsigned char buttonPin=3;
+    //cli(); //disable interrupts
+    // initialize the pushbutton pin as an input:
+    pinMode(buttonPin, INPUT);
+
+    MCUCR = 0; //The low level of INT0 generates an interrupt request.
+    //MCUCR = 1; //Any logical change on INT0 generates an interrupt request.
+    //MCUCR = 2; //The falling edge of INT0 generates an interrupt request.
+    //MCUCR = 3; //The rising edge of INT0 generates an interrupt request.
+    
+    //GIMSK |= (1<<6); //Bit 6 INT0: External Interrupt Request 0 Enable
+    GIMSK |= (1<<5); //Bit 5 PCIE: Pin Change Interrupt Enable
+    PCMSK |= (1<<buttonPin); //PCINT[5:0]: Pin Change Enable Mask 5:0
+    //sei(); //enable interrupts
+}
+
+void setup() {
+    interruptSetup();
+    ledsetup();
+}
+
+ISR(PCINT0_vect) {
+    //showColor(0,0,0);
+}
+
+//unsigned char rgb_colors[3];
 unsigned char led_colors[PIXELS][3];
 
-void setup() {
-  ledsetup();
-}
-
 void loop() {
-/*
-  for (unsigned int hue=0; hue < 360; hue++) {
-    //getRGB(hue, rgb_colors);   // converts HSB to RGB
-    
-    hsv2rgb_rainbow(hue, 200, 200, rgb_colors);
-    showColor(rgb_colors[0], rgb_colors[1], rgb_colors[2]);
-    delay(10);
-  }
-  */
-  
-  /* //works great
-  for (unsigned char hue=0; hue < 255; hue++) {
-    hsv2rgb_rainbow(hue, 255, 255, rgb_colors);
-    showColor(rgb_colors[0], rgb_colors[1], rgb_colors[2]);
-    delay(20);
-    }  
-    */
-    
   for (unsigned char hue=0; hue < 255; hue++) {
     for (unsigned char index=0; index < PIXELS; index++) {
         hsv2rgb_rainbow(hue+(index*30), 255, 255, led_colors[index]);

#endif
#else
#error "No implementation for scale8 available."
#endif
}


#define K171 171
#define K85  85

//#define SCALE8_C 1
#define SCALE8_AVRASM 1
#define LIB8_ATTINY
static inline unsigned char scale8( unsigned char i, unsigned char scale)
{
#if SCALE8_C == 1
