parent
7346b6a6b4
commit
746726d105
@ -0,0 +1,48 @@
|
|||||||
|
# This makefile for a Kaleidoscope sketch pulls in all the targets
|
||||||
|
# required to build the example
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ifneq ($(KALEIDOSCOPE_DIR),)
|
||||||
|
search_path += $(KALEIDOSCOPE_DIR)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifneq ($(ARDUINO_DIRECTORIES_USER),)
|
||||||
|
search_path += $(ARDUINO_DIRECTORIES_USER)/hardware/keyboardio/avr/libraries/Kaleidoscope
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(shell uname -s),Darwin)
|
||||||
|
search_path += $(HOME)/Documents/Arduino/hardware/keyboardio/avr/libraries/Kaleidoscope
|
||||||
|
else
|
||||||
|
search_path += $(HOME)/Arduino/hardware/keyboardio/avr/libraries/Kaleidoscope
|
||||||
|
endif
|
||||||
|
|
||||||
|
sketch_makefile := etc/makefiles/sketch.mk
|
||||||
|
|
||||||
|
$(foreach candidate, $(search_path), $(if $(wildcard $(candidate)/$(sketch_makefile)), $(eval ks_dir ?= $(candidate))))
|
||||||
|
|
||||||
|
ifneq ($(ks_dir),)
|
||||||
|
|
||||||
|
$(info Using Kaleidoscope from $(ks_dir))
|
||||||
|
|
||||||
|
export KALEIDOSCOPE_DIR := $(ks_dir)
|
||||||
|
include $(ks_dir)/$(sketch_makefile)
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
$(info I can't find your Kaleidoscope installation.)
|
||||||
|
$(info )
|
||||||
|
$(info I tried looking in:)
|
||||||
|
$(info )
|
||||||
|
$(foreach candidate, $(search_path), $(info $(candidate)))
|
||||||
|
$(info )
|
||||||
|
$(info The easiest way to fix this is to set the 'KALEIDOSCOPE_DIR' environment)
|
||||||
|
$(info variable to the location of your Kaleidoscope directory.)
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
null-target:
|
||||||
|
$(info You should never see this message)
|
||||||
|
@:
|
@ -0,0 +1,213 @@
|
|||||||
|
// --------------------------------------
|
||||||
|
// i2c_scanner
|
||||||
|
//
|
||||||
|
// Version 1
|
||||||
|
// This program (or code that looks like it)
|
||||||
|
// can be found in many places.
|
||||||
|
// For example on the Arduino.cc forum.
|
||||||
|
// The original author is not know.
|
||||||
|
// Version 2, Juni 2012, Using Arduino 1.0.1
|
||||||
|
// Adapted to be as simple as possible by Arduino.cc user Krodal
|
||||||
|
// Version 3, Feb 26 2013
|
||||||
|
// V3 by louarnold
|
||||||
|
// Version 4, March 3, 2013, Using Arduino 1.0.3
|
||||||
|
// by Arduino.cc user Krodal.
|
||||||
|
// Changes by louarnold removed.
|
||||||
|
// Scanning addresses changed from 0...127 to 1...119,
|
||||||
|
// according to the i2c scanner by Nick Gammon
|
||||||
|
// http://www.gammon.com.au/forum/?id=10896
|
||||||
|
// Version 5, March 28, 2013
|
||||||
|
// As version 4, but address scans now to 127.
|
||||||
|
// A sensor seems to use address 120.
|
||||||
|
//
|
||||||
|
// This sketch tests the standard 7-bit addresses
|
||||||
|
// Devices with higher bit address might not be seen properly.
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Example pinmap for Bluepill I2Cs (by Testato)
|
||||||
|
|
||||||
|
I2C-1 standard pins: PB7(sda) PB6(scl)
|
||||||
|
Use it by "Wire" without pin declaration
|
||||||
|
Wire.begin();
|
||||||
|
|
||||||
|
I2C-1 alternative pins: PB9(sda) PB8(scl)
|
||||||
|
Remap the first I2C before call begin()
|
||||||
|
Wire.setSDA(PB9);
|
||||||
|
Wire.setSCL(PB8);
|
||||||
|
Wire.begin();
|
||||||
|
|
||||||
|
I2C-2: PB11(sda) PB10(scl)
|
||||||
|
Remap the second I2C before call begin()
|
||||||
|
Wire.setSDA(PB11);
|
||||||
|
Wire.setSCL(PB10);
|
||||||
|
Wire.begin();
|
||||||
|
|
||||||
|
If you want to use the two I2Cs simultaneously, create a new instance for the second I2C
|
||||||
|
TwoWire Wire2(PB11,PB10);
|
||||||
|
Wire2.begin();
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <SoftWire.h>
|
||||||
|
struct cRGB {
|
||||||
|
uint8_t b;
|
||||||
|
uint8_t g;
|
||||||
|
uint8_t r;
|
||||||
|
};
|
||||||
|
#define CRGB(r,g,b) (cRGB){b, g, r}
|
||||||
|
|
||||||
|
uint16_t rainbow_hue = 0; // stores 0 to 614
|
||||||
|
cRGB rainbow;
|
||||||
|
|
||||||
|
|
||||||
|
#define ELEMENTS(arr) (sizeof(arr) / sizeof((arr)[0]))
|
||||||
|
|
||||||
|
|
||||||
|
SoftWire SWire(PB6, PB7, SOFT_FAST);
|
||||||
|
|
||||||
|
// From http://web.mit.edu/storborg/Public/hsvtorgb.c - talk to Scott about licensing
|
||||||
|
void hsvToRgb(cRGB *cRGB, uint16_t h, uint16_t s, uint16_t v) {
|
||||||
|
// HSV to RGB conversion function with only integer math
|
||||||
|
uint16_t region, fpart, p, q, t;
|
||||||
|
|
||||||
|
if (s == 0) {
|
||||||
|
// color is grayscale
|
||||||
|
cRGB->r = cRGB->g = cRGB->b = v;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// make hue 0-5
|
||||||
|
region = h / 43;
|
||||||
|
// find remainder part, make it from 0-255
|
||||||
|
fpart = (h - (region * 43)) * 6;
|
||||||
|
|
||||||
|
// calculate temp vars, doing integer multiplication
|
||||||
|
p = (v * (255 - s)) >> 8;
|
||||||
|
q = (v * (255 - ((s * fpart) >> 8))) >> 8;
|
||||||
|
t = (v * (255 - ((s * (255 - fpart)) >> 8))) >> 8;
|
||||||
|
|
||||||
|
// assign temp vars based on color cone region
|
||||||
|
switch (region) {
|
||||||
|
case 0:
|
||||||
|
cRGB->r = v;
|
||||||
|
cRGB->g = t;
|
||||||
|
cRGB->b = p;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
cRGB->r = q;
|
||||||
|
cRGB->g = v;
|
||||||
|
cRGB->b = p;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
cRGB->r = p;
|
||||||
|
cRGB->g = v;
|
||||||
|
cRGB->b = t;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
cRGB->r = p;
|
||||||
|
cRGB->g = q;
|
||||||
|
cRGB->b = v;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
cRGB->r = t;
|
||||||
|
cRGB->g = p;
|
||||||
|
cRGB->b = v;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
cRGB->r = v;
|
||||||
|
cRGB->g = p;
|
||||||
|
cRGB->b = q;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t error, error2;
|
||||||
|
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
|
||||||
|
pinMode(PB9, OUTPUT_OPEN_DRAIN);
|
||||||
|
digitalWrite(PB9, LOW);
|
||||||
|
//Serial.begin(9600);
|
||||||
|
//Serial.println("\nI2C Scanner");
|
||||||
|
// Wire.begin();
|
||||||
|
SWire.begin();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void effect_rainbow_update() {
|
||||||
|
rainbow_hue += 1;
|
||||||
|
if (rainbow_hue >= 255) {
|
||||||
|
rainbow_hue %= 255;
|
||||||
|
}
|
||||||
|
hsvToRgb(&rainbow, rainbow_hue, 255, 100);
|
||||||
|
uint8_t data[] = {0x03,
|
||||||
|
rainbow.b,
|
||||||
|
rainbow.g,
|
||||||
|
rainbow.r
|
||||||
|
};
|
||||||
|
/*
|
||||||
|
if (!error) {
|
||||||
|
SWire.beginTransmission(0x5B);
|
||||||
|
|
||||||
|
uint8_t result = SWire.write( data, ELEMENTS(data));
|
||||||
|
error = SWire.endTransmission();
|
||||||
|
} else {
|
||||||
|
|
||||||
|
SWire.beginTransmission(0x5B);
|
||||||
|
error = SWire.endTransmission();
|
||||||
|
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
if (!error2) {
|
||||||
|
|
||||||
|
SWire.beginTransmission(0x58);
|
||||||
|
|
||||||
|
uint8_t result2 = SWire.write( data, ELEMENTS(data));
|
||||||
|
error2 = SWire.endTransmission();
|
||||||
|
} else {
|
||||||
|
SWire.beginTransmission(0x58);
|
||||||
|
error2 = SWire.endTransmission();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
byte error, address,r,g,b;
|
||||||
|
int nDevices;
|
||||||
|
|
||||||
|
//Serial.println("Scanning...");
|
||||||
|
|
||||||
|
nDevices = 0;
|
||||||
|
|
||||||
|
effect_rainbow_update();
|
||||||
|
/*
|
||||||
|
for (r=0;r<255;r+=10) {
|
||||||
|
for (g=0;g<255;g+=10) {
|
||||||
|
for (b=0;b<255;b+=10) {
|
||||||
|
|
||||||
|
|
||||||
|
SWire.beginTransmission(0x58);
|
||||||
|
uint8_t data[] = {0x03,
|
||||||
|
r,g,b
|
||||||
|
|
||||||
|
};
|
||||||
|
uint8_t result = Wire.write( data, ELEMENTS(data));
|
||||||
|
Wire.endTransmission();
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
delay(10); // wait 2m seconds for next scan
|
||||||
|
// }}}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"cpu": {
|
||||||
|
"fqbn": "keyboardio:STM32F1:keyboardio_model_100",
|
||||||
|
"port": ""
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue