fork download
  1. // Привет всем! Сегодня поиграемся с хаосом и светом
  2. class ChaosGen { // создаем класс
  3. public: // обявляем публичные переменные и функции (свойства и методы)
  4. ChaosGen(float a, float r, float b, float x, float y, float z, float dt); // Конструктор класса
  5. float dx; // next value for x
  6. float dy; // next value for y
  7. float dz; // next value for z
  8. void updateGen(); // метод, вызов которого решает уравнение генератора хаоса
  9. void setParam(float a, float r, float b); // опциональный метод, вызов которого определяет входящие параметры генератора вместо стандартных 10.0, 28.0, 8/3
  10. void setInit(float x, float y, float z); // опциональный метод, вызов которого определяет начальные условия генератора вместо стандартных 0, 1, 0
  11. void setdt(float dt); // опциональный метод, вызов которого определяет шаг времени дифференциирования генератора вместо стандартных 0.003
  12. private: // обявляем приватные переменные (свойства)
  13. float _a; // declare value for s
  14. float _r; // declare value for r
  15. float _b; // declare value for b
  16. float _x; // declare starting value for x
  17. float _y; // declare starting value for y
  18. float _z; // declare starting value for z
  19. float _dt; // declare value for dt
  20. };
  21. byte ledPin = 5; // LED connected to digital pin 5
  22. // a r b x0 y0 z0 dt
  23. ChaosGen Lorenz(10.0, 28.0, 8 / 3, 0, 1, 0, 0.003); // создаем объект "генератора Лоренца" со стандартными начальными параметрами и входящими значениями "из книжки"/
  24. // таких обектов только с разными параметрами можно создать скольео угодно, например ChaosGen Lorenz1(8, 25, 7, 0, 1, 0, 0.003); и т.д.
  25. void setup() {
  26. Serial.begin(57600); // запускаем монитор порта USB
  27. Lorenz.setdt(0.00015); // [0.02-0.0001] опционально! устанавливаем шаг времени дифференциирования dt (физический смысл - расстояние между соседними точками на кривой аттрактора)
  28. // Большое время не позволит генератору запустится, а слишком маленькое не даст лицезреть смены результатов в адекватных временных рамках
  29. }
  30.  
  31. void loop() {
  32. Lorenz.updateGen(); // решаем уравнение генератора хаоса и получаем новые x, y, z
  33. //Serial.print(Lorenz.dx); Serial.print(" "); Serial.print(Lorenz.dy); Serial.print(" "); Serial.println(Lorenz.dz); //выводим в порт значения генератора хаоса (x, y, z)
  34. byte xmod = constrain(abs(Lorenz.dx), 1, 254); // следим за тем, чтобы значения не были ниже 1 и если так - инвертируем их относительно 0 взяв модуль значения
  35. analogWrite(ledPin, xmod); // управляем яркостью LED кольца значением x
  36. }
  37.  
  38.  
  39. ChaosGen::ChaosGen(float a, float r, float b, float x, float y, float z, float dt) {
  40. _a = a; // declare value for a
  41. _r = r; // declare value for r
  42. _b = b; // declare value for b
  43. _x = x; // declare starting value for x
  44. _y = y; // declare starting value for y
  45. _z = z; // declare starting value for z
  46. _dt = dt; // declare value for dt
  47. }
  48.  
  49. void ChaosGen::updateGen() {
  50. dx = _x + _a * (_y - _x) * _dt;
  51. dy = _y + (_r * _x - _y - _x * _z) * _dt;
  52. dz = _z + (_x * _y - _b * _z) * _dt;
  53. _x = dx;
  54. _y = dy;
  55. _z = dz;
  56. }
  57.  
  58. void ChaosGen::setParam(float a, float r, float b) {
  59. _a = a; // declare value for a
  60. _r = r; // declare value for r
  61. _b = b; // declare value for b
  62. }
  63.  
  64. void ChaosGen::setInit(float x, float y, float z) {
  65. _x = x; // declare starting value for x
  66. _y = y; // declare starting value for y
  67. _z = z; // declare starting value for z
  68. }
  69.  
  70. void ChaosGen::setdt(float dt) {
  71. _dt = dt; // declare value for dt
  72. }
  73.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
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
                           ^
stdout
Standard output is empty