Busco que usando 5 leds RGB mediante Arduino demuestre visualmente el funcionamiento de el problema de la cena de los filosofos, es decir, un color de los RGB para cada estado (pensando, hambriento y comiendo). Algo similar a lo mostrado en este video:
[login to view URL]
Aqui mismo anexo un codigo de ejemplo:
#define MAX 5
Semaphore forks[MAX];
byte ids = 1;
byte leds[] = { 5, 6, 7, 8, 9 };
void eating(byte id) {
digitalWrite(leds[id], HIGH);
Tasks::delay(1 + random(MAX * 100));
digitalWrite(leds[id], LOW);
}
class Philosopher: public Task {
public:
void setup() {
_id = ids++;
}
void loop() {
forks[_id - 1].wait();
forks[_id].wait();
eating(_id);
forks[_id - 1].signal();
forks[_id].signal();
}
private:
byte _id;
};
Philosopher philosophers[MAX-1];
void setup() {
randomSeed(analogRead(0));
Tasks::init();
Tasks::set_idle_handler(timer_sleep);
for (int i = 0; i forks[i].signal();
pinMode(leds[i], OUTPUT);
}
for (int i = 0; i Tasks::start(philosophers[i]);
}
void loop() {
forks[0].wait();
forks[MAX-1].wait();
eating(0);
forks[0].signal();
forks[MAX-1].signal();
}