Ülesanne #1

int sensorPin = 0;
int ledPin = 13;
int sensorValue = 0;
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
sensorValue = analogRead(sensorPin); // loeb analoog sisendi väärtust ja saadab tagasi täisarvu vahemikus 0 kuni 1023. See tähendab 10 bitilist täpsust (2^10 = 1024).
digitalWrite(ledPin, HIGH);
delay(sensorValue);
digitalWrite(ledPin, LOW);
delay(sensorValue);
float voltage = sensorValue * (5.0 / 1023.0); // konverteerime väärtuse (0 - 1023) ja tagastab (0 - 5V):
Serial.println(voltage); // Saadud tulemused kirjutame Serial Monitori.
}
Valguskett


Video
https://drive.google.com/file/d/1hUYbvl1wwFTKsxeG2VRs5v_Yvs7geKVr/view?usp=sharing
Kirjeldus
On vaja luua kett, mis koosneb mitmest valgusdioodist, mis töötavad erinevates režiimides. Režiimi saab valida potentsiomeetri abil, iga režiim annab valguskettale erinevad visuaalsed efektid.
Komponendid
- Arduino UNO plaat (1tk)
- Arendusplaat (1tk)
- Juhtmed (14tk)
- 220 Ω Takisti (9tk)
- LED (9tk: 3 punane, 3 roheline, 3 sinine)
- 250 kΩ Potentsiomeeter (1tk)
Selgitus
Loome massiivi LED-ide jaoks:
int sensorPin = A3; // potentsiomeeter
int ledPins[] = {5, 6, 7, 8, 9, 10, 11, 12, 13};
int arrayLength = sizeof(ledPins) / sizeof(ledPins[0]); // massiivi suurus
LED-ide seadistamine:
void setup() {
for (int i = 0; i < arrayLength; i++) {
pinMode(ledPins[i], OUTPUT);
}
}
Loome LED-ide vilkumise efekti juhuslikult:
void tree() {
for (int i = 0; i < arrayLength; i++) {
int flickerChance = random(0, 10); // siin genereeritakse juhuslik arv vahemikus 0 kuni 9
if (flickerChance < 3) { // umbes 30% tõenäosus, et LED vilgub
digitalWrite(ledPins[i], HIGH); // lülitame sisse praeguse LED-i
delay(random(30, 150)); // ootame juhuslikku aega (30 kuni 150 ms)
digitalWrite(ledPins[i], LOW);
delay(random(10, 50)); // juhuslik paus (10 kuni 50 ms)
}
}
}
Loome vilkuvate punaste valgusdioodide efekti:
void redLight() {
digitalWrite(13, HIGH);
digitalWrite(10, HIGH);
digitalWrite(7, HIGH);
delay(250);
digitalWrite(13, LOW);
digitalWrite(10, LOW);
digitalWrite(7, LOW);
delay(250);
}
Esiteks lülituvad kõik punased LED-id sisse, siis on viivitus 250 ms, pärast seda lülituvad kõik punased LED-id välja ja jälle on viivitus 250 ms.
Loome vilkuvate siniste valgusdioodide efekti:
void blueLight() {
digitalWrite(11, HIGH);
digitalWrite(8, HIGH);
digitalWrite(5, HIGH);
delay(250);
digitalWrite(11, LOW);
digitalWrite(8, LOW);
digitalWrite(5, LOW);
delay(250);
}
Esiteks lülituvad kõik sinised LED-id sisse, siis on viivitus 250 ms, pärast seda lülituvad kõik sinised LED-id välja ja jälle on viivitus 250 ms.
Loome vilkuvate roheliste valgusdioodide efekti:
void greenLight() {
digitalWrite(12, HIGH);
digitalWrite(9, HIGH);
digitalWrite(6, HIGH);
delay(250);
digitalWrite(12, LOW);
digitalWrite(9, LOW);
digitalWrite(6, LOW);
delay(250);
}
Esiteks lülituvad kõik rohelised LED-id sisse, siis on viivitus 250 ms, pärast seda lülituvad kõik rohelised LED-id välja ja jälle on viivitus 250 ms.
Loome funktsiooni kõigi valgusdioodide väljalülitamiseks:
void turnOff() {
for (int i = 0; i < arrayLength; i++) // läbime kõik ledPins massiivi elemendid
{
digitalWrite(ledPins[i], LOW); // lülitame iga valgusdioodi välja
}
}
Loome tsükli, milles kontrollitakse potentsiomeetri väärtust ja käivitatakse vastav visuaalne efekt:
void loop() {
int potValue = analogRead(sensorPin); // siin loetakse potentsiomeetri väärtused
int mode = map(potValue, 0, 1023, 0, 4); // 5 režiimi (0-4)
mode = constrain(mode, 0, 4); // režiimi väärtuse piiramine vahemikus 0 kuni 4
if (mode == 1) // kui režiim on 1, käivitatakse funktsioon tree()
{
tree();
}
else if (mode == 2)
{
redLight();
}
else if (mode == 3)
{
blueLight();
}
else if (mode == 4)
{
greenLight();
}
else
turnOff();
}
Kood
int sensorPin = A3; // potentsiomeeter
int ledPins[] = {5, 6, 7, 8, 9, 10, 11, 12, 13};
int arrayLength = sizeof(ledPins) / sizeof(ledPins[0]); // massiivi suurus
void setup() {
for (int i = 0; i < arrayLength; i++) {
pinMode(ledPins[i], OUTPUT);
}
}
void loop() {
int potValue = analogRead(sensorPin);
int mode = map(potValue, 0, 1023, 0, 4); // 5 režiimi (0-4)
mode = constrain(mode, 0, 4);
if (mode == 1)
{
tree();
}
else if (mode == 2)
{
redLight();
}
else if (mode == 3)
{
blueLight();
}
else if (mode == 4)
{
greenLight();
}
else
turnOff();
}
// efektid
void tree() {
for (int i = 0; i < arrayLength; i++) {
int flickerChance = random(0, 10); // 0–9
if (flickerChance < 3) { // Umbes 30% tõenäosus, et LED vilgub
digitalWrite(ledPins[i], HIGH);
delay(random(30, 150)); // juhuslik vilkumise kestus
digitalWrite(ledPins[i], LOW);
delay(random(10, 50)); // juhuslik paus
}
}
}
void redLight() {
digitalWrite(13, HIGH);
digitalWrite(10, HIGH);
digitalWrite(7, HIGH);
delay(250);
digitalWrite(13, LOW);
digitalWrite(10, LOW);
digitalWrite(7, LOW);
delay(250);
}
void blueLight() {
digitalWrite(11, HIGH);
digitalWrite(8, HIGH);
digitalWrite(5, HIGH);
delay(250);
digitalWrite(11, LOW);
digitalWrite(8, LOW);
digitalWrite(5, LOW);
delay(250);
}
void greenLight() {
digitalWrite(12, HIGH);
digitalWrite(9, HIGH);
digitalWrite(6, HIGH);
delay(250);
digitalWrite(12, LOW);
digitalWrite(9, LOW);
digitalWrite(6, LOW);
delay(250);
}
void turnOff() {
for (int i = 0; i < arrayLength; i++)
{
digitalWrite(ledPins[i], LOW);
}
}