Jump to content

m3sk4lit0

მოდერატორი
  • Content count

    279
  • Joined

  • Last visited

  • Days Won

    46

m3sk4lit0 last won the day on February 26 2016

m3sk4lit0 had the most liked content!

Community Reputation

137 ნორმალური

About m3sk4lit0

  • Rank
    წევრი

Recent Profile Visitors

1.969 profile views
  1. Running 3D TEXT როგორც სურათიდან ჩანს, მოწყობილობის მბრუნავ ღერძზე ვერტიკალურად განლაგებულია 16 ცალი ორი განსხვავებული ფერის შუქდიოდები, ყვითელი და წითელი. ღერძი ბრუნავს ცენტრის გარშემო დაახლოებით 24 ბრუნი წამში(1440 ბრუნი წუთში) სიჩქარით, რაც აუცილებელია იმისთვის, რომ ადამიანის თვალმა კადრების მონაცვლეობა უწყვეტად აღიქვას. თითოეული შუქდიოდი შემოწერს წრეწირს რომლის სიგრძეა 77 სმ. თავად 1 შუქდიოდის თავაკის დიამეტრია დაახლოებით 6მმ, რაც ნიშნავს, რომ მისი წრეწირზე ბრუნვისას მას შეუძლია 128(77/0,6) სხვადასხვა მდებარეობის დაკავება. იმისთვის, რომ მივიღოთ უწყვეტი გამოსახულება დიოდის წრეზე ბრუნვის დროს, საჭიროა მისი ჩართვა საჭირო დროს, საჭირო პოზიციაზე და საჭირო დაყოვნებით. შუქდიოდი წრეწირს შემოწერს 41,6 მილიწამში (1/24), ხოლო წრეწირზე მოძრაობისას პოზიციას შეიცვლის ყოველ დაახლოებით 300 მიკროწამში (41,6/127), ამ 300 მიკროწამის განმავლობაშიც იგი რაღაც პერიოდი ჩართული უნდა იყოს, შემდეგ გაითიშოს და დაელოდოს ახალ პოზიციას და შესაბამის ჩართვის ბრძანებას. შუქდიოდების სამართავად გამოყენებულია Atmel ფირმის ATmega8 მიკროკონტროლერი, რომელიც თავად მბრუნავ ღერძზე ჯდება. მოწყობილობა იკვებება 12 ვოლტით, და ძრავამდე ჩართული სქემა საშუალებას გვაძლევს ხელით ვარეგულიროთ ძრავის ბრუნვათ რიცხვი(ეს აუცილებელი ხდება, რადგან მუშაობისას დეტალები თბება და თუმცა მცირედით მაგრამ მაინც იცვლება ბრუნვათა რიცხვი). ალბათ გაგიჩნდათ კითხვა, როგორ გავაგებინოთ კონტროლერს ჩვენთვის სასურველი ტექსტი რომ გამოიტანოს? ამისთვის მე C#_შ დავწერე ორი პროგრამა 3D Runstring Symbol Calculator და 3D Runstring Text Generator. 3D Runstring Symbol Calculator - პროგრამა შედგება 40 მწვანე კუბიკისგან, რომლებზე დაწკაპუნებითაც იგი წითლდება. ამ მეთოდით შეგვიძლია გამოვსახოთ სასურველი ასო, ციფრი ან სიმბოლო და ღილაკზე Calculate დაჭერით პროგრამა დააგენერირებს ორობითი ან თეხვსმეტობითი რიცხვებისგან შემდგარ 5 ელემენტიან მასივს. ეს ელემენტები შემდგომ გამოიყენება მიკროკონტროლერის დასაპროგრამებლად სასურველი სიმბოლოს გამოსასახად. 3D Runstring Text Generator - ეს პროგრამა გავაკეთე იმისთვის, რომ საჭირო ტექსტის შესაბამისი მასივის გენერირებისთვის საჭირო არ ყოფილიყო თვითოეული სიმბოლოს ხელით შედგენა. პროგრამა შესაბამის კოდში გადაიყვანს ტექსტს, რომელიც შედგება ინგლისური ანბანის ყველა ასოსგან (a-z, A-Z), ქართული ასოსგან(ა-ჰ), ციფრებისგან(0-9) და სიმბოლოებისგან > < : ; . , “ ? / | _ - ) ( * & ^ % $ # ! პროგრამაში ასევე დაყენებული მაქვს შეზღუდვა, მასივის ელემენტების რაოდენობამ არ შეიძლება გადააჭარბოს 128_ს, რადგან როგორც ზემოთ ვახსენე, მხოლოდ 128 განსხვავებული წერტილის მდებარეობა არსებობს წრეწირზე, რომელსსაც შუქდიოდი იკავებს. თუ გვინდა გრძელი ტექსტის დაწერა, მაშინ მოხდება შემდეგი რამ: როცა ტექსტის მიერ შედგენილი მასივის ელემენტების რაოდენობა არის მაგალითად 150, ამ დროს 128 ელემენტამდე რა ტექსტიც ჩაეტება ის სრულად გამოისახება მოწყობილობით, ხოლო ამის შემდეგ მოხდება ტექსტის დაძვრა მარჯვენა მხარეს, ანუ პირველი ასო გაქრება ტექსტიდან და სამაგიეროდ ბოლოში გამოისახება შემდეგი ასო და ა.შ. ასე შეგვიძლია ნებისმიერი სიგრძის წარწერის გამოტანა. ვიდეოს ლინკები : ზემოთ ნაჩვენებია მოწობილობის მუშაობის და ჩვენთვის სასურველი ინფორმაციის გამოტანის ძირითადი პრინციპები. როგორც ვხედავთ, სხვადასხვა ტექსტის გამოსატანად საჭირო ხდება კონტროლერის თავიდან დაპროგრამება, რაც გარკვეულ პრობლემას გვიქმნის მის გამოყენებაში. დადგა კონტროლერში კომპიუტერიდან დისტანციურად ინფორმაციის შეცვლის საკითხი. ამისათვის კონტროლერს აქვს UART მოწყობილობა რომელიც იგივე პროტოკოლით მუშაობს რაც აქვს კომპიუტერის RS232 და RS485. იმისათვის, რომ გამოვიყენოთ USB პორტი, არსებობს USB to RS232/ USB to UART კონვერტერები. მაგრამ ასეთი მიერთება სადენების საშუალებით შეუძლებელია. ამ პრობლემის მოგვარების ერთ-ერთი მეთოდი არის მარტივი სქემის აწყობა 555 ტაიმერზე, რომელიც უერთდება კომპიუტერის UART გამოსასვლელს და მასზე მიერთებული ინფრაწითელი დიოდი წინსწარ განსაზღვრული სიხშირით ასხივებს TX გამოსასვლელზე ჩაწერილ შესაბამის ინფორმაციას. ჩვენი მბრუნავი მოწყობილობის მმართველ კონტროლერზე მიერთებული გვაქვს ინფრაწითელი მიმღები, რომელიც იგივე სიხშირეზე მუშაობს რა სიხშირითაც გადმოვცემთ ჩვენს უნფორმაციას. ინფრაწითელი მიმღების Vout პინი მიერთებულია კონტროლერის RX პინზე და ამრიგად ხდება კომპიუტერიდან ინფორმაციის უსადენოდ გადაცემა უსადენოდ. ამ მეთოდს ორი მინუსი აქვს:არ შეგვიძლია ინფფორმაციის მაღალი სიჩქარით და დიდ მანძილზე გადაცემა. ასევე არსებობბს ინფორმაციის დამახინჯების საშიშროება. ეს პრობლემა რომ მოვაგვაროთ, შეგვიძლია გამოვიყენოთ მეორე მეთოდი, რომელიც გულისხმობს ინფორმაციის გადაცემს რადიო ტალღებით. ასეთი ერთ-ერთი მზა მოდული არის APC220 ეს მოდული მუშაობს UART ინტერფეისით, ინფორმაციის გადაცემის რადიუსი არის 1200 მეტრი, ინფორმაციას გადასცემს მაღალი სიჩქარით და უშეცდომოდ. კომპლექტში არის 3 ნაწილი: USB to UART კონვერტერი, რადიო გადამცემი რომელიც კონვერტერს უერთდება და მიმღები, რომელიც ჩვენი მოწყობილობის კონტროლერთან ერთდება. ჩვენ კიდევ ერთი საკითხი გადავწყვიტეთ, მაგრამ მოდი მოწყობილობა უფრო საინტერესო გავხადოთ. მოცემულ შემთხვევაში მოწყობილობას მიერთებული აქვს ორი განსხვავებული ფერის შუქდიოდები, წითელი და ყვითელი. მისი მუშაობის პროცესში გამოტანილი ინფორმაციის ფერი რომ ვცვალოთ, შეგვიძლია მას ივუერთოთ RGB შუქდიოდ. ამ შუქდიოდს შეუძლია სამი განსხვავებული ფერის გამოსხივება: წითელი, მწვანე და ლურჯი. მაგრამ ასევე შეგვიძლია მათი შეხამებით მივიღოთ ჩვენთვის სასურველი ფერი. ასეთ შემთხვევაში დაგვჭირდება კონტროლერი მეტი გამოსასვლელი პინებით, მაგალითად ATmega128. გამოტანილი ტექსტის ფერი რომ იცვლებოდეს არა განსაზღვრული ალგორითმით, არამედ „ბუნებრივად“, შეგვიძლია კონტროლერს მივუერთოთ მაგალითად ტემპერატურის სენსორი, რომელიც საშუალებას მოგვცემს გარემოს ტემპერატურის შესაბამისად ავტომატურად შეიცვალოს ტექსტის ფერი. მოწყობილობის სტაბილურად მუშაობა დამოკიდებულია კონსტრუქციის ხარისხიანად და საიმედოდ აგებაზე. ყველა ამ იდეის განხორციელება მოგვცემს მისი ფართო გამოყენების საშუალებას.
  2. @GHOST_FATHER რა გვიან გქონდა რეაქცია
  3. არის კიდევ სპეციალური ბარათები ადმინისტრაციისთვის და ალბათ რაღაცნაირად დაითრია, სპეციალურ ბარათებს სხვადასხვა პრივილეგიები აქვთ. ან სისტემა გატეხა, რაც ნაკლებად სავარაუდოა
  4. პირველი დადებიდან საათნახევარი უფასოთ შეგიძლია გაიარო ტურნიკეტი, ოღონდ დაახლოებით 15 წუთიანი შუალედებით. თუ სწორად მახსოვს.
  5. საქართველოში http://dac.ge/ და https://www.facebook.com/groups/arduino.ge/ გამოწერა თუ გინდა http://www.ebay.com/
  6. რუსული/ინგლისური ტექსტი შეგიძლია წაიკითხო და გაიგო რა წერია ?
  7. [C#] კითხვები / დახმარებები

    მოკლედ button1-ზე დაკლიკებისას პროგრამა კითხულობს txt ფაილიდან სახელად LogsList.txt აკეთებს თავის საქმეს და პასუხს წერს textBox1-ში using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Text; using System.Windows.Forms; using System.Globalization; using System.IO; namespace WindowsFormsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } class lst { public int index { get; set; } public DateTime timestamp { get; set; } public lst() { } public lst(int index, string timestamp) { this.index = index; this.timestamp = DateTime.ParseExact(timestamp.Remove(19), "yyyy-MM-dd HH:mm:ss", DateTimeFormatInfo.InvariantInfo); } } private void button1_Click(object sender, EventArgs e) { try { List<string> lines = new List<string>(); StreamReader reader = new StreamReader("LogsList.txt"); int j = 0; while (reader.Peek() >= 0) lines.Add(reader.ReadLine()); List<lst> LogsList = new List<lst>(); foreach (String s in lines) { new lst(Convert.ToInt32(s.Remove(1)), s.Remove(0, 2)); LogsList.Add(new lst(Convert.ToInt32(s.Remove(1)), s.Remove(0, 2))); } DateTime sum = DateTime.Now; DateTime temp_sum = sum; DateTime start_time; string stm = Convert.ToString(LogsList[0].timestamp).ToString(); string etm = Convert.ToString(LogsList[0].timestamp).ToString(); stm.Remove(11); etm.Remove(11); start_time = DateTime.ParseExact(stm.Remove(11) + "09:00:00", "dd.MM.yyyy HH:mm:ss", DateTimeFormatInfo.InvariantInfo); DateTime end_time; end_time = DateTime.ParseExact(etm.Remove(11) + "18:00:00", "dd.MM.yyyy HH:mm:ss", DateTimeFormatInfo.InvariantInfo); int index3 = 0;//შეცდომა int index4 = 0;//მოგვარება bool end = false;//გავიდა სიის ბოლოში bool ok = false;//ok გახდება true როცა შეცდომის შემდეგ ვიპოვნით გამოსწორებას გა გამოვაკლბთ დროებს for (int i = 0; i < LogsList.Count; i++)//ვამოწმებთ მთლიან ლისტს { if (LogsList[i].timestamp.Hour >= 9 && LogsList[i].timestamp.Hour <= 18)// 9.00 და 18.00 პირობითად დროის შუალედია { if (LogsList[i].index == 3 && !(LogsList[i].timestamp.Hour >= 18 && (LogsList[i].timestamp.Minute > 0 || LogsList[i].timestamp.Second > 0))) { index3 = i;//შევინახოთ პირველი შეცდომის დროის ინდექსი i++; ok = false; while (LogsList[i].index != 4)//ვეძებთ გამოსწორების ინდექსს { i++;//ვზრდით i-ს სანამ mylist[i].index != 4, ანუ გამოსწორებას არ დავიჭერთ. if (i == LogsList.Count)//i რომ არ გაგვექცეს { end = true; break; } } if (end) { //ესეიგი თუ ძებნა დაამთავრა და მოგვარება ვერ ნახა 18.00 გამოაკლებს დამახსოვრებულ შეცდომის დროს if (!ok) sum += end_time - LogsList[index3].timestamp; break; } index4 = i;//დავიჭირეთ გამოსწორების ინდექსი if (!(LogsList[i].timestamp.Hour >= 18 && (LogsList[i].timestamp.Minute > 0 || LogsList[i].timestamp.Second > 0)))//ვნახოთ ამასობაში მოგვარების დრო 18.00 ხომ არ გადაცდა { sum += (LogsList[index4].timestamp - LogsList[index3].timestamp);//ავჯამავთ შეცდომასა და გამოსწორებას შორის დროს } else//თუ გადაცდა 18.00 { //ესეიგი თუ მოგვარება ნახა მაგრამ 18.00 მერე, მაშინ 18.00-ს გამოაკლებს დამახსოვრებულ შეცდომის დროს end_time = DateTime.ParseExact(Convert.ToString(LogsList[index3].timestamp).Remove(11) + "18:00:00", "dd.MM.yyyy HH:mm:ss", DateTimeFormatInfo.InvariantInfo); sum += end_time - LogsList[index3].timestamp; //break; } } //i იზრდება for ციკლში მანამ სანამ არ შესრულდება პირობა mylist[i].index == 3 if (end)//i გავიდა სიის ბოლოში და ვწყვეტთ { break; } } } textBox1.Text = (sum - temp_sum).ToString(); } catch(Exception ex) { MessageBox.Show(ex.Message); } } } } ფაილში ჩაკოპორებულია შენი გამოგზავნილი მონაცემები ასე:
  8. [C#] კითხვები / დახმარებები

    class lst { // Auto-implemented properties. public int index { get; set; } public double time { get; set; } } private void button1_Click(object sender, EventArgs e) { lst lst = new lst(); List<lst> mylist = new List<lst> { new lst(){ index = 3, time=5.01 }, new lst(){ index = 3, time=5.08 }, new lst(){ index = 4, time=6.04 }, new lst(){ index = 3, time=8.10 }, new lst(){ index = 3, time=9.01 }, new lst(){ index = 3, time=10.08 }, new lst(){ index = 4, time=12.04 }, new lst(){ index = 3, time=15.30 }, new lst(){ index = 4, time=17.20 }, new lst(){ index = 3, time=17.40 }, new lst(){ index = 3, time=17.50 }, new lst(){ index = 3, time=18.08 }, new lst(){ index = 4, time=19.04 }, new lst(){ index = 3, time=20.25 }, new lst(){ index = 3, time=22.20 } }; double sum=0; int index3 = 0; int index4 = 0; bool end = false; bool ok = false;//ok გახდება true როცა შეცდომის შემდეგ ვიპოვნით გამოსწორებას გა გამოვაკლბთ დროებს for (int i = 0; i < mylist.Count; i++)//ვამოწმებთ მთლიან ლისტს { if (mylist[i].time >= 9.00 && mylist[i].time <= 18.00)// 9.00 და 18.00 პირობითად დროის შუალედია { if (mylist[i].index == 3) { index3 = i;//შევინახოთ პირველი შეცდომის დროის ინდექსი i++; ok = false; while(mylist[i].index != 4)//ვეძებთ გამოსწორების ინდექსს { i++;//ვზრდით i-ს სანამ mylist[i].index != 4, ანუ გამოსწორებას არ დავიჭერთ. if(i==mylist.Count)//i რომ არ გაგვექცეს { end = true; break; } } if (end) { //ესეიგი თუ ძებნა დაამთავრა და მოგვარება ვერ ნახა 18.00 გამოაკლებს დამახსოვრებულ შეცდომის დროს if (!ok) sum += 18 - mylist[index3].time; break; } index4 = i;//დავიჭირეთ გამოსწორების ინდექსი if (mylist[index4].time <= 18.00)//ვნახოთ ამასობაში მოგვარების დრო 18.00 ხომ არ გადაცდა { sum += (mylist[index4].time - mylist[index3].time);//ავჯამავთ შეცდომასა და გამოსწორებას შორის დროს } else//თუ გადაცდა ვწყვეტთ ვიკლს { //ესეიგი თუ მოგვარება ნახა მაგრამ 18.00 მერე, მაშინ 18.00-ს გამოაკლებს დამახსოვრებულ შეცდომის დროს sum += 18 - mylist[index3].time; break; } } //i იზრდება for ციკლში მანამ სანამ არ შესრულდება პირობა mylist[i].index == 3 if(end)//i გავიდა სიის ბოლოში და ვწყვეტთ { break; } } } textBox1.Text = Math.Round(sum, 2).ToString(); } ფორმაზე გაქვს button1 და textBox1. დააკლიკებ ღილაკს და გამოიანს 5,53. ესეიგი, მაქვს ლისტი სადაც თითოეულ ობიექტს გააჩნია index და უდრის 3-ს ან 4-ს, ანუ შეცდომა და გამოსწორება. და მაქვს time სადაც შენახულია შეცდომის და გამოსწორების დროები(9.01 არის იგივე 9 საათი და 1 წუთი). პროგრამა ეძებს შუალედში 9.00 - 18.00 . შეცდომის დროის პოვნისას იმახსოვრებს მის მნიშვნელობას და ეძებს უახლოეს გამოსწორების დროს და აჯამავს მათ შორის სხვაობას. თუ შეცდომის შემდეგ გამოსწორების დრო გადაცდა 18.00-ს, მაშინ ჩათვლის გამოსწორებად 18.00-ს და 18.00-ს გამოაკლებს ბოლოს დამახსოვრებულ შეცდომის დროს. ამით რჩება მუშაობას. თუ რამე გინდა დავამატოთ კიდევ
  9. [C#] კითხვები / დახმარებები

    თუ RS232 გაქვს მაშინ სტანდარტული UART კომუნიკაცია გაქვს და C#-ში შეგიძლია გამოიყენო ობიექტი serialPort. data bits და stop bits კონფიგურაცია დაგჭირდება აპარატის მიხედვით. არ გაქვს მეტი ინფორმაცია ? დატაშიტი? ან მთვლელის მოდელი იცი?
  10. [C#] კითხვები / დახმარებები

    კომპზე რომ აერთებ მთვლელს დევაის მენეჯერში ჩანს მთვლელი ? ანუ დრაივერი გაქვს ?
  11. მოკლედ რა აღარ ვცადე..მაგრამ კოდი არაფერ შუაშია. Access host-ში წვდომა მივანიჭე ყველა IP-ს, ვცადე კიდევ Navicat Premium მაგრამ ვერ დავუკავშირდი. უცხოურ ჰოსტინგს ვიყიდი და ეგ იქნება რა.
  12. proserv.ge არ მაძლევს წვდომის უფლებას როგორც მივხვდი. godaddy.com ვნახე მაგრამ ძვირია, 4$ ყოველთვე ბევრია, არადა უწერია Remote access მხარდაჭერა აქვსო.
  13. ხოო firewall-ის გათიშვაც ვცადე მაგრამ არაფერი ქნა. სვარაუდოდ წვდომას თვითონ proserv.ge მიზღუდავს. სხვა იდეა აღარ მრჩება/
×