Gentili Utenti,
Io come molti altri mi ritrovo al classico bivio in cui si devono unire due codici differenti. Sebbene questi siano stati testati singolarmente, con successo si spera, risulta complicato capire come far combaciare gli stessi in un unico codice.
Vi chiedo supporto in quanto seppur abbia provato a combinarli, nessuna versione ha avuto successo ![]()
Il primo codice controlla il Solar Tracking monoasse attraverso 4 motori e due fotodiodi (qua versione solo"manuale").
#define enA 9
#define in1 4
#define in2 5
#define fotodiodoPin1 A0
#define fotodiodoPin2 A1
#define buzzerPin 3
int motorSpeedA = 0;
void setup() {
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(buzzerPin, OUTPUT);
Serial.begin(9600);
analogWrite(enA, 0);
}
void loop() {
int intensitaFotodiodo1 = analogRead(fotodiodoPin1);
int intensitaFotodiodo2 = analogRead(fotodiodoPin2);
int differenzaIntensita = abs(intensitaFotodiodo1 - intensitaFotodiodo2);
Serial.print("Intensita Fotodiodo 1: ");
Serial.print(intensitaFotodiodo1);
Serial.print(" - Intensita Fotodiodo 2: ");
Serial.print(intensitaFotodiodo2);
Serial.print(" - Differenza di intensita: ");
Serial.println(differenzaIntensita);
if (differenzaIntensita > 25) {
Serial.println("Modalita manuale attivata.");
tone(buzzerPin, 500, 2000); // Suono di 2 secondi
activateManualMode();
noTone(buzzerPin);
}
}
void activateManualMode() {
Serial.println("Modalita manuale attivata. Motori inizieranno a ruotare dopo 3 secondi.");
delay(3000); // Attendi 3 secondi prima di far partire i motori
unsigned long startTime = millis();
while (millis() - startTime < 43200000) { // 12 ore in millisecondi
// Imposta i valori delle velocità e delle direzioni dei motori manualmente
// Puoi modificare questi valori per controllare i motori come desideri
// Ho modificato la rotazione delle ruote B ossia 1 e 4 in modo che sia maggiore delle altre e che facciano da perno.
motorSpeedA = 100; // Velocità del motore A (0 = fermo, 255 = velocità massima)
// Controlla che la velocità sia sempre positiva (valore assoluto) per evitare problemi di direzione
motorSpeedA = abs(motorSpeedA);
// Imposta la direzione dei motori (avanti o indietro)
//Ho cambiato io il codice originale in motorspeedB che aveva ">0" con<0 per invertire la rotazione dei motori 2 e 3
if (motorSpeedA > 0) {
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
} else {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
}
// Aggiorna i motori con i valori calcolati
analogWrite(enA, motorSpeedA);
Serial.println("Motori attivi.");
delay(500); // Attiva i motori per 0.5 secondi
motorSpeedA = 0;
analogWrite(enA, motorSpeedA);
Serial.println("Motori fermati.");
delay(299500); // Fermati per 299.5 secondi (5 minuti)
}
}
Mentre il secondo codice controlla la velocità di rotazione di una ventola attraverso un mosfet e un sensore di temperatura.
#define PIN_LM35 A3
float temperatura;
const int fan_control_pin = 7;
void setup() {
pinMode(fan_control_pin, OUTPUT);
analogWrite(fan_control_pin, 0); // Inizializza la velocità a 0 (ventola spenta)
Serial.begin(9600);
}
void loop() {
int valore = analogRead(PIN_LM35);
float temperatura = valore / 2.046;
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.println("°C");
if (temperatura > 50.0) {
analogWrite(fan_control_pin, 255);
} else if (temperatura > 48.0) {
analogWrite(fan_control_pin, 250);
} else if (temperatura > 46.0) {
analogWrite(fan_control_pin, 240);
} else if (temperatura > 44.0) {
analogWrite(fan_control_pin, 230);
} else if (temperatura > 42.0) {
analogWrite(fan_control_pin, 220);
} else if (temperatura > 40.0) {
analogWrite(fan_control_pin, 210);
} else if (temperatura > 38.0) {
analogWrite(fan_control_pin, 200);
} else if (temperatura > 36.0) {
analogWrite(fan_control_pin, 190);
} else if (temperatura > 34.0) {
analogWrite(fan_control_pin, 180);
} else if (temperatura > 32.0) {
analogWrite(fan_control_pin, 160);
} else if (temperatura > 31.0) {
analogWrite(fan_control_pin, 140);
} else if (temperatura > 30.0) {
analogWrite(fan_control_pin, 120);
} else if (temperatura > 29.0) {
analogWrite(fan_control_pin, 90);
} else {
analogWrite(fan_control_pin, 0);
}
delay(1000);
}
Vorrei che i due riescano a lavorare indipendentemente l'uno dall'altro, in modo che sia possibile usare un solo arduino invece che due. Chiedo perdono se la domanda può risultare troppo facile, ma sono sicuro di non essere l'unico in questa situazione.
Ogni consiglio è più che accetto.
Grazie molte!
