[დაჯილდოებული საქმე] კატის საკვების კონტროლის ინტელექტუალური სისტემა

——DWIN დეველოპერთა ფორუმიდან

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

შესავალი:

1.UI სურათის მასალა

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

asv (2)

2.ინტერფეისის განვითარება

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

asv (1)

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

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

(1) შეხების მდებარეობის კოდის აღმოჩენა და აუდიოს დაკვრა:

void TouchDetect()

{

    u16 Va[3] = 0;

    u8 i = 0;

 

    for(i = 0;i <3;i++)

    {

        Va[i] = Read_Dgus(0x0016 + i);

        თუ (Va[0] == 0x5A01)

        {

        }

        სხვა

        {

            შესვენება;

        }

    }

    if(i != 0) //პირველი დააწკაპუნეთ შესასვლელად

    {

        u16 თამაში[2] = {0x0001, 0x4000};

        touchAnimationFlag = 1;

        touchAnimationCnt = 0;

        touchPosX = Va[1];

        touchPosY = Va[2];

        write_dgus_vp(0x00A0, თამაში, 2);

    }

}

 

(2) სენსორული ეფექტის ჩვენების კოდი შემდეგია:

void TouchStart()

{

    if (touchAnimationFlag == 1)

    {

        if (touchAnimationCnt == 0)

        {

            Write_Dgus(0x5011, touchPosX - 100);

            Write_Dgus(0x5012, touchPosY - 100);

        }

 

        Write_Dgus (0x5000, touchAnimationCnt);

        touchAnimationCnt++;

 

        if (touchAnimationCnt == 6)

        {

            touchAnimationFlag = 0;

            Write_Dgus(0x5011, 1024);

            Write_Dgus(0x5012, 600);

        }

    }

    

}

 

4. შემდეგი ნაბიჯი არის ეკრანის მეშვეობით შესაბამისი პარამეტრების დაყენება, შემდეგ კი მონაცემების გადაცემა კატის საკვების კონტროლერისთვის ESP32-ის საშუალებით, რათა განხორციელდეს კატის საკვების ავტომატური კვების ფუნქცია.კონკრეტული კოდი ასეთია:

//ღილაკის სტატუსის მიღება

void get_key_status()

