Untitled
unknown
plain_text
a year ago
1.4 kB
18
Indexable
#include <avr/io.h>
#include <util/delay.h>
#define LED_PIN PB1
#define MIC_PIN PB3
#define THRESHOLD 512 // Definisci la soglia del volume (0-1023)
// Funzione per inizializzare l'ADC
void adc_init() {
// Abilita l'ADC, imposta il prescaler a 64 (per ATtiny13)
ADCSRA |= (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1);
// Imposta il riferimento di tensione a Vcc e seleziona l'ingresso ADC4 (PB4)
ADMUX |= (1 << MUX1);
}
// Funzione per leggere il valore dall'ADC
uint16_t adc_read() {
// Avvia la conversione
ADCSRA |= (1 << ADSC);
// Aspetta che la conversione sia completa
while (ADCSRA & (1 << ADSC));
// Ritorna il valore dell'ADC
return ADC;
}
int main(void) {
// Configura PB1 come uscita per il LED
DDRB |= (1 << LED_PIN);
// Configura PB3 come ingresso (è impostato di default, quindi questo passaggio è opzionale)
DDRB &= ~(1 << MIC_PIN);
// Inizializza l'ADC
adc_init();
while (1) {
// Leggi il valore dall'ADC
uint16_t adc_value = adc_read();
// Controlla se il valore dell'ADC supera la soglia
if (adc_value > THRESHOLD) {
// Accendi il LED
PORTB |= (1 << LED_PIN);
} else {
// Spegni il LED
PORTB &= ~(1 << LED_PIN);
}
// Aggiungi un piccolo delay per evitare letture troppo frequenti
_delay_ms(50);
}
return 0;
}
Editor is loading...
Leave a Comment