Advertisement
Noim

LED

Aug 13th, 2016
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.33 KB | None | 0 0
  1. #include <StandardCplusplus.h>
  2. #include <vector>
  3. #include <serstream>
  4.  
  5. using namespace std;
  6. namespace std
  7. {
  8. ohserialstream cout(Serial);
  9. }
  10. //LED RGB color fade 1.0 by Noim
  11.  
  12.  
  13. bool randomBool() {
  14.   return rand() % 2 == 1;
  15. }
  16. class LED {
  17.     int pins[4];
  18.     int r = 0;
  19.     int g = 0;
  20.     int b = 0;
  21.     int task = 1;
  22.     int taskgoal = 255;
  23.   public:
  24.     void newTask() {
  25.       int t = random(1, 3);
  26.       this->task = t;
  27.       return;
  28.     }
  29.     void newGoal() {
  30.       int t = random(1, 255);
  31.       this->taskgoal = t;
  32.       return;
  33.     }
  34.     boolean taskFinished() {
  35.       int current;
  36.       switch (task) {
  37.         case 1:
  38.           current = this->r;
  39.           break;
  40.         case 2:
  41.           current = this->g;
  42.           break;
  43.         case 3:
  44.           current = this->b;
  45.           break;
  46.       }
  47.       if (current == taskgoal) {
  48.         return true;
  49.       } else {
  50.         return false;
  51.       }
  52.       return false;
  53.     }
  54.     void runTask() {
  55.       if (taskFinished()) {
  56.         newTask();
  57.         newGoal();
  58.         cout << "New Task and new Goal.\n";
  59.       }
  60.       int current;
  61.       switch (task) {
  62.         case 1:
  63.           current = this->r;
  64.           break;
  65.         case 2:
  66.           current = this->g;
  67.           break;
  68.         case 3:
  69.           current = this->b;
  70.           break;
  71.       }
  72.       if (current < taskgoal) {
  73.         switch (task) {
  74.           case 1:
  75.             cout << r << "+1" << "\n";
  76.             this->redefine(this->r + 1, this->g, this->b);
  77.             cout << r << "+1" << "\n";
  78.             break;
  79.           case 2:
  80.             cout << g << "+1" << "\n";
  81.             this->redefine(this->g, this->g + 1, this->b);
  82.             break;
  83.           case 3:
  84.             cout << b << "+1" << "\n";
  85.             this->redefine(this->r, this->g, this->b + 1);
  86.             break;
  87.         }
  88.       } else if (current > taskgoal) {
  89.         switch (task) {
  90.           case 1:
  91.             cout << r << "-1" << "\n";
  92.             this->redefine(this->r - 1, this->g, this->b);
  93.             break;
  94.           case 2:
  95.             cout << g << "-1" << "\n";
  96.             this->redefine(this->r, this->g - 1, this->b);
  97.             break;
  98.           case 3:
  99.             cout << b << "-1" << "\n";
  100.             this->redefine(this->r, this->g, this->b - 1);
  101.             break;
  102.         }
  103.       }
  104.       analogWrite(pins[0], this->r);
  105.       analogWrite(pins[1], this->g);
  106.       analogWrite(pins[2], this->b);
  107.       return;
  108.     }
  109.     void ledinit(int p[]) {
  110.       this->r = random(1, 255);
  111.       this->g = random(1, 255);
  112.       this->b = random(1, 255);
  113.       for (int i = 1; i < 3; i++) {
  114.         pins[i] = p[i];
  115.         pinMode(pins[i], OUTPUT);
  116.       }
  117.       pins[3] = p[3];
  118.       analogWrite(pins[0], this->r);
  119.       analogWrite(pins[1], this->g);
  120.       analogWrite(pins[2], this->b);
  121.       analogWrite(pins[3], LOW);
  122.       newTask();
  123.       newGoal();
  124.       runTask();
  125.       return;
  126.     }
  127.     void redefine(int rr, int gg, int bb) {
  128.       r = rr;
  129.       g = gg;
  130.       b = bb;
  131.       return;
  132.     }
  133. };
  134. std::vector< LED >leds;
  135.  
  136. void setup() {
  137.   Serial.begin(9600);
  138.   LED l1;
  139.   int l1pins[4] = {11, 9, 8, 10};
  140.   l1.ledinit(l1pins);
  141.   leds.push_back(l1);
  142. }
  143.  
  144. void loop() {
  145.   for (LED l : leds) {
  146.     l.runTask();
  147.     cout << "Run Task" << "\n";
  148.   }
  149.   delay(100);
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement