Да,! томит даже не кол-во поз человечка - одинаковость времени переключения.Сейчас код подправил чуть:
Код:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Arduino UNO
//
////////////////////////
//
//программа акустического переключения танцующего человечка//
unsigned int x=0;
unsigned int k=0;
unsigned int i=0;
unsigned int z=10;
int tabl[120]={1,1,0,0, 0,0,0,0, 1,1,0,0, 0,0,0,0, 0,0,1,1, 0,0,0,0, 0,0,1,1, 1,1,0,0, 0,0,1,1, 1,1,0,0,
1,0,1,0, 0,1,0,1, 1,0,1,0, 0,1,0,1, 1,1,1,1, 0,0,0,0, 1,1,1,1, 0,1,1,0, 1,0,0,1, 0,0,0,0,
0,1,0,0, 0,0,0,0, 1,0,0,0, 0,0,0,0, 0,1,0,0, 0,0,0,0, 1,0,0,0, 0,0,0,0, 1,0,1,0, 0,1,0,1};// данные для поз человечка
void setup()
{
pinMode(6, OUTPUT); // ШИМ канал сигнала для левой ноги /
digitalWrite(6,LOW);
pinMode(7, OUTPUT); //цифровой канал сигнала для левой ноги /
digitalWrite(7,LOW);
pinMode(8, OUTPUT); //цифровой канал сигнала для правой ноги /
digitalWrite(8,LOW);
pinMode(9, OUTPUT); //ШИМ канал сигнала для правой ноги /
digitalWrite(9,LOW);
pinMode(2, OUTPUT); //цифровой канал сигнала для левой руки /
digitalWrite(2,LOW);
pinMode(3, OUTPUT); //ШИМ канал сигнала для левой руки /
digitalWrite(3,LOW);
pinMode(4, OUTPUT); //цифровой канал сигнала для правой руки /
digitalWrite(4,LOW);
pinMode(5, OUTPUT); //ШИМ канал сигнала для правой руки /
digitalWrite(5,LOW);
pinMode(10, OUTPUT); //ШИМ канал сигнала для туловища /
digitalWrite(10,LOW);
pinMode(A0, INPUT); // подключение датчика/
}
void loop()
{
x=analogRead(A0);// считывание данных с датчика
if (x<=650)//если звуковой сигнал получен...
{
if(x>=250&x<=450){z=255;k=k+3;}//если сигнал сильный...
if(x>450&x<=550){z=50;k=k+2;}//если сигнал средний...
if(x>550){z=10;k=k+1;}//если сигнал слабый...
if(i>=120){i=0;}//условие запрета на выход за границы массива
digitalWrite(2,tabl[i]);digitalWrite(4,tabl[i+1]);digitalWrite(7,tabl[i+2]);digitalWrite(8,tabl[i+3]);//по таблице (массиву) меняем логическое состояние выходов...
if(tabl[i]==0){analogWrite(3,z);}else{analogWrite(3,255-z);}
if(tabl[i+1]==0){analogWrite(5,z);}else{analogWrite(5,255-z);}
if(tabl[i+2]==0){analogWrite(6,z);}else{analogWrite(6,255-z);}
if(tabl[i+3]==0){analogWrite(9,z);}else{analogWrite(9,255-z);}
analogWrite(10,z);
delay(30);
if (k>=12){i=i+4;k=1;}//условие смены позы в танце
}
}
//
// Конец /
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Но всё равно монотонно получается...Что касается матрицы. 8*8 маловато для человечка даже в 16 позах. Даже смайлик скромненький.
Получилось бы наверное, в матрице 16 на 16, но с Ардуино УНО у меня пока "жабры коротки". Сын предложил сделать в 3D "по технологии LED куба" индикатор на N позиций, но пока тоже мысли в разброде...