Arduino trafikljus för nybörjare (22 / 25 steg)
> d olika ljusförhållanden, fotocellen kommer att se en d mammografibild värdeintervall. Prova att använda samma kod, men i ett mörkt rum. Nu försöka använda samma kod men i en riktigt ljusa rum. Du ser att sensorn är alltid i en mörk plats, och att koden fungerar riktigt bra i starkt ljus.
För att lösa problemet, gör vi något som kallas kalibrera! När vi kalibrerar fotocellen, ser vi för högsta värdet den ser och lägsta värde det ser och ställ sedan in mitt mellan dessa två värden. Vi kommer att kalibrera värdet i ungefär 5 sekunder.
För att göra detta, vi kommer att använda ett antal d mammografibild tricks!
Det första kommer vi att lära sig om tid. Arduinoen håller reda på hur det har varit sedan Arduino har aktiverats. Vi kan titta på vad värdet är.
Du kan göra detta med hjälp av den
funktion.
Ett exempel på detta är:
= ();
där jag lagra värdet av tid i variabeln.
Vad är en ? A
är som en eger men större! A går från - , 147,48 , 648 till , 147,48 , 647. Ordet
betyder att istället för att gå från - , 147,48 , 648 till , 147,48 , 647, den går från till 4, 94,967, 95. Eftersom tiden är aldrig negativt, använder vi en
nummer för det!
Mer information här: http://arduino.cc/en/Reference/Long
och här: http://arduino.cc/en/Reference/UnsignedLong
Nästa vi kommer att använda något som kallas en slinga! A
loop är som ett
uttalande, tillstånd som är
, det körs. D interferens mellan ett
uttalande och ett
uttalande är att den
uttalande håller på att köra tills villkoret är
- precis som hur den
funktionen körs tills du stänger av din Arduino. Se till att din end_time är en .
Ett exempel på detta är:
( end_time)
{
// do something
// now update the current time
= ();
}
Koden du sätter i området "göra något" kommer att hålla igång tills tiden går förbi end_time
Efter det är vad vi behöver göra blick för högsta och lägsta värdena som Fotocellen ser och lagra dessa värden.
Du kan göra detta genom att första starta det höga värdet på
och det låga värdet på
1
.
sensor_low = 1;
sensor_high = ;
Nästa, varje gång vi går igenom den loop, kommer vi att titta för att se sensor värdet är mindre än det lägsta värdet det ses, så, eftersom det nya värdet är lägre, vi kommer ställa in det låga värdet att det istället.
Ett exempel på detta är:
( sensor_low)
{
sensor_low =
}På samma sätt med det höga värdet, sensorn ser ett högre värde, vi ska sätta den till det högre värdet!
Ett exempel på detta är:
( sensor_high)
{
sensor_high =
}
Efter 5 sekunder för kalibrering, ska vi gå vidare och ange med genomsnittet av låga och höga värden.
Nu prova det själv:
SENSOR_PIN=;
= 511;
YEL = 7;
RED = 1;
= 1;voidsetup()
{
(, );
(YEL, );
(RED, );
(, );calibrate();
}void()
{
= (SENSOR_PIN);
Serial.prln();( )
{
}
else
{
red_light();
}
}void calibrate()
{
sensor_high = ;
sensor_low = 1;
= ();
end_time = + 5;
// we have to calibrate this in the first five seconds
( end_time)
{
// now update the current time
= ();
// update sensor value here!
// your code here// record the minimum sensor value
( sensor_low)
{
//your code here
}// record the maximum sensor value
//your code here
{
sensor_high = ;
}
}//set mid to be the MIDDLE! :)
= (sensor_high + sensor_low)/;
}void all_LEDs_off()
{
(, );
(YEL, );
(RED, );
(, );}
void green_light()
{
all_LEDs_off();
(, );
}void yellow_light()
{
all_LEDs_off();
(YEL, );
}void red_light()
{
all_LEDs_off();
(RED, );
(, );
}