Salve a tutti, innanzitutto questo è il codice:
//HC RS04 Sensore ultrasuoni
#include <Servo.h>
Servo myServo;
int triggerPort = 9;
int echoPort = 10;
int notes[] = {349};
int speaker = 13;
int temp= A0;
int blu = 15;
const int sensorPin = A0;
const float baselineTemp = 20.0;
int switchState = 0;
//millis/
unsigned long previousMillis = 0;
unsigned long interval= 10;
unsigned long previousMillis2 =0;
unsigned long interval2=10;
unsigned int counter = 0;
//millis
//motore//
const int switchPin2 = 6; // the number of the switch pin
const int motorPin2 = 8; // the number of the motor pin
int switchState2 = 0;
const int buttonOrario = 19;
const int buttonAntior = 7;
const int potPin = A1;
const int in1Pin = 17;
const int in2Pin = 18;
const int motorPin = 16;
long previousMillis3 = 0;
long interval3 = 200;
unsigned long previousMillis5 = 0; // will store last time LED was updated
// constants won't change :
const long interval5 = 1;
int potVal = 0;
int bora = LOW;
int bant = LOW;
//motore//
#include <LiquidCrystal.h>//includo lcd
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int pos = 0;
void setup() {
myServo.attach(15);
//motore
pinMode(motorPin2, OUTPUT);
// initialize the switch pin as an input:
pinMode(switchPin2, INPUT);
pinMode(buttonOrario, INPUT);
pinMode(buttonAntior, INPUT);
pinMode(potPin, INPUT);
pinMode(in1Pin, OUTPUT);
pinMode(in2Pin, OUTPUT);
pinMode(motorPin, OUTPUT);
digitalWrite(in1Pin,bora);
digitalWrite(in2Pin,bant);
analogWrite(motorPin, 0);
//motore
pinMode( triggerPort, OUTPUT );
pinMode( echoPort, INPUT );
pinMode( speaker, OUTPUT);
pinMode(temp, INPUT);
pinMode(blu, OUTPUT);
Serial.begin( 9600 );
Serial.println( "Sensore ultrasuoni: ");
lcd.begin(16,2);
}
void loop() {
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
//motore
switchState2 = digitalRead(switchPin2);
// check if the switch is pressed.
if (switchState2 == HIGH) {
// turn motor on:
digitalWrite(motorPin2, HIGH);
}
else {
// turn motor off:
digitalWrite(motorPin2, LOW);
}
bora = digitalRead( buttonOrario);
bant = digitalRead( buttonAntior);
potVal = map(analogRead(potPin), 0, 1023, 0, 255);
analogWrite(motorPin, 255);
if (bora == HIGH && bant == HIGH)
{
digitalWrite(in1Pin,LOW);
digitalWrite(in2Pin,LOW);
}
digitalWrite(in1Pin,bora);
digitalWrite(in2Pin,bant);
}
//FINE MOTORE
//temp
int sensorVal = analogRead(sensorPin);
float voltage = (sensorVal/1024.0) * 5.0;
float temp = (voltage - .5) *100;
if (temp>20){
digitalWrite(blu, HIGH);}
else{digitalWrite(blu, LOW);}
//temp
//porta bassa l'uscita del trigger
digitalWrite( triggerPort, LOW );
//invia un impulso di 10microsec su trigger
digitalWrite( triggerPort, HIGH );
delayMicroseconds( 10 );
digitalWrite( triggerPort, LOW );
long duration = pulseIn( echoPort, HIGH );
long r = 0.034 * duration / 2;
Serial.print( "durata: " );
Serial.print( duration );
Serial.print( " , " );
Serial.print( "distanza: " );
//dopo 38ms è fuori dalla portata del sensore
if( duration > 38000 ) Serial.println( "fuori portata");
else { Serial.print( r );
Serial.println( "cm" );
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(r);
lcd.setCursor(0,1);
lcd.print(temp);
//DISPLAY
//DISPLAY
if(r<=50){
unsigned long currentMillis5 = millis();
if(currentMillis5 - previousMillis5 > interval5) {
previousMillis5 = currentMillis5;
tone(speaker, 350);
delay(1000);
noTone(speaker);
delay(1000);
}
digitalWrite(motorPin2, LOW);
for(pos = 85; pos < 179; pos +=1)
{
myServo.write(pos);
delay(50);
}
for(pos = 179; pos < 1; pos -=1)
{
myServo.write(pos);
delay(50);
}
for(pos = 1; pos < 85; pos +=1)
{
myServo.write(pos);
delay(50);
}
}
else{noTone(speaker);
digitalWrite(motorPin2, HIGH);}
}
il problema sta in quest’ultime righe, ovvero vorrei che quando r è minore di 50, il buzzer emetta un beep ogni secondo e che il servo motore vada da 85 a 179 e poi da 179 a 1 e da 1 a 85, come se si giri per guardarsi intorno, una sola volta e non infinte volte, solo che quando arduino esegue il codice, il programma si ferma fino a quando il servo non ha finito di compiere le sue zioni e questo mi crea un grosso problema. qualcuno mi puo aiutare?