From 6c39c1560e5ea6da9a85d9f8aa9c4a24b88f3fc5 Mon Sep 17 00:00:00 2001 From: Fisch Date: Sun, 7 Apr 2019 14:24:16 +0200 Subject: [PATCH] changes for makerfaire ruhr 2019 --- achterbahn.ino | 63 ++++++++++++------------- backup/fx_scanner (Kopie 1).cpp | 84 +++++++++++++++++++++++++++++++++ backup/fx_scanner (Kopie 1).h | 26 ++++++++++ fx_flash.h | 2 - wagon.cpp | 30 ++++++------ 5 files changed, 155 insertions(+), 50 deletions(-) create mode 100644 backup/fx_scanner (Kopie 1).cpp create mode 100644 backup/fx_scanner (Kopie 1).h diff --git a/achterbahn.ino b/achterbahn.ino index 60e2315..2328bb5 100644 --- a/achterbahn.ino +++ b/achterbahn.ino @@ -22,7 +22,7 @@ long lastRoutineUpdate=0; #define ROUTINEUPDATETIME 20 long lastCheckspawn=0; #define CHECKSPAWNDELAY 4000 //delay in ms to check random spawn -#define SPAWNCHANCE 20 //1 out of x times wagon will spawn +#define SPAWNCHANCE 7 //1 out of x times wagon will spawn #define SPAWNCHANCEDOUBLE 5 //change of spawning a two trains simultaneously long lastCheckspawnEffect=0; #define CHECKSPAWNDELAY_EFFECT 10000 //delay in ms to check random effect @@ -65,39 +65,34 @@ void setup() { resetHeightmap(); //fixed heightmap -heightraw[0]=200; -heightraw[15]=200; -heightraw[28]=185; -heightraw[52]=170; -heightraw[88]=198; -heightraw[104]=176; -heightraw[118]=156; -heightraw[125]=154; -heightraw[130]=156; -heightraw[156]=184; -heightraw[164]=199; -heightraw[185]=191; -heightraw[190]=190; -heightraw[197]=191; -heightraw[219]=199; -heightraw[228]=189; -heightraw[252]=163; -heightraw[274]=150; -heightraw[282]=149; -heightraw[297]=151; -heightraw[329]=165; -heightraw[366]=198; -heightraw[404]=191; -heightraw[428]=197; -heightraw[459]=191; -heightraw[489]=197; -heightraw[502]=183; -heightraw[521]=162; -heightraw[546]=151; -heightraw[558]=160; -heightraw[585]=198; -heightraw[592]=194; -heightraw[599]=194; +heightraw[0]=182; +heightraw[51]=100; +heightraw[91]=57; +heightraw[121]=100; +heightraw[147]=100; +heightraw[170]=75; +heightraw[184]=71; +heightraw[216]=100; +heightraw[228]=103; +heightraw[257]=101; +heightraw[305]=107; +heightraw[316]=100; +heightraw[349]=78; +heightraw[386]=100; +heightraw[420]=83; +heightraw[438]=78; +heightraw[460]=83; +heightraw[489]=95; +heightraw[515]=92; +heightraw[566]=100; +heightraw[580]=103; +heightraw[599]=89; + + + + + + diff --git a/backup/fx_scanner (Kopie 1).cpp b/backup/fx_scanner (Kopie 1).cpp new file mode 100644 index 0000000..3ee14d6 --- /dev/null +++ b/backup/fx_scanner (Kopie 1).cpp @@ -0,0 +1,84 @@ +#include "fx_scanner.h" + +FX_Scanner::FX_Scanner(int numpixels,Adafruit_NeoPixel *strip,uint8_t *height,int startpos,float scannervel,uint32_t scannercolor) +{ + _numpixels=numpixels; + _pos = startpos; + _strip=strip; + _height=height; + _vel=scannervel; + _scannercolor=scannercolor; +} + +FX_Scanner::FX_Scanner() +{ + _numpixels=0; + _pos = -1; //for active false + _strip=0; + _height=0; + _vel=0; + _scannercolor=0; +} + +void FX_Scanner::updateRoutine(float updatedelayms) +{ + _pos+=_vel*updatedelayms/1000.0; +} + +void FX_Scanner::updateGraphics() +{ + #define FEATHERDISTANCE 3 //in both directions + for(int i=0;i<_numpixels;i++){ + float heightdistfromlaser=abs(_height[i]-_pos); + if (heightdistfromlaser<=FEATHERDISTANCE) { + + uint8_t _r = _scannercolor >> 16; + uint8_t _g = _scannercolor >> 8; + uint8_t _b = _scannercolor; + + float distmult=1.0-(heightdistfromlaser/FEATHERDISTANCE); + _r*=distmult; + _g*=distmult; + _b*=distmult; + + uint32_t _pxcolor=_strip->getPixelColor(i); //get current color of that pixel + uint8_t _pxr = _pxcolor >> 16; + uint8_t _pxg = _pxcolor >> 8; + uint8_t _pxb = _pxcolor; + uint16_t _tmpr=_pxr+_r; //add colors + uint16_t _tmpg=_pxg+_g; + uint16_t _tmpb=_pxb+_b; + if (_tmpr>255){ //clamp + _tmpr=255; + } + if (_tmpg>255){ + _tmpg=255; + } + if (_tmpb>255){ + _tmpb=255; + } + _strip->setPixelColor(i,_tmpr,_tmpg,_tmpb); //draw pixel + } + } +} + +bool FX_Scanner::active() +{ + if (_pos>256 || _pos<0){ + return false; + } + return true; +} + +uint32_t FX_Scanner::Wheel(byte WheelPos,float brightness) { + WheelPos = 255 - WheelPos; + if(WheelPos < 85) { + return _strip->Color(255 - WheelPos * 3*brightness, 0, WheelPos * 3*brightness); + } + if(WheelPos < 170) { + WheelPos -= 85; + return _strip->Color(0, WheelPos * 3*brightness, 255 - WheelPos * 3*brightness); + } + WheelPos -= 170; + return _strip->Color(WheelPos * 3*brightness, 255 - WheelPos * 3*brightness, 0); +} diff --git a/backup/fx_scanner (Kopie 1).h b/backup/fx_scanner (Kopie 1).h new file mode 100644 index 0000000..bdf6aa7 --- /dev/null +++ b/backup/fx_scanner (Kopie 1).h @@ -0,0 +1,26 @@ +#ifndef FX_SCANNER_H +#define FX_SCANNER_H +#include +#include + +class FX_Scanner +{ + public: + FX_Scanner(int numpixels,Adafruit_NeoPixel *strip,uint8_t *height,int startpos,float scannervel,uint32_t scannercolor); + FX_Scanner(); + void updateRoutine(float updatedelayms); + void updateGraphics(); + uint32_t Wheel(byte WheelPos,float brightness); + bool active(); + private: + int _numpixels; + Adafruit_NeoPixel *_strip; + float _pos; + float _vel; + uint8_t *_height; + uint32_t _scannercolor; +}; + +#endif + + diff --git a/fx_flash.h b/fx_flash.h index 1b209c0..8b9119b 100644 --- a/fx_flash.h +++ b/fx_flash.h @@ -24,5 +24,3 @@ class FX_Flash : public Effect }; #endif - - diff --git a/wagon.cpp b/wagon.cpp index 5e8e7e5..677b382 100644 --- a/wagon.cpp +++ b/wagon.cpp @@ -2,12 +2,14 @@ #define WAGONLENGTH 3 -#define EDGE_KILL -//#define EDGE_WALL +//#define EDGE_KILL +#define EDGE_WALL //#define EDGE_BOUNCE //#define EDGE_WRAP - #define WRAPLEDPOS _numpixels //standard - //#define WRAPLEDPOS (_numpixels-5) //led index which is also led 0 +#define WRAPLEDENDPOS _numpixels //default + //#define WRAPLEDENDPOS (_numpixels-5) //led index which is last led +#define WRAPLEDSTARTPOS 0 //default + //#define WRAPLEDSTARTPOS 23 //led index which is the same as WRAPLEDENDPOS (from start) #define TYPE_RAINBOW 1 @@ -167,9 +169,9 @@ void Wagon::updatePhysics(float updatedelayms) - if (_pos>=WRAPLEDPOS){ + if (_pos>=WRAPLEDENDPOS){ #ifdef EDGE_WRAP - _pos-=WRAPLEDPOS; //Wrap around edges + _pos-=WRAPLEDENDPOS; //Wrap around edges #endif #ifdef EDGE_BOUNCE _vel*=-1; //bounce at edges @@ -178,14 +180,14 @@ void Wagon::updatePhysics(float updatedelayms) //nothing #endif #ifdef EDGE_KILL - if (_pos>=WRAPLEDPOS+(_trainlength*WAGONLENGTH)){ + if (_pos>=WRAPLEDENDPOS+(_trainlength*WAGONLENGTH)){ _health=0; } #endif } - if (_pos<0){ + if (_pos=_numpixels){ + }else if(p>=WRAPLEDENDPOS){ #ifdef EDGE_WRAP - p=p-_numpixels; //wrap edge + p=p-WRAPLEDENDPOS; //wrap edge #endif #ifdef EDGE_WALL - return _height[_numpixels-1]+(p-_numpixels)*100.0; //edges as wall + return _height[WRAPLEDENDPOS-1]+(p-WRAPLEDENDPOS)*100.0; //edges as wall #endif #ifdef EDGE_KILL - return _height[_numpixels-1]+(p-_numpixels)*100.0; //samel like edges as wall + return _height[WRAPLEDENDPOS-1]+(p-WRAPLEDENDPOS)*100.0; //samel like edges as wall #endif } return _height[p]; @@ -282,7 +284,7 @@ void Wagon::updateGraphics() int iCorrected=i; #ifdef EDGE_WRAP if (i<0){ - iCorrected=WRAPLEDPOS+i+1; //Wrap around edges + iCorrected=WRAPLEDENDPOS+i+1; //Wrap around edges } #endif