changed wagoncolor by speed
This commit is contained in:
parent
153a9f0d83
commit
0cc531c7b3
|
@ -11,6 +11,8 @@
|
||||||
|
|
||||||
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
|
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
long lastPixelUpdate=0;
|
long lastPixelUpdate=0;
|
||||||
#define PIXELUPDATETIME 10
|
#define PIXELUPDATETIME 10
|
||||||
long lastRoutineUpdate=0;
|
long lastRoutineUpdate=0;
|
||||||
|
@ -19,6 +21,7 @@ long lastRoutineUpdate=0;
|
||||||
long loopmillis=0;
|
long loopmillis=0;
|
||||||
|
|
||||||
uint8_t height[NUMPIXELS];
|
uint8_t height[NUMPIXELS];
|
||||||
|
#define MAXHEIGHT 45
|
||||||
|
|
||||||
std::vector <Wagon> wagon_arr;
|
std::vector <Wagon> wagon_arr;
|
||||||
uint8_t maxid=0;
|
uint8_t maxid=0;
|
||||||
|
@ -77,15 +80,15 @@ void setup() {
|
||||||
previewHeightmap();
|
previewHeightmap();
|
||||||
|
|
||||||
spawnWagon();
|
spawnWagon();
|
||||||
|
spawnWagon();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void previewHeightmap(){
|
void previewHeightmap(){
|
||||||
int maxheight=45;
|
|
||||||
for (int i=0;i<NUMPIXELS;i++){
|
for (int i=0;i<NUMPIXELS;i++){
|
||||||
|
|
||||||
//uint32_t c=Wheel(height[i]*255/45);
|
//uint32_t c=Wheel(height[i]*255/45);
|
||||||
uint8_t b=height[i]*255/45;
|
uint8_t b=height[i]*255/MAXHEIGHT;
|
||||||
uint32_t c=strip.Color(255-b,b,0);
|
uint32_t c=strip.Color(255-b,b,0);
|
||||||
strip.setPixelColor(i,c);
|
strip.setPixelColor(i,c);
|
||||||
}
|
}
|
||||||
|
@ -94,11 +97,14 @@ void previewHeightmap(){
|
||||||
}
|
}
|
||||||
|
|
||||||
void spawnWagon(){
|
void spawnWagon(){
|
||||||
Wagon tmpr = Wagon(maxid++,NUMPIXELS,&strip, height, 35, 6, 0.5,0); //spawn new wagon
|
//Wagon tmpr = Wagon(maxid++,NUMPIXELS,&strip, height, 35, 6, 0.5,0); //spawn new wagon
|
||||||
|
Wagon tmpr = Wagon(maxid++,NUMPIXELS,&strip, height, random(30, 200), 6, random(0.2, 10)/10.0,0); //spawn new wagon
|
||||||
|
|
||||||
wagon_arr.push_back(tmpr);
|
wagon_arr.push_back(tmpr);
|
||||||
Serial.println("Spawned Wagon");
|
Serial.println("Spawned Wagon");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
loopmillis=millis();
|
loopmillis=millis();
|
||||||
|
|
||||||
|
|
71
wagon.cpp
71
wagon.cpp
|
@ -1,7 +1,6 @@
|
||||||
#include "wagon.h"
|
#include "wagon.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Wagon::Wagon(int id,int numpixels, Adafruit_NeoPixel *strip,uint8_t *height,float pos, float wagonlength,float startvel,float startacc)
|
Wagon::Wagon(int id,int numpixels, Adafruit_NeoPixel *strip,uint8_t *height,float pos, float wagonlength,float startvel,float startacc)
|
||||||
{
|
{
|
||||||
_id = id;
|
_id = id;
|
||||||
|
@ -12,6 +11,7 @@ Wagon::Wagon(int id,int numpixels, Adafruit_NeoPixel *strip,uint8_t *height,floa
|
||||||
_height=height;
|
_height=height;
|
||||||
_vel=startvel;
|
_vel=startvel;
|
||||||
_acc=startacc;
|
_acc=startacc;
|
||||||
|
_spawntime=millis();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,8 +44,7 @@ void Wagon::updatePhysics(float updatedelayms)
|
||||||
//rho Massendichte luft 1,2041
|
//rho Massendichte luft 1,2041
|
||||||
//A = 1m^2
|
//A = 1m^2
|
||||||
|
|
||||||
float m=50/_wagonlength; //mass of part of a wagon
|
float m=40/_wagonlength; //mass of part of a wagon
|
||||||
|
|
||||||
|
|
||||||
_acc=0;
|
_acc=0;
|
||||||
int cpos=(int)_pos;
|
int cpos=(int)_pos;
|
||||||
|
@ -68,7 +67,7 @@ void Wagon::updatePhysics(float updatedelayms)
|
||||||
if (_vel<0){
|
if (_vel<0){
|
||||||
bb*=-1;
|
bb*=-1;
|
||||||
}
|
}
|
||||||
float cc=AIRRES/m*_vel*_vel; //air resistance
|
float cc=AIRRES/m*pow(_vel,2); //air resistance
|
||||||
if (_vel<0){
|
if (_vel<0){
|
||||||
cc*=-1;
|
cc*=-1;
|
||||||
}
|
}
|
||||||
|
@ -84,34 +83,56 @@ void Wagon::updatePhysics(float updatedelayms)
|
||||||
}
|
}
|
||||||
|
|
||||||
_acc*=updatedelayms/1000;
|
_acc*=updatedelayms/1000;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_vel += _acc;
|
_vel += _acc;
|
||||||
_pos += _vel/PIXELDISTANCE;
|
_pos += _vel/PIXELDISTANCE;
|
||||||
/*Serial.print(" Vel=");
|
Serial.print(" Vel=");
|
||||||
Serial.print(_vel);
|
Serial.print(_vel);
|
||||||
Serial.print(" Acc=");
|
Serial.print(" Acc=");
|
||||||
Serial.println(_acc);*/
|
Serial.println(_acc);
|
||||||
}
|
}
|
||||||
|
|
||||||
float Wagon::getHeight(int p){
|
float Wagon::getHeight(int p){
|
||||||
if (p<0){
|
if (p<0){
|
||||||
p=0;
|
//p=0;
|
||||||
|
return (-p)*10;
|
||||||
}else if(p>=_numpixels){
|
}else if(p>=_numpixels){
|
||||||
p=_numpixels-1;
|
//p=_numpixels-1;
|
||||||
|
return (p-_numpixels)*10;
|
||||||
}
|
}
|
||||||
return _height[p];
|
return _height[p];
|
||||||
}
|
}
|
||||||
|
|
||||||
void Wagon::updateGraphics()
|
void Wagon::updateGraphics()
|
||||||
{
|
{
|
||||||
for(int i=_pos;i>_pos-_wagonlength;i--){
|
float wagonfeathering=2;
|
||||||
uint32_t c=_strip->Color(0,255,0);
|
for(int i=_pos+wagonfeathering;i>_pos-_wagonlength-wagonfeathering;i--){
|
||||||
if (i==int(_pos)){
|
float featherbrightness=1;
|
||||||
c=_strip->Color(0,255,100);
|
if (i>_pos){ //in front of wagon
|
||||||
|
featherbrightness=1 - (i-_pos)/wagonfeathering;
|
||||||
|
|
||||||
|
}else if (i<_pos-_wagonlength){ //behind of wagon
|
||||||
|
featherbrightness=1 - (_pos-_wagonlength -i)/wagonfeathering;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (featherbrightness<=0){ //distpercent between 0 and 1. 1-> full brightness, 0-> feathering distance away
|
||||||
|
featherbrightness=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//uint32_t c=_strip->Color(0,255*featherbrightness,0);
|
||||||
|
|
||||||
|
//uint32_t c=Wheel(_height[i]/45.0*255,featherbrightness);
|
||||||
|
|
||||||
|
//uint8_t b=_height[i]*255/45;
|
||||||
|
uint8_t b=abs(_vel)*255.0;
|
||||||
|
uint32_t c=_strip->Color(b*featherbrightness,(255-b)*featherbrightness,0);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_strip->setPixelColor(i,c);
|
_strip->setPixelColor(i,c);
|
||||||
}
|
}
|
||||||
//_strip->setPixelColor(10,_strip->Color(255,0,0));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int Wagon::pos()
|
int Wagon::pos()
|
||||||
|
@ -124,11 +145,33 @@ int Wagon::id()
|
||||||
return _id;
|
return _id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long Wagon::spawntime()
|
||||||
|
{
|
||||||
|
return _spawntime;
|
||||||
|
}
|
||||||
|
|
||||||
bool Wagon::alive()
|
bool Wagon::alive()
|
||||||
{
|
{
|
||||||
if (_pos>_numpixels){
|
/*if (_pos>_numpixels){
|
||||||
|
return false;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
if (millis()>_spawntime+30*1000){ //too old
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t Wagon::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);
|
||||||
|
}
|
||||||
|
|
3
wagon.h
3
wagon.h
|
@ -13,8 +13,10 @@ class Wagon
|
||||||
void updatePhysics(float updatedelayms);
|
void updatePhysics(float updatedelayms);
|
||||||
void updateGraphics();
|
void updateGraphics();
|
||||||
float getHeight(int p);
|
float getHeight(int p);
|
||||||
|
uint32_t Wheel(byte WheelPos,float brightness);
|
||||||
int pos();
|
int pos();
|
||||||
int id();
|
int id();
|
||||||
|
long spawntime();
|
||||||
bool alive();
|
bool alive();
|
||||||
private:
|
private:
|
||||||
int _numpixels;
|
int _numpixels;
|
||||||
|
@ -24,6 +26,7 @@ class Wagon
|
||||||
float _acc;
|
float _acc;
|
||||||
float _wagonlength;
|
float _wagonlength;
|
||||||
uint8_t *_height;
|
uint8_t *_height;
|
||||||
|
long _spawntime;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue