Ciao a tutti
Sto provando a scrivere un codice per controllare un piccolo robot pulitore , con dei motori passo passo ed alcune funzioni per creare dei piccoli automatismi ,sto usando un arduino mega REV 3 .
Praticamente o un joystick che mi controlla le funzioni avanti , indietro , desta , sinistra , qualche interruttore per far funzionare il robot in automatico a due velocità , un comando di emergenza che ferma tutto , un comando per avviare una spazzola e un comando per aumentare la forza della spazzola , un comando per attivare una valvola ed uno per escludere dei sensori ad ultrasuoni se necessario .
E fin qui nessun problema il codice viene compilato correttamente da ide di arduino , però mi piacerebbe aggiungere un display nextion per visualizzare sul trasmettitore lo stato del joystick e di tutti gli altri comandi , quando provo a compilare il codice con queste modifiche ide di arduino genera una serie di errori legati alle parti di codice del display e non riesco a capire dove sia l'errore .
Se qualcuno sa aitarmi metto qui il codice a ovviamente sto usando la libreria nextion scaricata da ide di arduino non metto gli errori che mi da perche sono veramente tanti
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Nextion.h>
// Pin per il modulo nRF24L01 (CE e CSN)
#define CE_PIN 9
#define CSN_PIN 10
// Creazione dell'oggetto radio
RF24 radio(CE_PIN, CSN_PIN);
// Indirizzi per la comunicazione
const byte address[6] = "00001";
// Definizione dei pin del joystick
const int joystickXPin = A0;
const int joystickYPin = A1;
const int buttonPin = 7;
// Definizione dei pin per gli interruttori e pulsanti
const int emergencyButtonPin = 2;
const int rfEnableSwitchPin = 3;
const int auto1SwitchPin = 4;
const int auto2SwitchPin = 5;
const int cleaningSwitchPin = 6;
const int strongCleaningSwitchPin = 8;
const int waterValveSwitchPin = 11;
const int sensorDisableSwitchPin = 12;
// Nextion display collegato a Serial1
Nextion myNextion(Serial1, 9600);
// Struttura dati per trasmettere i valori
struct DataPacket {
int joystickX;
int joystickY;
bool buttonPressed;
bool emergencyStop;
bool rfEnabled;
bool auto1Active;
bool auto2Active;
bool cleaningActive;
bool strongCleaningActive;
bool waterValveActive;
bool sensorDisableActive;
};
DataPacket data; // Istanza del pacchetto dati
void setup() {
// Configurazione dei pin
pinMode(joystickXPin, INPUT);
pinMode(joystickYPin, INPUT);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(emergencyButtonPin, INPUT_PULLUP);
pinMode(rfEnableSwitchPin, INPUT_PULLUP);
pinMode(auto1SwitchPin, INPUT_PULLUP);
pinMode(auto2SwitchPin, INPUT_PULLUP);
pinMode(cleaningSwitchPin, INPUT_PULLUP);
pinMode(strongCleaningSwitchPin, INPUT_PULLUP);
pinMode(waterValveSwitchPin, INPUT_PULLUP);
pinMode(sensorDisableSwitchPin, INPUT_PULLUP);
// Inizializzazione del modulo nRF24L01
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_LOW);
radio.stopListening();
// Inizializzazione del display Nextion
myNextion.init();
// Messaggio di debug iniziale
Serial.begin(9600);
Serial.println("Sistema avviato.");
}
void loop() {
// Lettura dei valori del joystick
int joystickXValue = analogRead(joystickXPin);
int joystickYValue = analogRead(joystickYPin);
bool buttonState = !digitalRead(buttonPin);
// Lettura degli interruttori
bool emergencyStop = !digitalRead(emergencyButtonPin);
bool rfEnabled = !digitalRead(rfEnableSwitchPin);
bool auto1Active = !digitalRead(auto1SwitchPin);
bool auto2Active = !digitalRead(auto2SwitchPin);
bool cleaningActive = !digitalRead(cleaningSwitchPin);
bool strongCleaningActive = !digitalRead(strongCleaningSwitchPin);
bool waterValveActive = !digitalRead(waterValveSwitchPin);
bool sensorDisableActive = !digitalRead(sensorDisableSwitchPin);
// Priorità dei comandi
if (emergencyStop) {
// Emergenza: ferma tutto
resetData(true);
} else if (rfEnabled) {
// Modalità RF attiva
if (strongCleaningActive) {
resetData(false);
data.strongCleaningActive = true;
} else if (cleaningActive) {
resetData(false);
data.cleaningActive = true;
} else if (auto2Active) {
resetData(false);
data.auto2Active = true;
data.joystickY = 50; // Velocità fissa al 50%
} else if (auto1Active) {
resetData(false);
data.auto1Active = true;
data.joystickY = 10; // Velocità fissa al 10%
} else {
// Modalità manuale con joystick
data.joystickX = map(joystickXValue, 0, 1023, -100, 100);
data.joystickY = map(joystickYValue, 0, 1023, -100, 100);
data.buttonPressed = buttonState;
}
data.rfEnabled = true;
data.waterValveActive = waterValveActive;
data.sensorDisableActive = sensorDisableActive;
} else {
// RF disabilitato
resetData(false);
}
// Invio dei dati via RF24
bool success = radio.write(&data, sizeof(DataPacket));
if (!success) {
Serial.println("Errore di trasmissione RF");
}
// Aggiorna il display Nextion
updateNextionDisplay();
}
// Funzione per resettare i dati
void resetData(bool emergency) {
data.joystickX = 0;
data.joystickY = 0;
data.buttonPressed = false;
data.emergencyStop = emergency;
data.rfEnabled = false;
data.auto1Active = false;
data.auto2Active = false;
data.cleaningActive = false;
data.strongCleaningActive = false;
data.waterValveActive = false;
data.sensorDisableActive = false;
}
// Funzione per aggiornare il display Nextion
void updateNextionDisplay() {
// Stato joystick
myNextion.print("joystickX.val=");
myNextion.print(data.joystickX);
myNextion.print("\xFF\xFF\xFF");
myNextion.print("joystickY.val=");
myNextion.print(data.joystickY);
myNextion.print("\xFF\xFF\xFF");
// Stato interruttori
myNextion.print("auto1.val=");
myNextion.print(data.auto1Active ? 1 : 0);
myNextion.print("\xFF\xFF\xFF");
myNextion.print("auto2.val=");
myNextion.print(data.auto2Active ? 1 : 0);
myNextion.print("\xFF\xFF\xFF");
myNextion.print("cleaning.val=");
myNextion.print(data.cleaningActive ? 1 : 0);
myNextion.print("\xFF\xFF\xFF");
myNextion.print("strongCleaning.val=");
myNextion.print(data.strongCleaningActive ? 1 : 0);
myNextion.print("\xFF\xFF\xFF");
myNextion.print("valve.val=");
myNextion.print(data.waterValveActive ? 1 : 0);
myNextion.print("\xFF\xFF\xFF");
myNextion.print("sensors.val=");
myNextion.print(data.sensorDisableActive ? 1 : 0);
myNextion.print("\xFF\xFF\xFF");
}