Ivan037 Inserito: 15 maggio 2020 Segnala Inserito: 15 maggio 2020 Buongiorno a tutti,sono alla prime armi con arduino e ho un problema con uno sketch.Devo fare in modo che se il sensore dht11 rilevi una temperatura al di sopra di una certa soglia lo scriva sul serial monitor e mi faccia partire il buzzer 3 secondi prima di far partire il motore dc.Il problema che si presenta è che quando finisce di suonare il buzzer il motore non fa neanche il tempo di partire che riparte il tutto e mi fa risuonare il buzzer if(temperatura>20){ Serial.println("La temperatura è superiore a 30°"); digitalWrite(buzzerPin, HIGH); Serial.print("Umidità: "); Serial.println(umidita); Serial.println("%"); Serial.print("Temperatura: "); Serial.println(temperatura); Serial.println("°C "); delay(3000); digitalWrite(buzzerPin, LOW); digitalWrite(enablePin, HIGH); digitalWrite(motor1APin, HIGH); digitalWrite(motor2APin, LOW); Questa è la parte che mi da problemi,ringrazio tutti quelli che mi aiuteranno
Livio Orsini Inserita: 15 maggio 2020 Segnala Inserita: 15 maggio 2020 Devi pubblicare tutto la funzione "void loop()" e specificare cosa comandano i 2 pins motor1APin e motor2APin. Credo di aver intuito il motivo del difetto che lamenti, ma per averne certezza devo leggere l'intera funzione.
Ivan037 Inserita: 15 maggio 2020 Autore Segnala Inserita: 15 maggio 2020 void loop() { delay(2000); float umidita = dht.readHumidity(); float temperatura = dht.readTemperature(); if (isnan(umidita) || isnan(temperatura)) { Serial.println("Impossibile leggere la temperatura,verifica il collegamenti"); return; } if(temperatura>20){ Serial.println("La temperatura è superiore a 20°"); digitalWrite(buzzerPin, HIGH); Serial.print("Umidità: "); Serial.println(umidita); Serial.println("%"); Serial.print("Temperatura: "); Serial.println(temperatura); Serial.println("°C "); delay(3000); digitalWrite(buzzerPin, LOW); digitalWrite(enablePin, HIGH); digitalWrite(motor1APin, HIGH); digitalWrite(motor2APin, LOW); } else { Serial.print("Umidità: "); Serial.println(umidita); Serial.println("%"); Serial.print("Temperatura: "); Serial.println(temperatura); Serial.println("°C "); digitalWrite(enablePin, HIGH); digitalWrite(motor1APin, LOW); digitalWrite(motor2APin, LOW); } I pin motor1APin e motor2APin servono per pilotare il motore,in questo caso non è importante il senso di rotazione.L'integrato che sto usando è L293D
Livio Orsini Inserita: 15 maggio 2020 Segnala Inserita: 15 maggio 2020 E come avevo immaginato. Non può che fare in quel modo, visto che ripete il ciclo continuamente. Devi arrangiare diversamente, qualche cosa come questo. do { digitalWrite(enablePin, HIGH); digitalWrite(motor1APin, HIGH); digitalWrite(motor2APin, LOW); } while (flg_motor_run == HIGH); Non farlo così pari pari perchè rischi di non uscirne più, ma il senso è quello: una volta che il motore gira non devi più metterlo nella sequenza. Io farei il test di temperatura ad ogni ciclo, poi attiverei il buzzer solo solo al primo superamento della soglia, poi, quando il vaslore di temperatura scende nuovamente sotto la soglia abiliterei nuovamente le condizioni per far suonare i cicalino. Non ti scrivo il codice, perchè devi provarci tu
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora