#include <Arduino.h>
#include <Wire.h>
#include <SPI.h>
#include <Queue.h>
#include "PicoSem.h"
#include "PMC_Interface.h"
#include "Actionneur.h"
rtos::Queue<Valeur_s, 64> fifoValeur; // Liste des valeurs à échanger avec le contrôleur
rtos::Queue<Message_s, 32> fifoMessage; // Liste des messages à échanger avec le contrôleur
// --- Communication inter-process
PicoSem interCore(PICO_EMPTY, PICO_EMPTY); // Init setting both buffers "empty"
interData_t dataFrom0, dataFrom1;
// Actionneurs
constexpr Pin pinTouche = 7;
void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
interCore.setDataEmptyFor(1); // Pas encore de données
// Initialiser la communication SPI avec le contrôleur principal
}
void setup1() {
interCore.setDataEmptyFor(0); // Pas encore de données
// Initialiser les actionneurs
}
void loop() {
// Si je peux envoyer au coeur 1
if ( interCore.canISendTo(1) ) {
// Préparer le buffer et annoncer qu'il est disponible
// dataFrom0 =
interCore.setDataReadyFor(1);
}
// S'il y a des données en attente depuis le coeur 1
if ( interCore.anyDataFor(0) ) {
// Lire les donnée reçues
// ... = dataFrom1
interCore.setDataReadBy(0); // Vider le buffer
}
}
void loop1() {
static actionneur::Touche touche = actionneur::Touche(pinTouche);
// S'il y a des données en attente depuis le coeur 1
if ( interCore.anyDataFor(1) ) {
// Lire les donnée reçues
// ... = dataFrom0
interCore.setDataReadBy(1); // Vider le buffer
}
actionneur::Touche::Event event {touche.check()};
if (event == actionneur::Touche::Event::Down)
{
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("Down");
}
else if (event == actionneur::Touche::Event::Hold)
{
static unsigned long __millis = 0;
if (__millis == 0 || millis() - __millis > 200)
{
Serial.println("Hold");
__millis = millis();
}
}
else if (event == actionneur::Touche::Event::Up)
{
digitalWrite(LED_BUILTIN, LOW);
Serial.println("Up");
}
// Si je peux envoyer au coeur 1
if ( interCore.canISendTo(0) ) {
// Préparer le buffer et annoncer qu'il est disponible
// dataFrom1 =
interCore.setDataReadyFor(0);
}
}