Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clock Improvements #1226

Closed
AcHoBi opened this issue Nov 21, 2017 · 2 comments
Closed

Clock Improvements #1226

AcHoBi opened this issue Nov 21, 2017 · 2 comments

Comments

@AcHoBi
Copy link

AcHoBi commented Nov 21, 2017

image

I have put a Neopixel clock on the backside of an existing 60cm diameter clock. There are 110 pixels.

  1. Because my pixels count is not a factor of 60 the default calculation causes an override of seconds and minutes hand. That means that the seconds hands moves over the 12 o’clock position to the 1 position and suddenly jumps back to the 12 position. I have fixed this by a more accurate calculation:

Changes in xdrv_ws2812.ino V5.9.1f

`void Ws2812Clock()
{
strip->ClearTo(0); // Reset strip
// int clksize = 600 / (int)Settings.light_pixels;
// Ws2812UpdateHand((RtcTime.second * 10) / clksize, WS_SECOND);
// Ws2812UpdateHand((RtcTime.minute * 10) / clksize, WS_MINUTE);
// Ws2812UpdateHand(((RtcTime.hour % 12) * (50 / clksize)) + ((RtcTime.minute * 10) / (12 * clksize)), WS_HOUR);
int clksize = 60000 / (int)Settings.light_pixels;
Ws2812UpdateHand((RtcTime.second * 1000) / clksize, WS_SECOND);
Ws2812UpdateHand((RtcTime.minute * 1000) / clksize, WS_MINUTE);
Ws2812UpdateHand(((RtcTime.hour % 12) * (5000 / clksize)) + ((RtcTime.minute * 1000) / (12 * clksize)), WS_HOUR);

Ws2812StripShow();
}`

  1. Width range of hands is from 1 – 30
    For dimming the outer hand pixels a shiftleft is used.
    First Problem was exceeding the uint8 range by using more than 15 ??? pixels for the width. This causes some white bright pixels at several regions of the clock.
    Second Problem was the strong dimming so that only a maximum of 5-7 pixels are visible depending to the overall dimming. So I disabled the dimming for correct

Changes in xdrv_ws2812.ino V5.9.1f

`void Ws2812UpdatePixelColor(int position, struct WsColor hand_color, uint8_t hand)
{
#if (USE_WS2812_CTYPE > 1)
RgbwColor color;
#else
RgbColor color;
#endif

uint16_t mod_position = mod(position, (int)Settings.light_pixels);

color = strip->GetPixelColor(mod_position);
float dimmer = 100 / (float)Settings.light_dimmer;
// uint8_t offset = 1 << hand;
uint8_t offset = 1
color.R = cmin(color.R + ((hand_color.red / dimmer) / offset), 255);
color.G = cmin(color.G + ((hand_color.green / dimmer) / offset), 255);
color.B = cmin(color.B + ((hand_color.blue / dimmer) / offset), 255);
strip->SetPixelColor(mod_position, color);
}`

Sorry, I wanted to format the code differences a little bit better, but is is my first try here.
Would be great if these changes could be overtaken to the official version ;-)

@arendst
Copy link
Owner

arendst commented Nov 21, 2017

Thnx. Will look over it and probably integrate in next (pre) release.

arendst added a commit that referenced this issue Nov 21, 2017
5.9.1g
 * Fix typo ALIRFRCV into ARIRFRCV
 * Add nicer clock support for
larger hand widths
 * Add better clock support for different pixel
