/*
Analog input, analog output, serial output
Reads an analog input pin, maps the result to a range from 0 to 255 and uses
the result to set the pulse width modulation (PWM) of an output pin.
Also prints the results to the Serial Monitor.
The circuit:
- potentiometer connected to analog pin 0.
Center pin of the potentiometer goes to the analog pin.
side pins of the potentiometer go to +5V and ground
- LED connected from digital pin 9 to ground through 220 ohm resistor
created 29 Dec. 2008
modified 9 Apr 2012
by Tom Igoe
This example code is in the public domain.
https://www.arduino.cc/en/Tutorial/BuiltInExamples/AnalogInOutSerial
*/
/*
Name: Or Bacalu
Date: 20.5.24
*/
// These constants won't change. They're used to give names to the pins used:
const int analogInPin = A0; // Analog input pin that the potentiometer is attached to
int sensorValue = 0; // value read from the pot
int mapValue = 0; // delay value in ms
float delay_time = 0.0;
boolean ledState = false;
unsigned long startTime; // start time of the LED that turned ON
unsigned long delayTimeLED; // delay time of the LED that need to be ON/OFF based on the light
unsigned long endTime=0; // the time the LED turned OFF
void setup() {
// initialize serial communications at 9600 bps:
Serial.begin(9600);
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
// read the analog in value:
sensorValue = analogRead(analogInPin);
// map it to the range of the analog out:
mapValue = map(sensorValue, 0, 1023, 4000, 250);
delay_time = float(mapValue) / 1000.0;
// print the results to the Serial Monitor:
Serial.print("sensor = ");
Serial.print(sensorValue);
Serial.print("\t time lap [sec] = ");
Serial.println(delay_time);
// set the current time
unsigned long currentTime = millis();
// set the delay time of the LED based on the light
delayTimeLED = mapValue;
if(ledState == false && currentTime - endTime >= delayTimeLED){
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
ledState = true;
startTime = currentTime;
}
if(ledState && currentTime - startTime >= delayTimeLED){
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
ledState = false;
endTime = currentTime;
}
// wait 2 milliseconds before the next loop for the analog-to-digital
// converter to settle after the last reading:
delay(2);
}