// SPDX-FileCopyrightText: 2025 Amal Mazrah // SPDX-FileCopyrightText: 2025 Jonas Smedegaard // SPDX-FileCopyrightText: 2025 Mennatullah Hatim Kassim // SPDX-FileCopyrightText: 2025 Noor Ahmad // SPDX-FileCopyrightText: 2025 Tanishka Suwalka // SPDX-License-Identifier: GPL-3.0-or-later /// Mussel - a small library for Arduino to emulate a mussel biosensor /// /// @version 0.0.2 /// @see /// @see #ifndef Mussel_h #define Mussel_h #include "Arduino.h" // seconds #define MUSSEL_NORMAL_PACE 50U #define MUSSEL_STRESS_PACE 10U #define MUSSEL_VOTE_TIME_AHEAD 60000U // 1 minute #define MUSSEL_VOTE_TIME_BEHIND 120000U // 2 minutes // milliseconds #define MUSSEL_DEBOUNCE_DELAY 50U // Limited size NOW!! can be transformed into infinite array #define STACK_SIZE 1000 struct Vote { String id; unsigned long timestamp; int measure; }; class Mussel { public: // Default constructor Mussel(const int attitude); // Constructor for attitudes using an input pin Mussel(const int attitude, const uint8_t pin); // Constructor for attitudes using an input pin and a sensor type Mussel( const int attitude, const uint8_t pin, const uint8_t type); void begin(); String desc(); int read(); String debug(); bool push(String id, unsigned long timestamp, int measure); void printStack(); bool qualifyVote(Vote vote, unsigned long currentTime); private: int _attitude; int _pin; bool _boolState; byte _count; unsigned long _time; #ifdef DHT_H DHT mussel_dht; #endif // Array to store ID strings String idStack[STACK_SIZE]; unsigned long timeStack[STACK_SIZE]; int measureStack[STACK_SIZE]; // Index of the top element in the stack, -1 means stack is empty int top = -1; }; #endif