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