3dprint:strobo-tumbling-cubes
This is an old revision of the document!
Table of Contents
Tumbling Cubes in Strobo lights
A hall sensor (outputting just high or low) measures the passing of four magnets to compute the angle.
Files
3D
Code
- main.cpp
#include <Arduino.h> #define LED 18 #define HALL 25 volatile unsigned long ts[4]={0,0,0,0}; volatile int tsi = 0; void IRAM_ATTR recordTime() { tsi+=1; tsi&=3; ts[tsi] = micros(); } void setup() { pinMode(LED, OUTPUT); pinMode(HALL, INPUT); digitalWrite(LED, HIGH); Serial.begin(115200); attachInterrupt(digitalPinToInterrupt(HALL), recordTime, FALLING); } double step = 0.25; double golden = 1.0-(sqrt(5)-1)/2; double nextAngle = golden; int lasti = 0; bool full = false; double dts[4]={0,0,0,0}; void loop() { if (tsi!=lasti) { // Tick has happend; lasti = tsi; if (tsi==0) { full = true; } if (full) { double angle = tsi*step; if (nextAngle>angle && nextAngle-angle<step) { double dt = ts[tsi]-ts[(tsi+3)&3]; dts[tsi] = 0.8*dts[tsi]+0.2*dt; double sum = 0.0; for (int i=0; i<4; i++) { sum += dts[tsi]; } //double realStep = dts[(tsi+1)&3]; unsigned int w = dts[(tsi+1)&3]*(nextAngle-angle)/step; // dt*(nextAngle-angle)/step*(realStep/step); if (w<200000) { delayMicroseconds(w); } digitalWrite(LED, LOW); delayMicroseconds(200); digitalWrite(LED, HIGH); nextAngle += golden; if (nextAngle>1.0) { nextAngle -= 1.0; } } } } }
Circuit
3dprint/strobo-tumbling-cubes.1767897700.txt.gz · Last modified: by ivo
