Yesterday I went to the "Bastelabend" at the C4 Labs in Cologne. There were a lot of interesting projects and someone mentioned that you can use LEDs as sensors when you change the potential.
For more information follow this link.
I hooked up my arduino and ripped some code together.
int LED_anode[] = {2,4,6};
int LED_cathode[] = {3,5,7};
int LED_max[] = {0,0,0};
int LED_min[] = {0,0,0};
int t_delay = 1000;
int value;
void setup()
{
//deactivates pullup
_SFR_IO8(0x35) |= 4;
_SFR_IO8(0x35) |= (1<<4);
for( int i=0; i <= 2 ; i++ )
{
pinMode(LED_anode[i], OUTPUT);
pinMode(LED_cathode[i], OUTPUT);
}
Serial.begin(9600);
Serial.println("Calibration");
for( int i=0; i <= 2 ; i++ )
{
Serial.println("MAX LED ");
Serial.print(i);
delay(t_delay);
LED_max[i] = LEDget(i);
delay(t_delay);
}
for( int i=0; i <= 2 ; i++ )
{
Serial.println("MIN LED ");
Serial.print(i);
delay(t_delay);
LED_min[i] = LEDget(i);
delay(t_delay);
}
}
void loop()
{
value = 0;
for( int i=0; i <= 2 ; i++ )
{
Serial.print(i);
Serial.print(": ");
Serial.println(map( LEDget(i), LED_min[i], LED_max[i], 0, 255 ), DEC);
}
}
int LEDget(int i)
{
int value = 0;
digitalWrite(LED_anode[i], HIGH);
digitalWrite(LED_cathode[i], LOW);
digitalWrite(LED_anode[i], LOW);
digitalWrite(LED_cathode[i], HIGH);
pinMode(LED_cathode[i], INPUT);
while(digitalRead(LED_cathode[i]) != 0)
value++;
pinMode(LED_cathode[i], OUTPUT);
digitalWrite(LED_anode[i], HIGH);
digitalWrite(LED_cathode[i], LOW);
return value;
}
There is a calibration cycle at the beginning. When measuring the minimum value the LEDs should be completely covered.
Since the LEDs go thruogh the same cycle when calibrating as when in use the measured values shouldn't be affected by the LEDs themselves.






