// Привет всем! Сегодня поиграемся с хаосом и светом
class ChaosGen {// создаем класс
public:// обявляем публичные переменные и функции (свойства и методы)
ChaosGen(float a, float r, float b, float x, float y, float z, float dt);// Конструктор класса
float dx;// next value for x
float dy;// next value for y
float dz;// next value for z
void updateGen();// метод, вызов которого решает уравнение генератора хаоса
void setParam(float a, float r, float b);// опциональный метод, вызов которого определяет входящие параметры генератора вместо стандартных 10.0, 28.0, 8/3
void setInit(float x, float y, float z);// опциональный метод, вызов которого определяет начальные условия генератора вместо стандартных 0, 1, 0
void setdt(float dt);// опциональный метод, вызов которого определяет шаг времени дифференциирования генератора вместо стандартных 0.003
ChaosGen Lorenz(10.0, 28.0, 8/3, 0, 1, 0, 0.003);// создаем объект "генератора Лоренца" со стандартными начальными параметрами и входящими значениями "из книжки"/
// таких обектов только с разными параметрами можно создать скольео угодно, например ChaosGen Lorenz1(8, 25, 7, 0, 1, 0, 0.003); и т.д.
void setup(){
Serial.begin(57600);// запускаем монитор порта USB
Lorenz.setdt(0.00015);// [0.02-0.0001] опционально! устанавливаем шаг времени дифференциирования dt (физический смысл - расстояние между соседними точками на кривой аттрактора)
// Большое время не позволит генератору запустится, а слишком маленькое не даст лицезреть смены результатов в адекватных временных рамках
}
void loop(){
Lorenz.updateGen();// решаем уравнение генератора хаоса и получаем новые x, y, z
//Serial.print(Lorenz.dx); Serial.print(" "); Serial.print(Lorenz.dy); Serial.print(" "); Serial.println(Lorenz.dz); //выводим в порт значения генератора хаоса (x, y, z)
byte xmod = constrain(abs(Lorenz.dx), 1, 254);// следим за тем, чтобы значения не были ниже 1 и если так - инвертируем их относительно 0 взяв модуль значения
analogWrite(ledPin, xmod);// управляем яркостью LED кольца значением x
}
ChaosGen::ChaosGen(float a, float r, float b, float x, float y, float z, float dt){
_a = a;// declare value for a
_r = r;// declare value for r
_b = b;// declare value for b
_x = x;// declare starting value for x
_y = y;// declare starting value for y
_z = z;// declare starting value for z
_dt = dt;// declare value for dt
}
void ChaosGen::updateGen(){
dx = _x + _a *(_y - _x)* _dt;
dy = _y +(_r * _x - _y - _x * _z)* _dt;
dz = _z +(_x * _y - _b * _z)* _dt;
_x = dx;
_y = dy;
_z = dz;
}
void ChaosGen::setParam(float a, float r, float b){
_a = a;// declare value for a
_r = r;// declare value for r
_b = b;// declare value for b
}
void ChaosGen::setInit(float x, float y, float z){
prog.cpp:21:1: error: ‘byte’ does not name a type
byte ledPin = 5; // LED connected to digital pin 5
^~~~
prog.cpp: In function ‘void setup()’:
prog.cpp:26:3: error: ‘Serial’ was not declared in this scope
Serial.begin(57600); // запускаем монитор порта USB
^~~~~~
prog.cpp: In function ‘void loop()’:
prog.cpp:34:3: error: ‘byte’ was not declared in this scope
byte xmod = constrain(abs(Lorenz.dx), 1, 254); // следим за тем, чтобы значения не были ниже 1 и если так - инвертируем их относительно 0 взяв модуль значения
^~~~
prog.cpp:35:15: error: ‘ledPin’ was not declared in this scope
analogWrite(ledPin, xmod); // управляем яркостью LED кольца значением x
^~~~~~
prog.cpp:35:23: error: ‘xmod’ was not declared in this scope
analogWrite(ledPin, xmod); // управляем яркостью LED кольца значением x
^~~~
prog.cpp:35:27: error: ‘analogWrite’ was not declared in this scope
analogWrite(ledPin, xmod); // управляем яркостью LED кольца значением x
^