Spørsmål:
Hvordan forbedrer responstiden for denne lydstyrte LED-en?
Haider Ali
2018-06-13 16:58:51 UTC
view on stackexchange narkive permalink

Jeg har skrevet følgende kode for å tenne en LED på et klaff (ved hjelp av lydsensor) som jeg har koblet til via en motstand på 330 OHM på pin nummer 4.

Men når jeg klapper en gang, nær lydsensoren, lyser den ikke LED-lampen. Men den lyser bare LED-en hvis jeg gir lydeksponering i lengre tid (mer enn 6 sekunder) på lydsensoren.

Hvordan kan jeg forbedre dette, slik at selv om jeg klapper en gang i en sekundvarighet, LED lyser?

  int soundSensor = 10; int LED = 4; void setup () {Serial.begin (9600); pinMode (soundSensor, INPUT); pinMode (LED, OUTPUT);} ugyldig sløyfe () {int SensorData = digitalRead (soundSensor); hvis (SensorData == 1) {digitalWrite (LED, HIGH); forsinkelse (3000); Serial.println ("LOUD, LOUD"); forsinkelse (1000); } annet {digitalWrite (LED, LAV); Serial.println ("SLOW, SLOW"); forsinkelse (1000); }}  
En ting er at programmet venter mye, sløyfen går bare en gang hvert sekund når det ikke er lyd. Forsinkelsen kan også være i selve sensoren, gjør det klart hvilken sensor du bruker. Ideelt sett vil du også inkludere et skjema for å vise hvordan det er koblet sammen.
Vi må se kretsene for lydføleren din også.
Tre svar:
Michel Keijzers
2018-06-13 17:07:06 UTC
view on stackexchange narkive permalink

Jeg tror problemet er de gangene du sjekker sensoren. Hvis du klapper nøyaktig når du sjekker, vil den lyse selv om den klappet i 1 ms, men hvis den sjekker inn mellom to klapper, oppdager den ikke det.

Så sjekk oftere (reduser forsinkelsene) og sjekk for så mange lydoppdagelser innen ett sekund.

Eller, som JRE nedenfor foreslår, bruk et avbrudd, dette er enda bedre, men trenger litt mer programmering. Fortsatt avbrudd brukes mye i programmering av mikrokontroller, så det er verdt å sjekke inn dette.

Eller bruk et avbrudd.
@JRE Takk for den gode bemerkningen, jeg oppdaterte svaret mitt.
Joe S
2018-06-13 18:53:53 UTC
view on stackexchange narkive permalink

Avbrudd er nyttige for å få ting til å skje automatisk i mikrokontrollerprogrammer, og kan bidra til å løse timingproblemer. Gode ​​oppgaver for å bruke et avbrudd kan omfatte lesing av en roterende koder eller overvåking av brukerinngang (som klapping).

Å bruke attachInterrupt () -funksjonen er veien å gå her!

https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/

Tony Stewart EE since 1975
2018-06-13 17:39:09 UTC
view on stackexchange narkive permalink

Avhengig av sensor vil enkel modifisering med seriediode for å oppdage impuls og holde forfall sakte med si 0.01uF til og 10 MOhm til 0V oppdage første gang og strekke puls ~ 0.01u * 10M = 0.1s



Denne spørsmålet ble automatisk oversatt fra engelsk.Det opprinnelige innholdet er tilgjengelig på stackexchange, som vi takker for cc by-sa 4.0-lisensen den distribueres under.
Loading...