Estoy tratando de usar un LED como un sensor de luz (entrada) conectado a un Arduino Nano. Conecté el led con el ánodo en el pin digital 8 (PB0) con una resistencia de 56 ohmios y el cátodo en un pin analógico A0 (PC0). LaideaprincipalesmedirelvoltajeatravésdelacapacitanciadelparásitoenelLEDquesealmacenóduranteunimpulsocortode5V(girandoPC0altoyluegobajo)enpolarizacióninversa. Elprimerejemploesmuysimple.
uint16_tsen_time=0;//Variableforcountingvoidsetup(){Serial.begin(9600);//Settingpin8toOUTPUTandtheresttoINPUTDDRB|=(1<<PB0);//SettingOUTPUTPB0PORTB&=~(1<<PB0);//SettingAnodeLOWTCCR1B|=(1<<CS10);//Settingtimer,noprescaling(f=16Mhz)}voidloop(){/*Reversebiaspulse*/DDRC|=(1<<PC0);//SettingA0toOUTPUTPORTC|=(1<<PC0);//SettingA0toHIGH/*SettingThreestateCathode*/DDRC&=~(1<<PC0);//SettingA0toINPUTPORTC&=~(1<<PC0);//SettingA0toLOWTCNT1=0;//Settingtimerthemomentweturnoff//Waitingfortheledtodischargeandcountingwhile(analogRead(A0)!=0){sen_time++;}Serial.print("TCNT:");
Serial.println(TCNT1);
Serial.print("sen_time:");
Serial.println(sen_time); //Print the value
sen_time = 0; //Setting the value to 0
}
Los resultados son los siguientes.
En condiciones normales:
Enlaoscuridad:
La variable que se incrementa sen_time es bastante precisa, con valores altos para la oscuridad y valores bajos para la luz intensa. Pero no puedo entender por qué mi temporizador tiene valores de basura en todos los sentidos.
Estoy tratando de resolverlo con interrupciones (interrupciones de cambio de pin), pero al obtener el pin de tres puntos, solo se activa la interrupción en todos los sentidos. Además, el TCNT obtuvo valores trush cada vez que lo leí. Obtener resistencias pull-up solo mantiene el pin alto. Algunos consejos sobre cómo resolver este problema preferiblemente con interrupciones (debido a la restricción de tiempo en el proyecto futuro). Gracias y espero resolverlo lo antes posible!