counts (#1226)
 * Remove command EnergyReset 1..3
 * Add commands
EnergyReset1 0..42500, EnergyReset2 0..42500 and EnergyReset3
0..42500000
 *  to (Re)set Energy Today, Yesterday or Total respectively
in Wh (#406, #685, #1202)
 * Add SettingsSaveAll routine to command
SaveData to be used before controlled power down (#1202)
@jhlweb
Copy link

jhlweb commented Nov 22, 2017

@AcHoBi good improvement. makes it much better with a 144LED count to. thx.

@arendst arendst closed this as completed Nov 23, 2017
arendst added a commit that referenced this issue Dec 1, 2017
5.10.0 20171201
 * Upgrade library ArduinoJson to 5.11.2
 * Upgrade
library IRRemoteEsp8266 to 2.2.1 + 2 commits but disabled some protocols
(code size reduction)
 * Upgrade library NeoPixelBus to 2.2.9
 * Upgrade
library OneWire to 2.3.3 + 6 commits and disabled CRC lookup-table
(#define ONEWIRE_CRC8_TABLE 0) (code size reduction)
 * Update library
PubSubClient to 2.6 + 9 commits and additional delay (#790)
 * Update
core_esp8266_wiring_digital.c to latest (staged) level
 * Patch library
I2Cdevlib-Core for esp8266-core 2.4.0-rc2 compatibility
 * Remove
command EnergyReset 1..3 now replaced by ENergyReset1 to EnergyReset3
 *
Remove spaces in JSON messages (code size reduction)
 * Renamed
xsns_05_ds18x20.ino to xsns_05_ds18x20_legacy.ino still using library
OneWire and providing dynamic sensor scan
 * Fix possible iram1_0_seg
compile error by shrinking ICACHE_RAM_ATTR code usage
 * Fix PWM
watchdog timeout if Dimmer is set to 100 or Color set to 0xFF (#1146)
 *
Fix Sonoff Bridge Learn Mode hang caused by unrecognised RF code
(#1181)
 * Fix blank console log window by using XML character encoding
(#1187)
 * Fix wrong response name for command HlwISet (#1214)
 * Fix
DHT type sensor timeout recognition by distinguish "signal already
there" from "timeout" (#1233)
 * Add fixed color options 1..12 to
command Color
 * Add + (plus) and - (minus) to commands Dimmer
(+10/-10), Speed and Scheme
 * Add + (plus) and - (minus) to command
Color to select 1 out of 12 preset colors
 * Add + (plus) and - (minus)
to command Ct to control ColdWarm led ColorTemperature (+34/-34)
 * Add
commands EnergyReset1 0..42500, EnergyReset2 0..42500 and EnergyReset3
0..42500000
 *  to (Re)set Energy Today, Yesterday or Total respectively
in Wh (#406, #685, #1202)
 * Add optional ADS1115 driver as alternative
for unsupported I2Cdevlib in esp8266-core 2.4.0-rc2
 * Add support for
INA219 Voltage and Current sensor to be enabled in user_config.h with
define USE_INA219
 * Add support for Arilux LC11 (Clearing RF home code
when selecting no Arilux module)
 * Add support for WS2812 RGBW
ledstrips to be enabled in user_config.h with define USE_WS2812_CTYPE
(#1156)
 * Add SettingsSaveAll routine to command SaveData to be used
before controlled power down (#1202)
 * Add option PUSHBUTTON_TOGGLE
(SwitchMode 7) to allow toggling on any switch change (#1221)
 * Add new
xdrv_05_ds18x20.ino free from library OneWire and add the following
features:
 *  Add support for DS1822
 *  Add forced setting of 12-bit
resolution for selected device types (#1222)
 *  Add read temperature
retry counter (#1215)
 *  Fix lost sensors by performing sensor probe at
restart only thereby removing dynamic sensor probe (#1215)
 *  Fix
sensor address sorting using ascending sort on sensor type followed by
sensor address
 *  Rewrite JSON resulting in shorter message allowing
more sensors in default firmware image:
 *
"DS18B20-1":{"Id":"00000483C23A","Temperature":19.5},"DS18B20-2":{"Id":"0000048EC44C","Temperature":19.6}

* Add additional define in user_config.h to select either single sensor
(defines disabled), new multi sensor (USE_DS18X20) or legacy multi
sensor (USE_DS18X20_LEGACY)
 * Add clock support for more different
pixel counts (#1226)
 * Add support for Sonoff Dual R2 (#1249)
 * Add
FriendlyName to web page tab and add program information to web page
footer (#1275)
curzon01 pushed a commit to curzon01/Tasmota that referenced this issue Sep 6, 2018
5.9.1g
 * Fix typo ALIRFRCV into ARIRFRCV
 * Add nicer clock support for
larger hand widths
 * Add better clock support for different pixel
counts (arendst#1226)
 * Remove command EnergyReset 1..3
 * Add commands
EnergyReset1 0..42500, EnergyReset2 0..42500 and EnergyReset3
0..42500000
 *  to (Re)set Energy Today, Yesterday or Total respectively
in Wh (arendst#406, arendst#685, arendst#1202)
 * Add SettingsSaveAll routine to command
SaveData to be used before controlled power down (arendst#1202)
@Jason2866 Jason2866 mentioned this issue Sep 1, 2020
6 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants