http://itmages.ru/image/view/2371176/41142116
Так же написал вот такую программу в С++ для расчёта угла открытия.
- Код: Выделить всё • Развернуть
- #include <tchar.h>
 #include <stdio.h>
 #include <iostream.h>
 #include <math.h>
 int _tmain(int argc, _TCHAR* argv[])
 {
 float x1,x2;
 cout«"vvedite x1\n";
 cin»x1;
 cout«"vvedite x2\n";
 cin»x2;
 float m1,m2,m4,m5;
 // внутри
 // первое значение
 if (x1<=20)
 {
 m1=1;
 }
 if (x1>20 && x1<=22)
 {
 m1=((22-x1)/(22-20));
 }
 if (x1>22 && x1<=28)
 {
 m1=0;
 }
 if (x1>28 && x1<=30)
 {
 m1=((30-x1)/(30-28));
 }
 if (x1>30)
 {
 m1=1;
 }
 // Второе значение
 if (x1<=20)
 {
 m2=0;
 }
 if (x1>20 && x1<=22)
 {
 m2=(x1-20)/(22-20);
 }
 if (x1>22 && x1<=28)
 {
 m2=1;
 }
 if (x1>28 && x1<=30)
 {
 m2=((x1-28)/(30-28));
 }
 if (x1>30)
 {
 m2=0;
 }
 // снаружи
 // первое значение
 if (x2<=10)
 {
 m4=1;
 }
 if (x2>10 && x2<=20)
 {
 m4=((20-x2)/(20-10));
 }
 if (x2>20 && x2<=30)
 {
 m4=((30-x2)/(30-20));
 }
 if (x2>30)
 {
 m4=1;
 }
 // Второе значение
 if (x2<=10)
 {
 m5=0;
 }
 if (x2>10 && x2<=20)
 {
 m5=(x2-10)/(20-10);
 }
 if (x2>20 && x2<=30)
 {
 m5=(x2-20)/(30-20);
 }
 if (x2>30)
 {
 m5=1;
 }
 // поиск минимума и максимума внутри
 float p1,p2,p3,p4,p5,p6;
 if (x1<=20)
 {
 p1=m2;
 }
 else {p1=0;}
 if (x1>20 && x1<=30)
 {
 if (m1>m2)
 {
 p2=m1;
 }
 else
 {
 p2=m2;
 }
 }
 if (x1>30)
 {
 p3=m1;
 }
 else {p3=0;}
 // поиск минимума и максимума снаружи
 if (x2<=10)
 {
 p4=m5;
 }
 else {p4=0;}
 if (x2>10 && x2<=30)
 {
 if (m4<m5)
 {
 p5=m4;
 }
 else
 {
 p5=m5;
 }
 }
 if (x2>30)
 {
 p6=m4;
 }
 else {p6=0;}
 // внутри холодно
 float a;
 if (x1<=20 && x2<=10)
 {
 a=(p1*p4*0)/(p1+p4);
 }
 if (x1<=20 && x2>10 && x2<=20)
 {
 a=(p1*p4*0+p1*p5*25)/(p1+p4+p5);
 }
 if (x1<=20 && x2>30 )
 {
 a=(p1*p4*0+p1*p5*25+p1*p6*50)/(p1+p4+p5+p6);
 }
 // внутри средняя
 if (x1>20 && x1<=30 && x2<=10)
 {
 a=(p2*p4*25)/(p2+p4);
 }
 if (x1>20 && x1<=30 && x2>10 && x2<=20)
 {
 a=(p2*p4*25+p2*p5*50)/(p2+p4+p5);
 }
 if (x1>20 && x1<=30 && x2>30 )
 {
 a=(p2*p4*25+p2*p5*50+p2*p6*75)/(p2+p4+p5+p6);
 }
 // внутри жарко
 if (x1>30 && x2<=10)
 {
 a=(p3*p4*50)/(p3+p4);
 }
 if (x1>30 && x2>10 && x2<=20)
 {
 a=(p3*p4*50+p3*p5*75)/(p3+p4+p5);
 }
 if (x1>30 && x2>30 )
 {
 a=(p3*p4*50+p3*p5*75+p3*p6*100)/(p3+p4+p5+p6);
 }
 // снаружи холодно
 if (x1<=10 && x2<=10)
 {
 a=(p4*p1*0)/(p1+p4);
 }
 if (x1>20 && x1<=30 && x2<=10)
 {
 a=(p4*p1*0+p4*p2*25)/(p4+p1+p2);
 }
 if (x1>30 && x2<=10 )
 {
 a=(p4*p1*0+p4*p2*25+p4*p3*50)/(p4+p1+p2+p3);
 }
 // снаружи средняя
 if (x1<=20 && x2>10 && x2<=30)
 {
 a=(p1*p5*25)/(p1+p5);
 }
 if (x2>10 && x2<=30 && x1>20 && x1<=30)
 {
 a=(p5*p1*25+p5*p2*50)/(p1+p2+p5);
 }
 if (x2>10 && x2<=30 && x1>30 )
 {
 a=(p5*p1*25+p5*p2*50+p5*p3*75)/(p5+p1+p2+p3);
 // снаружи жарко
 if (x1<=10 && x2>30)
 {
 a=(p6*p1*50)/(p6+p1);
 }
 if (x1>10 && x1<=30 && x2>30)
 {
 a=(p6*p1*50+p6*p2*75)/(p6+p1+p2);
 }
 if (x1>30 && x2>30 )
 {
 a=(p6*p1*50+p6*p2*75+p3*p6*100)/(p3+p1+p2+p6);
 }
 cout«"m1="«m1«"\n";
 cout«"m2="«m2«"\n";
 cout«"m4="«m4«"\n";
 cout«"m5="«m5«"\n";
 cout«"p1="«p1«"\n";
 cout«"p2="«p2«"\n";
 cout«"p3="«p3«"\n";
 cout«"p4="«p4«"\n";
 cout«"p5="«p5«"\n";
 cout«"p6="«p6«"\n";
 cout«"a="«a«"\n";
 system ("pause");
 return 0;
 }
Подскажите как её перенести адекватно в ардуино. Кроме того, сталкивался ли кто с программированием нечёткой логики в Ардуино, если да то как вы это реализовали. Буду очень признателен, если поможете.





