პროექტი №5 – ”მორბენალი” ნათება

ამ პროექტში შევისწავლით შუქდიოდებით შედგენილ მწკრივს სადაც მათი თანმიმდებრობითი ნათება ქმნის მორბენალი შუქდიოდის ეფექტს. ამ პროექტში ასევე პირველად გავეცნობით თუ რა არის მასივი.

დაგვჭირდება:

1) 10 ცალი შუქდიოდი

2) 10 ცალი 150-200Ω  რესისტორი

სქემის აწყობა.

 ყურადღებით დააკვირდით და გამორთულ არდუინოზე ააწყვეთ ქვემოთ მოყვანილი სქემა.

სურ. 3-1.

პროგრამულ კოდი

აკრიფეთ ქვემოთ მოყვანილი კოდი, შეამოწმენეთ და ჩატვირთეთ არდუინოში.

// პროექტი №5 - ”მორბენალი” შუქდიოდები
// byte ტიპის მასივი სახელად ledPin რომლის
byte ledPin[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
//შემადგენელი ელემენტებია იმ კონტაქტების
//ნომრები რომლებზეც შუქდიოდებია მიერთებული 
// int ტიპის ცვლადი სახელად ledDelay, შეცვლის დაყოვნება მლწმ-ში
int ledDelay(65); 
int direction = 1;//int ტიპის ცვლადი სახელად direction
int currentLED = 0;// int ტიპის ცვლადი სახელად currentLED
//unsigned long ტიპის ცვლადი სახელად changeTime
unsigned long changeTime;
void setup() {
// კონტაქტების გადაყვანა გამოსვლის რეჟიმში
  for (int x=0; x<10; x++) { 
      pinMode(ledPin[x], OUTPUT); 
  }
  changeTime = millis();
}

void loop() {
//თუ ბოლო შეცვლიდან გასულია ledDelay მლწმ   
   if ((millis() - changeTime) > ledDelay) { 
      changeLED();
      changeTime = millis();
   }
}
void changeLED() {
  for (int x=0; x<10; x++) { // ყველ შუქდიოდის გამორთვა
      digitalWrite(ledPin[x], LOW);
  }
  // მიმდინარე შუქდიოდის ჩართვა
  digitalWrite(ledPin[currentLED], HIGH); 
  currentLED += direction; // direction-ით მატება
  // შეიცვალოს მიმართულება direction თუ გავედით ბოლოში
  if (currentLED == 9) {
      direction = -1;
  }
  if (currentLED == 0) {
      direction = 1;
  }
}

თუ ყველფერი სწორად არის შესრულებული, მაშინ ნათება დაიწყებს ”სრიალს” შუქდიოდების მწკრივში და ბოლო ში გასვლის შემდეგ დაბრუდება უკან.

კოდის განხილვა.

პირველი სტრიქონი

byte ledPin[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13};

არის მონაცემთა მასივი, გამოცხადებული byte ტიპის ცვლადის საშუალებით, სახელად ledPinმასივი არის ცვლადების (გნებავთ მნიშვნელობების) ერთობლიობა, ნაკრები, ჯგუფი, სიმრავლე. მასივის შემადგენელი ელემენტების გამოძახება, გამოყენება, წვდომა ხდება მათი ინდექსის ანუ რიგითი ნომრის საშუალებით. ჩვენი მასივი შედგემა 10 ელემეტისაგან, მნიშვნელობისაგან, წევრისაგან (კონტაქტების ნომრები 4-დან 13-ის ჩათვლით). მიუხედავად იმისა, რომ ჩვენ ინტუიციურად მიჩვეული ვართ თვლა დავიყოთ 1-დან, მასივის გამოყენების შემთხვევაში კი საქმე სხაგვარად არის, ამიტომ დაიმახსოვრეთ : მასივის ელემენტების ნუმერაცია იწყება 0-დან. რაც იმას ნიშნავს, რომ პირველი ელემენტის ინდექსი არის 0, მეორე ელემენტის ინდექსი არის 1, მესამე ელემენტის ინდექსი 2 და ა.შ. ამიტომ ჩვენი მასივის ელემენტების ინდექსებია: 0, 1, 2, 3, 4, 5, 6 ,7, 8 და 9. მაგალითად: არდუინოს მე-6 კონტაქტის ანუ მასივის მე-3 ელემენტის გამოძახება ჩაიწერება ასე: ledPin[2]. მე-10 კონტაქტის ანუ მასივის მე-7 ელემენის გამოძახება კი ასე ledPin[6].

დამატებითი ინფორმაცია: მასივის გამოყენების დროს არ არის აუცილებელი მისი ყველა ელემენტის ჩამოთვლა დასაწყისში, საკმარისია მხოლოდ მისი ზომის გამოცხადება, ხოლო მოგვიანებით კი მისი ელემეტებით შევსება. ამის საშუალებას იძლევა კომპილატორი, რომელიც ითვლის მასივისთვის განკუთვნილ ელემენტებს. მაგალითად შეიძლებოდაა ასე დაგვეწერა:

byte ledPin[10];

ხოლო ელემენტები მიგვენიჭებინა მოგვიანებით.

დავუბრუნდეთ ისევ ჩვენს პროგრამას. მთავარ ციკლში, თუ შუქდიოდების ბოლო ნათებიდან გასულია ledDelay ცვლადში მოცემული დრო მილიწამებში, მაშინ გამიოძახება ფუნქცია changeLED()

void changeLED() {
// ყველ შუქდიოდის გამორთვა
for (int x=0; x<10; x++) { 
    digitalWrite(ledPin[x], LOW);
}

digitalWrite(ledPin[currentLED], HIGH); // მიმდინარე შუქდიოდის ჩართვა

currentLED += direction; // direction-ის ტოლი სიდიდით მატება

// შეიცვალს მიმართულება direction თუ გავედით ბოლოში

if (currentLED == 9) {direction = -1;}

if (currentLED == 0) {direction = 1;}

}

ეს ფუნქცია ჯერ გამორთავს ყველა შუქდიოდს და შემდეგ ჩართავს იმ მიმდინარე შუქდიოდს რომლის კონტაქტის ნომერიც ინახება ცვლადში currentLED.  ეს ისე სწრაფად ხდება, რომ მისი შემჩნევა ძნელია.

შემდეგ ამ ცვლადს ემატება direction. რადგან direction-ის მნიშვნელობა შეიძლება იყოს ან1, ცვლადის მნიშვნელობა გაიზრდება (+1) ან შემცირდება (currentLED +(-1)) ერთით.

ამ ფუქციაში არის შუქდიოდების მწკრივის ბოლოში გასვლის შემოწმების if პირობა.  თუ მიღწეულია მწკრივის ბოლო მაშინ იცვლება ცვლადის ”მიმართულება” ანუ ნათების გადაადგილების, ”სრიალის” მიმართულება.

ledDelay ცვლადის მნიშნელობის შეცვლით შესაძლებელია ნათების იმპულსის გაგზავნა სხვა და სხვა სიჩქარით. შეცვვალეთ და ნახეთ რა ეფექტს მიიღებთ. LedDelay ცვლადის მნიშვნელობის შესაცვლელად საჭიროა პროგრამის მუშაობის იძულებით შეწვეტა, ცვლადის შეცვლა, შენახვა და არდუინოში თავიდან ჩატვირთვა.

შემდეგ გაკვეთილში ვნახავთ, თუ როგორ ვცვალოთ ნათების გადაადგილების სიჩქარე პოტენციომეტრის საშუალებით.

One Response to პროექტი №5 – ”მორბენალი” ნათება

  1. scienceasm says:

    წიგნის თარგმანი ქვეყნდება forum.ge – ზე Hinkalino-ს მიერ.
    დამატებითი შეკითხვები თემაში
    ==========================================
    “Arduino ს ინტერფეისი”
    ==========================================
    http://forum.ge/?f=48&showtopic=34393677

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: