arduino
Добавлено: Ср дек 03, 2014 17:41:21
здравствуйте всем, у меня такая проблема. разрабатываю устройство которое должно будет принимать на вход аналоговый сигнал(он же U), а затем используя след формулы высчитывать 6 углов. вот формулы: угол1= U*sinA угол2= U*sin(A+120) угол3= U*sin(A+240) угол4= U*sin(A*30) угол5= U*sin(A*30+120) угол6= U*sin(A*30+240), A здесь это переменная которая изменяется в пределах 0-360 с шагом. вот сам скетч
int inPin = A5; // select the input pin for the potentiometer
int ledPin = 13; // select the pin for the LED
int inValue = 0;
volatile float alfa_grad = 0;
float alfa_rad = 0;
byte modul;
byte modul_1;
byte modul_2;
byte modul_3;
byte modul_4;
byte modul_5;
void setup() {
// declare the Pin as an OUTPUT:
pinMode(3, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(A5, INPUT);
Serial.begin(115200); // connect to the serial port
Serial.println("PWM Test");
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = 312.5;
TCCR1B |= (1 << WGM12);
TCCR1B |= (1 << CS10);
TCCR1B |= (0 << CS11);
TCCR1B |= (1 << CS12);
TIMSK1 |= (1 << OCIE1A); // Разрешить прерывание по совпадению
}
ISR(TIMER1_COMPA_vect){
alfa_grad += 0.36;
if(alfa_grad > 359 && alfa_grad < 361)
{
alfa_grad = 0;
}
}
void loop() {
alfa_rad = (float)alfa_grad*3.14/180;
inValue = map (analogRead(inPin),0,1023,0,255) - 127;
modul = map (((float)inValue*sin(alfa_rad))*100,-12700,12700,-127,127) + 127;
modul_1 = map (((float)inValue*sin(alfa_rad + 2.09))*100,-12700,12700,-127,127) + 127;
modul_2 = map (((float)inValue*sin(alfa_rad + 4.18))*100,-12700,12700,-127,127) + 127;
analogWrite (3,modul);
analogWrite (5,modul_1);
analogWrite (6,modul_2);
volatile float alfa = alfa_rad;
if (alfa >= 6.2832)
{
do {alfa = alfa - 6.2832;}
while (alfa < 6.2832);
}
modul_3 = map (((float)inValue*sin(alfa*4.77))*100,-12700,12700,-127,127) + 127;
modul_4 = map (((float)inValue*sin(alfa*4.77 + 2.09))*100,-12700,12700,-127,127) + 127;
modul_5 = map (((float)inValue*sin(alfa*4.77 + 4.18))*100,-12700,12700,-127,127) + 127;
analogWrite (9,modul_3);
analogWrite (10,modul_4);
analogWrite (11,modul_5);
// if ((int)alfa_grad % 15) { подача на на двигатель для одного шага
//}
}
так вот собственно в чем проблема, Почему не выводит сигнал на 9 и 10 ногах?? если кто шарит, то подскажите пожалуйста. заранее спасибо
int inPin = A5; // select the input pin for the potentiometer
int ledPin = 13; // select the pin for the LED
int inValue = 0;
volatile float alfa_grad = 0;
float alfa_rad = 0;
byte modul;
byte modul_1;
byte modul_2;
byte modul_3;
byte modul_4;
byte modul_5;
void setup() {
// declare the Pin as an OUTPUT:
pinMode(3, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(A5, INPUT);
Serial.begin(115200); // connect to the serial port
Serial.println("PWM Test");
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = 312.5;
TCCR1B |= (1 << WGM12);
TCCR1B |= (1 << CS10);
TCCR1B |= (0 << CS11);
TCCR1B |= (1 << CS12);
TIMSK1 |= (1 << OCIE1A); // Разрешить прерывание по совпадению
}
ISR(TIMER1_COMPA_vect){
alfa_grad += 0.36;
if(alfa_grad > 359 && alfa_grad < 361)
{
alfa_grad = 0;
}
}
void loop() {
alfa_rad = (float)alfa_grad*3.14/180;
inValue = map (analogRead(inPin),0,1023,0,255) - 127;
modul = map (((float)inValue*sin(alfa_rad))*100,-12700,12700,-127,127) + 127;
modul_1 = map (((float)inValue*sin(alfa_rad + 2.09))*100,-12700,12700,-127,127) + 127;
modul_2 = map (((float)inValue*sin(alfa_rad + 4.18))*100,-12700,12700,-127,127) + 127;
analogWrite (3,modul);
analogWrite (5,modul_1);
analogWrite (6,modul_2);
volatile float alfa = alfa_rad;
if (alfa >= 6.2832)
{
do {alfa = alfa - 6.2832;}
while (alfa < 6.2832);
}
modul_3 = map (((float)inValue*sin(alfa*4.77))*100,-12700,12700,-127,127) + 127;
modul_4 = map (((float)inValue*sin(alfa*4.77 + 2.09))*100,-12700,12700,-127,127) + 127;
modul_5 = map (((float)inValue*sin(alfa*4.77 + 4.18))*100,-12700,12700,-127,127) + 127;
analogWrite (9,modul_3);
analogWrite (10,modul_4);
analogWrite (11,modul_5);
// if ((int)alfa_grad % 15) { подача на на двигатель для одного шага
//}
}
так вот собственно в чем проблема, Почему не выводит сигнал на 9 и 10 ногах?? если кто шарит, то подскажите пожалуйста. заранее спасибо