Untitled

 avatar
unknown
plain_text
a year ago
1.4 kB
12
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