Arduino - общие обсуждения
-
- Сообщения: 1430
- Зарегистрирован: Вс фев 19, 2012 7:18 am
- Имя: Фарид
- Откуда: Узбекистан Ташкент
- Поблагодарили: 1 раз
- Контактная информация:
Re: Arduino - общие обсуждения
Спасибо.И действительно из-за них.А с чем это связано?
Но всё ровно серва не работает((((
Думал что ИК приёмник не работает,прошил скеч считывания кода кнопок с пульта.Считал все кнопки ханово.
А серва так и не работает.
Но всё ровно серва не работает((((
Думал что ИК приёмник не работает,прошил скеч считывания кода кнопок с пульта.Считал все кнопки ханово.
А серва так и не работает.
-
- Сообщения: 286
- Зарегистрирован: Сб июн 06, 2015 3:26 pm
- Благодарил (а): 26 раз
- Поблагодарили: 10 раз
Re: Arduino - общие обсуждения
Из шаманства только могу предложить использовать библиотеку SofwareServoФедюнь писал(а):Спасибо.И действительно из-за них.А с чем это связано?
Но всё ровно серва не работает((((
Думал что ИК приёмник не работает,прошил скеч считывания кода кнопок с пульта.Считал все кнопки ханово.
А серва так и не работает.
Замените блок от начала до объявления переменных с сервами
Код: Выделить всё
//#include <Servo.h> // подключаем библиотеку для Servo
#include <SoftwareServo.h> // подключаем библиотеку для Servo
#include <IRremote.h> // подключаем СКАЧЕННУЮ библиотеку IRremote для ИК пульта
int RECV_PIN = 2; //вход ИК инфракрасного приемника (32H-Atmega168)
IRrecv irrecv(RECV_PIN);
decode_results results;
//Servo servo_1; //даём имена servo
//Servo servo_2;
SoftwareServo servo_1; //даём имена servo
SoftwareServo servo_2;
Код: Выделить всё
SoftwareServo::refresh();
-
- Сообщения: 1430
- Зарегистрирован: Вс фев 19, 2012 7:18 am
- Имя: Фарид
- Откуда: Узбекистан Ташкент
- Поблагодарили: 1 раз
- Контактная информация:
Re: Arduino - общие обсуждения
А где я возьму такую библиотеку? #include <SoftwareServo.h> // подключаем библиотеку для Servo
- LABA
- Сообщения: 1616
- Зарегистрирован: Пт мар 20, 2009 9:25 pm
- Откуда: Питер
- Благодарил (а): 32 раза
- Поблагодарили: 7 раз
- Контактная информация:
Re: Arduino - общие обсуждения
http://playground.arduino.cc/ComponentLib/ServoФедюнь писал(а):А где я возьму такую библиотеку? #include <SoftwareServo.h> // подключаем библиотеку для Servo
-
- Сообщения: 1430
- Зарегистрирован: Вс фев 19, 2012 7:18 am
- Имя: Фарид
- Откуда: Узбекистан Ташкент
- Поблагодарили: 1 раз
- Контактная информация:
Re: Arduino - общие обсуждения
Arduino: 1.6.7 (Windows XP), Плата:"Arduino/Genuino Uno"
In file included from C:\Documents and Settings\Admin\Мои документы\Arduino\sketch_feb19a\sketch_feb19a.ino:7:0:
C:\Program Files\Arduino\libraries\SoftwareServo/SoftwareServo.h:4:22: fatal error: WProgram.h: No such file or directory
#include <WProgram.h>
^
compilation terminated.
exit status 1
Ошибка компиляции.
Это сообщение будет содержать больше информации чем
"Отображать вывод во время компиляции"
включено в Файл > Настройки
In file included from C:\Documents and Settings\Admin\Мои документы\Arduino\sketch_feb19a\sketch_feb19a.ino:7:0:
C:\Program Files\Arduino\libraries\SoftwareServo/SoftwareServo.h:4:22: fatal error: WProgram.h: No such file or directory
#include <WProgram.h>
^
compilation terminated.
exit status 1
Ошибка компиляции.
Это сообщение будет содержать больше информации чем
"Отображать вывод во время компиляции"
включено в Файл > Настройки
-
- Сообщения: 286
- Зарегистрирован: Сб июн 06, 2015 3:26 pm
- Благодарил (а): 26 раз
- Поблагодарили: 10 раз
Re: Arduino - общие обсуждения
В этом файле попробуйте заменитьФедюнь писал(а): C:\Program Files\Arduino\libraries\SoftwareServo/SoftwareServo.h
Код: Выделить всё
#include <WProgram.h>
Код: Выделить всё
#include <Arduino.h>
-
- Сообщения: 1430
- Зарегистрирован: Вс фев 19, 2012 7:18 am
- Имя: Фарид
- Откуда: Узбекистан Ташкент
- Поблагодарили: 1 раз
- Контактная информация:
Re: Arduino - общие обсуждения
#include <SoftwareServo.h> // подключаем библиотеку для Servo
//#include <Servo.h> // подключаем библиотеку для Servo
#include <IRremote.h> // подключаем СКАЧЕННУЮ библиотеку IRremote для ИК пульта
int RECV_PIN = 2; //вход ИК инфракрасного приемника (32H-Atmega168)
IRrecv irrecv(RECV_PIN);
decode_results results;
SoftwareServo servo_1; //даём имена servo
SoftwareServo servo_2;
//Servo servo_1; //даём имена servo
//Servo servo_2;
//Pin для светодиодов,светодиоды для визуального контроля за процессом
int ledPin_1 = 15; //PIN 15, на Arduino Uno, Atmega328 (A1)(24H-Atmega168)
int ledPin_2 = 16; // (25Н-Atmega168)
int ledPin_3 = 17; // (26H-Atmega168)
int ledPin_4 = 18; // (27H-Atmega168)
int timer_ledPIN = 14; //индикация таймера //PIN 14, на Arduino Uno, Atmega328 (A0) (23H-Atmega168)
int a_1;// промежуточная переменная для хранения (увеличенного диапазона от 0 до 30000)значений (увеличения или уменьшения)PWM,
int a_2;// с последующей конвертации в переменную(val) диапазон градусов поворота доступных для servo.
int e_1;// переменные для экономии ресурсов ОЗУ EEPROM
int e_2;
//переменные для конвертации (увеличенного диапазона значений от 0 до 30000) (a_1;),(a_2;),в значения требуемые для поворота servo.
int val_1;
int val_2;
int speed_PWM;//переменная для (увеличения или уменьшения)скорости поворота servo.
unsigned long eventTime=0;//переменная для (увеличения или уменьшения)скорости поворота servo.
void setup() {
irrecv.enableIRIn(); // включить ИК приёмник
servo_1.attach(9); // серво подключён на цифровой вход (pin 9) (13H-Atmega168)
servo_2.attach(10); // серво подключён на цифровой вход (pin 10) (14H-Atmega168)
pinMode(ledPin_1, OUTPUT);
pinMode(ledPin_2, OUTPUT);
pinMode(ledPin_3, OUTPUT);
pinMode(ledPin_4, OUTPUT);
pinMode(timer_ledPIN, OUTPUT);
a_1=1;
a_2=1;
speed_PWM=1;//Чем меньше значение тем меньше скорость
}
void loop() {
if (digitalRead(RECV_PIN) == LOW)
eventTime=millis(),digitalWrite(timer_ledPIN, HIGH);
if(millis()-eventTime>100) digitalWrite(timer_ledPIN, LOW),digitalWrite(ledPin_1, LOW),digitalWrite(ledPin_2, LOW),
digitalWrite(ledPin_3, LOW),digitalWrite(ledPin_4, LOW);
//если ledPin_1) ==, выставляем ограничение для переменной(a_1) до (&& a_1<30000).и Начинаем увеличивать
// значения переменной(a_1) прибавляем на значение переменной speed_PWM,
//и также выставляем ограничение при убывании (&& a_1>0)
if(digitalRead(ledPin_1) == HIGH && a_1<30000 ) a_1=a_1+speed_PWM;
if(digitalRead(ledPin_2) == HIGH && a_1>0 ) a_1=a_1-speed_PWM;
val_1 = a_1;
val_1 = map(val_1, 0, 30000, 1, 179);//читаем значение (a_1) и конвертируем его в val_1, то бишь в значение поворота в градусах для servo.
servo_1.write(val_1); // правильно было бы конвертировать в, (от 0, до 180) градусов, но мои дешёвые servo доходя до краёв
//делаем тоже самое и для servo_2
if(digitalRead(ledPin_3) == HIGH && a_2<30000 ) a_2=a_2+speed_PWM;
if(digitalRead(ledPin_4) == HIGH && a_2>0 ) a_2=a_2-speed_PWM;
val_2 = a_2;
val_2 = map(val_2, 0, 30000, 1, 179);
servo_2.write(val_2); //записываем значения val_2 в servo_2
//от (1 до 30.000), то перед записью в ячейку №1, делим значение переменной a_1 на 118 //(1, a_1/118)//
// и меняем значение переменной e_1=0;//
if(digitalRead(ledPin_1) == HIGH || digitalRead(ledPin_2)== HIGH)e_1=1;
if(digitalRead(ledPin_1) == LOW && digitalRead(ledPin_2)== LOW && e_1==1)(1, a_1/118),e_1=0;
if(digitalRead(ledPin_3) == HIGH || digitalRead(ledPin_4)== HIGH)e_2=1;
if(digitalRead(ledPin_3) == LOW && digitalRead(ledPin_4)== LOW && e_2==1)(2, a_2/118),e_2=0;
if (irrecv.decode(&results)) { // здесь считываем коды от ИК пульта
if(digitalRead(timer_ledPIN) == HIGH && (results.value == 0x1767AF71 ))digitalWrite(ledPin_1, HIGH); //(1767AF71) это код кнопки №1
if(digitalRead(timer_ledPIN) == HIGH && (results.value == 0x318A151 ))digitalWrite(ledPin_2, HIGH); // это код кнопки №2
if(digitalRead(timer_ledPIN) == HIGH && (results.value == 0xFCA418D1 ))digitalWrite(ledPin_3, HIGH); //это код кнопки №3
if(digitalRead(timer_ledPIN) == HIGH && (results.value == 0xAFD97D5 ))digitalWrite(ledPin_4, HIGH); //это код кнопки №4
irrecv.resume();
SoftwareServo::refresh();
}
}
Вобшем при нажатии любой кнопки серва едит только в одну сторону, не меняя скорость.
//#include <Servo.h> // подключаем библиотеку для Servo
#include <IRremote.h> // подключаем СКАЧЕННУЮ библиотеку IRremote для ИК пульта
int RECV_PIN = 2; //вход ИК инфракрасного приемника (32H-Atmega168)
IRrecv irrecv(RECV_PIN);
decode_results results;
SoftwareServo servo_1; //даём имена servo
SoftwareServo servo_2;
//Servo servo_1; //даём имена servo
//Servo servo_2;
//Pin для светодиодов,светодиоды для визуального контроля за процессом
int ledPin_1 = 15; //PIN 15, на Arduino Uno, Atmega328 (A1)(24H-Atmega168)
int ledPin_2 = 16; // (25Н-Atmega168)
int ledPin_3 = 17; // (26H-Atmega168)
int ledPin_4 = 18; // (27H-Atmega168)
int timer_ledPIN = 14; //индикация таймера //PIN 14, на Arduino Uno, Atmega328 (A0) (23H-Atmega168)
int a_1;// промежуточная переменная для хранения (увеличенного диапазона от 0 до 30000)значений (увеличения или уменьшения)PWM,
int a_2;// с последующей конвертации в переменную(val) диапазон градусов поворота доступных для servo.
int e_1;// переменные для экономии ресурсов ОЗУ EEPROM
int e_2;
//переменные для конвертации (увеличенного диапазона значений от 0 до 30000) (a_1;),(a_2;),в значения требуемые для поворота servo.
int val_1;
int val_2;
int speed_PWM;//переменная для (увеличения или уменьшения)скорости поворота servo.
unsigned long eventTime=0;//переменная для (увеличения или уменьшения)скорости поворота servo.
void setup() {
irrecv.enableIRIn(); // включить ИК приёмник
servo_1.attach(9); // серво подключён на цифровой вход (pin 9) (13H-Atmega168)
servo_2.attach(10); // серво подключён на цифровой вход (pin 10) (14H-Atmega168)
pinMode(ledPin_1, OUTPUT);
pinMode(ledPin_2, OUTPUT);
pinMode(ledPin_3, OUTPUT);
pinMode(ledPin_4, OUTPUT);
pinMode(timer_ledPIN, OUTPUT);
a_1=1;
a_2=1;
speed_PWM=1;//Чем меньше значение тем меньше скорость
}
void loop() {
if (digitalRead(RECV_PIN) == LOW)
eventTime=millis(),digitalWrite(timer_ledPIN, HIGH);
if(millis()-eventTime>100) digitalWrite(timer_ledPIN, LOW),digitalWrite(ledPin_1, LOW),digitalWrite(ledPin_2, LOW),
digitalWrite(ledPin_3, LOW),digitalWrite(ledPin_4, LOW);
//если ledPin_1) ==, выставляем ограничение для переменной(a_1) до (&& a_1<30000).и Начинаем увеличивать
// значения переменной(a_1) прибавляем на значение переменной speed_PWM,
//и также выставляем ограничение при убывании (&& a_1>0)
if(digitalRead(ledPin_1) == HIGH && a_1<30000 ) a_1=a_1+speed_PWM;
if(digitalRead(ledPin_2) == HIGH && a_1>0 ) a_1=a_1-speed_PWM;
val_1 = a_1;
val_1 = map(val_1, 0, 30000, 1, 179);//читаем значение (a_1) и конвертируем его в val_1, то бишь в значение поворота в градусах для servo.
servo_1.write(val_1); // правильно было бы конвертировать в, (от 0, до 180) градусов, но мои дешёвые servo доходя до краёв
//делаем тоже самое и для servo_2
if(digitalRead(ledPin_3) == HIGH && a_2<30000 ) a_2=a_2+speed_PWM;
if(digitalRead(ledPin_4) == HIGH && a_2>0 ) a_2=a_2-speed_PWM;
val_2 = a_2;
val_2 = map(val_2, 0, 30000, 1, 179);
servo_2.write(val_2); //записываем значения val_2 в servo_2
//от (1 до 30.000), то перед записью в ячейку №1, делим значение переменной a_1 на 118 //(1, a_1/118)//
// и меняем значение переменной e_1=0;//
if(digitalRead(ledPin_1) == HIGH || digitalRead(ledPin_2)== HIGH)e_1=1;
if(digitalRead(ledPin_1) == LOW && digitalRead(ledPin_2)== LOW && e_1==1)(1, a_1/118),e_1=0;
if(digitalRead(ledPin_3) == HIGH || digitalRead(ledPin_4)== HIGH)e_2=1;
if(digitalRead(ledPin_3) == LOW && digitalRead(ledPin_4)== LOW && e_2==1)(2, a_2/118),e_2=0;
if (irrecv.decode(&results)) { // здесь считываем коды от ИК пульта
if(digitalRead(timer_ledPIN) == HIGH && (results.value == 0x1767AF71 ))digitalWrite(ledPin_1, HIGH); //(1767AF71) это код кнопки №1
if(digitalRead(timer_ledPIN) == HIGH && (results.value == 0x318A151 ))digitalWrite(ledPin_2, HIGH); // это код кнопки №2
if(digitalRead(timer_ledPIN) == HIGH && (results.value == 0xFCA418D1 ))digitalWrite(ledPin_3, HIGH); //это код кнопки №3
if(digitalRead(timer_ledPIN) == HIGH && (results.value == 0xAFD97D5 ))digitalWrite(ledPin_4, HIGH); //это код кнопки №4
irrecv.resume();
SoftwareServo::refresh();
}
}
Вобшем при нажатии любой кнопки серва едит только в одну сторону, не меняя скорость.
-
- Сообщения: 286
- Зарегистрирован: Сб июн 06, 2015 3:26 pm
- Благодарил (а): 26 раз
- Поблагодарили: 10 раз
Re: Arduino - общие обсуждения
Это не критично, но SoftwareServo вы оформили в ветку опроса кнопок. Нужно еще на одну строку вниз, между двумя закрывающими скобками.
судя по коду серва и не должа менять скорость.
смысл скетча - ик пультом управлять 2мя сервами с помощью 4х кнопок. Кпопку нажал - серва двигается, кнопку отпустил - серва замерла. Нажал соседнюю кнопку - серва поехала обратно.
судя по коду серва и не должа менять скорость.
смысл скетча - ик пультом управлять 2мя сервами с помощью 4х кнопок. Кпопку нажал - серва двигается, кнопку отпустил - серва замерла. Нажал соседнюю кнопку - серва поехала обратно.
-
- Сообщения: 1430
- Зарегистрирован: Вс фев 19, 2012 7:18 am
- Имя: Фарид
- Откуда: Узбекистан Ташкент
- Поблагодарили: 1 раз
- Контактная информация:
Re: Arduino - общие обсуждения
if(digitalRead(timer_ledPIN) == HIGH && (results.value == 0xFCA418D1 ))digitalWrite(ledPin_3, HIGH); //это код кнопки №3
if(digitalRead(timer_ledPIN) == HIGH && (results.value == 0xAFD97D5 ))digitalWrite(ledPin_4, HIGH); //это код кнопки №4
irrecv.resume();
}
SoftwareServo::refresh();
}
Я понял что надо так сделать.Правильно я понял?
Серва по прежнему не реагирует ни на какую кнопку.Как в первый раз на большой скорости перевелась в крайнее положение так там и стоит.
if(digitalRead(timer_ledPIN) == HIGH && (results.value == 0xAFD97D5 ))digitalWrite(ledPin_4, HIGH); //это код кнопки №4
irrecv.resume();
}
SoftwareServo::refresh();
}
Я понял что надо так сделать.Правильно я понял?
Серва по прежнему не реагирует ни на какую кнопку.Как в первый раз на большой скорости перевелась в крайнее положение так там и стоит.