Salve, ho un problema con il codice Arduino, sono alle prime armi quindi mi scuso se magari sia un errore banale. Spiego in breve, sto utilizzando 3 LED ed il sensore di prossimità Ultrasoninc Sensor HC-SR04, quello che deve succedere è questo:
- il LED1 deve accendersi in modo incrementale a distanza minore di 10 cm (funziona)
- il LED2 deve lampeggiare con una velocità a distanza minore di 200cm ed un'altra a distanza minore di 100cm (funziona)
- Il LED3 deve aumentare di +1 la sua intensità ogni volta che il LED1 si accende, se il LED1 non si accende per un tot di tempo deve diminuire la sua intensità di -1.
Invio l'ultimo dei codici che ho provato a scrivere, in cui il LED1 e il LED2 funzionano correttamente invece il LED3 rimane sempre spento.
CODICE:
#define echoPin 2 // attach pin D2 Arduino to pin Echo of HC-SR04
#define trigPin 3 //attach pin D3 Arduino to pin Trig of HC-SR04
// defines variables
long duration; // variable for the duration of sound wave travel
int distance; // variable for the distance measurement
int acceso; // variabile che definisce il LED acceso
int lucentezza = 0; // definisce la variabile “lucentezza” con valore iniziale 0
int incremento = 5; // definisce la variabile “incremento” con valore 5
const int LED1 = 5; // definisce il LED1 sul pin 5
const int LED2 = 6; // definisce il LED2 sul pin 6
const int LED3 = 7; // definisce il LED3 sul pin 7
void setup() {
pinMode(trigPin, OUTPUT); // Sets the trigPin as an OUTPUT
pinMode(echoPin, INPUT); // Sets the echoPin as an INPUT
Serial.begin(9600); // // Serial Communication is starting with 9600 of baudrate speed
Serial.println("Ultrasonic Sensor HC-SR04 Test"); // print some text in Serial Monitor
Serial.println("with Arduino UNO R3");
pinMode(LED1 , OUTPUT);
pinMode(LED2 , OUTPUT);
pinMode(LED3 , OUTPUT);
}
void loop() {
// Clears the trigPin condition
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin HIGH (ACTIVE) for 10 microseconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distance = duration * 0.034 / 2; // Speed of sound wave divided by 2 (go and back)
// Displays the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
int acceso = 0; // dichiara il valore di "acceso"
if ( distance < 10 ) // a distanza 10cm il LED1 si accende
{
analogWrite (LED1, lucentezza); // invia al LED1 una tensione pari a (5/255) * lucentezza
lucentezza = lucentezza + incremento; // modifica il valore di lucentezza
if (lucentezza == 0 || lucentezza == 255) // il simbolo || e’ un operatore booleano che
// rappresenta la “or” mentre == e’ il simbolo convenzionalmente utilizzato per verificare la
// condizione di uguaglianza. Non viene utilizzato il normale simbolo = poiche’ il programma lo
// interpreterebbe come l’assegnazione di un valore es. lucentezza = 0 verrebbe interpretato
// come “assegna 0 alla variabile lucentezza”
{
incremento = incremento * -1; // se la lucentezza ha raggiunto gli estremi ( 0 oppure 255)
// cambia segno all'incremento (lo si moltiplica per -1 e quindi se
// era 5 lo fa diventare -5 e viceversa)
}
delay (10); //attende 50 millisecondi prima di ricominciare il ciclo
acceso = (acceso + 1 / 255); // variabile locale
}
else
{
digitalWrite(LED1, LOW);
}
if ( distance < 200 ) // se la distanza è 200cm il led lampeggia più lentamente
{
digitalWrite(LED2, HIGH);
delay(150);
digitalWrite(LED2, LOW);
delay(80);
digitalWrite(LED2, HIGH);
delay(150);
digitalWrite(LED2, LOW);
delay(80);
digitalWrite(LED2, HIGH);
delay(150);
digitalWrite(LED2, LOW);
delay(80);
}
{
analogWrite (LED2, lucentezza); // invia al LED2 una tensione pari a (5/255) * lucentezza
lucentezza = lucentezza + incremento; // modifica il valore di lucentezza
if (lucentezza == 0 || lucentezza == 255) // il simbolo || e’ un operatore booleano che
// rappresenta la “or” mentre == e’ il simbolo convenzionalmente utilizzato per verificare la
// condizione di uguaglianza. Non viene utilizzato il normale simbolo = poiche’ il programma lo
// interpreterebbe come l’assegnazione di un valore es. lucentezza = 0 verrebbe interpretato
// come “assegna 0 alla variabile lucentezza”
{
incremento = incremento * -1; // se la lucentezza ha raggiunto gli estremi ( 0 oppure 255)
// cambia segno all'incremento (lo si moltiplica per -1 e quindi se
// era 5 lo fa diventare -5 e viceversa)
{
delay (50); //attende 50 millisecondi prima di ricominciare il ciclo
}
}
else
{
digitalWrite(LED2, LOW);
}
if ( distance < 100 ) // se la distanza è 100cm il led lampeggia più velocemente
{
digitalWrite(LED2, HIGH);
delay(50);
digitalWrite(LED2, LOW);
delay(30);
digitalWrite(LED2, HIGH);
delay(50);
digitalWrite(LED2, LOW);
delay(30);
digitalWrite(LED2, HIGH);
delay(50);
digitalWrite(LED2, LOW);
delay(30);
}
{
analogWrite (LED2, lucentezza); // invia al LED2 una tensione pari a (5/255) * lucentezza
lucentezza = lucentezza + incremento; // modifica il valore di lucentezza
if (lucentezza == 0 || lucentezza == 255) // il simbolo || e’ un operatore booleano che
// rappresenta la “or” mentre == e’ il simbolo convenzionalmente utilizzato per verificare la
// condizione di uguaglianza. Non viene utilizzato il normale simbolo = poiche’ il programma lo
// interpreterebbe come l’assegnazione di un valore es. lucentezza = 0 verrebbe interpretato
// come “assegna 0 alla variabile lucentezza”
{
incremento = incremento * -1; // se la lucentezza ha raggiunto gli estremi ( 0 oppure 255)
// cambia segno all'incremento (lo si moltiplica per -1 e quindi se
// era 5 lo fa diventare -5 e viceversa)
{
delay (50); //attende 50 millisecondi prima di ricominciare il ciclo
}
}
else
{
digitalWrite(LED2, LOW);
}
{
analogWrite (LED3, acceso); // ogni volta che si accende il LED1, il LED 3 aumenta di +1 la sua intensità
}
delay (50); //attende 50 millisecondi prima di ricominciare il ciclo
}
}
}