{

    int i = 0;

    //u16 Va=Read_Dgus(addr);

    u16 Va=Read_Dgus(0x1000);

    თუ (Va != 0x0000)

    {

        //Sტატუს გვერდი

        if(Va == 0x0103) //მიიტანეთ რიცხვი გ

        {

            u16 გადართვის გვერდი[2] = {0x5A01, 19};

            setNum = placeGramNum;

            backPage = 1;// სტატუსის გვერდზე დაბრუნება

            Write_Dgus(0x4000 + 0, setNum % 10);

            Write_Dgus(0x4000 + 2, setNum / 10 % 10);

            Write_Dgus(0x4000 + 4, setNum / 100 % 10);

            Write_Dgus(0x4000 + 6, setNum / 1000 % 10);

            write_dgus_vp(0x0084, switchpage, 2);

        }

        else if (Va == 0x0102)

        {

            OneSendData3 (placeGramNum);//ადგილიკატის საჭმელიერთხელ

        }

        else if(Va == 0x0101) //პარამეტრების გვერდი

        {

            u16 გადართვის გვერდი[2] = {0x5A01, 3};

            for(i = 0;i <6;i++)

            {

                თუ (i == 0)

                {

                    Write_Dgus(0x3070 + i * 0x10 + 0, მიმდინარე დრო[i] % 10);

                    Write_Dgus(0x3070 + i * 0x10 + 2, მიმდინარე დრო[i] / 10 % 10);

                    Write_Dgus(0x3070 + i * 0x10 + 4, მიმდინარე დრო[i] / 100 % 10);

                    Write_Dgus(0x3070 + i * 0x10 + 6, მიმდინარე დრო[i] / 1000 % 10);

                }

                სხვა

                {

                    Write_Dgus(0x3070 + i * 0x10 + 0, მიმდინარე დრო[i] % 10);

                    Write_Dgus(0x3070 + i * 0x10 + 2, მიმდინარე დრო[i] / 10 % 10);

                }

            }

            write_dgus_vp(0x0084, switchpage, 2);//შედით პარამეტრების გვერდზე

        }

        სხვა შემთხვევაში, თუ (Va == 0x0100) //Rჩანაწერის გვერდი

        {

            u16 გადართვის გვერდი[2] = {0x5A01, 2};

            for(i = 0;i <6;i++)

            {

                თუ (i == 0)

                {

                    Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[0][i] % 10);

                    Write_Dgus(0x2000 + i * 0x10 + 2, eatFeedList[0][i] / 10 % 10);

                    Write_Dgus(0x2000 + i * 0x10 + 4, eatFeedList[0][i] / 100 % 10);

                    Write_Dgus(0x2000 + i * 0x10 + 6, eatFeedList[0][i] / 1000 % 10);

                }

                სხვა

                {

                    Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[0][i] % 10);

                    Write_Dgus(0x2000 + i * 0x10 + 2, eatFeedList[0][i] / 10 % 10);

                }

            }

            write_dgus_vp(0x0084, switchpage, 2);//შედით ჩანაწერის გვერდზე

        }

        //Rჩანაწერის გვერდი

        else if(Va == 0x0201) //წინა გვერდის ჩაწერა

        {

            if (lookEatCnt > 0)

            {

                lookEatCnt--;

                for(i = 0;i <6;i++)

                {

                    თუ (i == 0)

                    {

                        Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[lookEatCnt][i] % 10);

                        Write_Dgus(0x2000 + i * 0x10 + 2, eatFeedList[lookEatCnt][i] / 10 % 10);

                        Write_Dgus(0x2000 + i * 0x10 + 4, eatFeedList[lookEatCnt][i] / 100 % 10);

                        Write_Dgus(0x2000 + i * 0x10 + 6, eatFeedList[lookEatCnt][i] / 1000 % 10);

                    }

                    სხვა

                    {

                        Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[lookEatCnt][i] % 10);

                        Write_Dgus(0x2000 + i * 0x10 + 2, eatFeedList[lookEatCnt][i] / 10 % 10);

                    }

                }

            }

        }

        else if(Va == 0x0202) //გვერდის ჩაწერა შემდეგ გვერდზე

        {

            if(lookEatCnt < eatCnt - 1)

            {

                lookEatCnt++;

                for(i = 0;i <6;i++)

                {

                    თუ (i == 0)

                    {

                        Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[lookEatCnt][i] % 10);

                        Write_Dgus(0x2000 + i * 0x10 + 2, eatFeedList[lookEatCnt][i] / 10 % 10);

                        Write_Dgus(0x2000 + i * 0x10 + 4, eatFeedList[lookEatCnt][i] / 100 % 10);

                        Write_Dgus(0x2000 + i * 0x10 + 6, eatFeedList[lookEatCnt][i] / 1000 % 10);

                    }

                    სხვა

                    {

                        Write_Dgus(0x2000 + i * 0x10 + 0, eatFeedList[lookEatCnt][i] % 10);

                        Write_Dgus(0x2000 + i * 0x10 + 2, eatFeedList[lookEatCnt][i] / 10 % 10);

                    }

                }

            }

        }

        //პარამეტრების გვერდი

        else if (Va == 0x0302)

        {

            if (დროის რეჟიმი == 1)

            {

                დროის რეჟიმი = 0;

                Write_Dgus(0x3A12, 139);

            }

        }

        else if (Va == 0x0303)

        {

            if (დროის რეჟიმი == 0)

            {

                დროის რეჟიმი = 1;

                Write_Dgus(0x3A12, 242);

            }

        }

        else if(Va >= 0x0304 && Va <= 0x0309)

        {

            u16 გადართვის გვერდი[2] = {0x5A01, 19};

            backPage = 3;

            backNum = Va;

            setNum = timrIntervalHour[Va - 0x0304];

            Write_Dgus(0x4000 + 0, setNum % 10);

            Write_Dgus(0x4000 + 2, setNum / 10 % 10);

            Write_Dgus(0x4000 + 4, setNum / 100 % 10);

            Write_Dgus(0x4000 + 6, setNum / 1000 % 10);

            write_dgus_vp(0x0084, switchpage, 2);

        }

        სხვა თუ (Va >= 0x030A && Va <= 0x030F)

        {

            u16 გადართვის გვერდი[2] = {0x5A01, 19};

            backPage = 3;

            backNum = Va;

            setNum = მიმდინარედრო[Va - 0x030A];

            Write_Dgus(0x4000 + 0, setNum % 10);

            Write_Dgus(0x4000 + 2, setNum / 10 % 10);

            Write_Dgus(0x4000 + 4, setNum / 100 % 10);

            Write_Dgus(0x4000 + 6, setNum / 1000 % 10);

            write_dgus_vp(0x0084, switchpage, 2);

        }

        //Aშეასწორეთ მონაცემთა გვერდი

        სხვა შემთხვევაში, თუ (Va == 0x0400) //დაადასტურეთ

        {

            u16 გადართვის გვერდი[2] = {0x5A01, 0x0000};

            switchpage[1] = backPage;

            if(backPage == 1) // სტატუსის გვერდზე დაბრუნება

            {

                placeGramNum = setNum;

                Write_Dgus(0x1140 + 0, placeGramNum % 10);

                Write_Dgus(0x1140 + 2, placeGramNum / 10 % 10);

            }

            else if (backPage == 3)

            {

                if (backNum >= 0x0304 && backNum <= 0x0309)

                {

                    u16 აირჩიეთ = 0;

                    აირჩიეთ = (backNum - 0x0304) * 0x10;

                    timrIntervalHour[backNum - 0x0304] = setNum;

                    Write_Dgus(0x3010 + select + 0, setNum % 10);

                    Write_Dgus(0x3010 + აირჩიეთ + 2, setNum / 10 % 10);

                }

                სხვა თუ (backNum >= 0x030A && backNum <= 0x030F)

                {

                    u16 აირჩიეთ = 0;

                    აირჩიეთ = (backNum - 0x0304) * 0x10;

                    currentTime[backNum - 0x030A] = setNum;

                    

                    if (backNum == 0x030A)

                    {

                        Write_Dgus(0x3010 + select + 0, setNum % 10);

                        Write_Dgus(0x3010 + აირჩიეთ + 2, setNum / 10 % 10);

                        Write_Dgus(0x3010 + აირჩიეთ + 4, setNum / 100 % 10);

                        Write_Dgus(0x3010 + აირჩიეთ + 6, setNum / 1000 % 10);

                    }

                    სხვა

                    {

                        Write_Dgus(0x3010 + select + 0, setNum % 10);

                        Write_Dgus(0x3010 + აირჩიეთ + 2, setNum / 10 % 10);

                    }

                }

            }

            write_dgus_vp(0x0084, switchpage, 2);

        }

        სხვა შემთხვევაში, თუ (Va == 0x0401) //უკან

        {

            u16 გადართვის გვერდი[2] = {0x5A01, 0x0000};

            switchpage[1] = backPage;

            write_dgus_vp(0x0084, switchpage, 2);

        }

        else if(Va == 0x0402) //რიცხობრივი ზრდა

        {

            setNum++;

            Write_Dgus(0x4000 + 0, setNum % 10);

            Write_Dgus(0x4000 + 2, setNum / 10 % 10);

            Write_Dgus(0x4000 + 4, setNum / 100 % 10);

            Write_Dgus(0x4000 + 6, setNum / 1000 % 10);

        }

        else if(Va == 0x0403) //რიცხობრივი კლება

        {

            if (setNum > 0)

                ნაკრებიNum--;

            Write_Dgus(0x4000 + 0, setNum % 10);

            Write_Dgus(0x4000 + 2, setNum / 10 % 10);

            Write_Dgus(0x4000 + 4, setNum / 100 % 10);

            Write_Dgus(0x4000 + 6, setNum / 1000 % 10);

        }

        

        Write_Dgus(0x1000, 0);

    }

}


გამოქვეყნების დრო: სექ-19-2023