Untitled
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