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;
}
Подскажите как её перенести адекватно в ардуино. Кроме того, сталкивался ли кто с программированием нечёткой логики в Ардуино, если да то как вы это реализовали. Буду очень признателен, если поможете.