Помогите новичку с кодом
- Войдите на сайт для отправки комментариев
Пнд, 10/03/2014 - 09:29
Всем привет!!!
Вот пытаюсь подружить Arduino due с пультом от самалетика (модель пульта FS-CT6B), что-бы управлять платформой с двумя двигателями...
Пульт 6-канальный, на приемнике выдает импульсы с частотой от 1500 до 2000мкс....
Что-бы принимать эти сигналы использовал прерывание...
Если посмотреть в терминале через serial соединение она прекрасно работает, а если подключить к платформе то начинает тупить(крутиться, вертиться, идет прямо взяд сама по себе)
volatile unsigned long Time1=0; volatile unsigned long Time2=0; volatile unsigned long Time3=0; volatile unsigned long Time4=0; volatile unsigned long Time5=0; long maxi1 = 1877; long sredni1 = 1537; long mini1 = 1185; long value1 = 0; long maxi2 = 1877; long sredni2 = 1537; long mini2 = 1185; long value2 = 0; long resultat1 = 0; long resultat2 = 0; boolean flag1=1; boolean flag2=1; boolean flag3=1; boolean flag4=1; int motor_speed1 = 0; int motor_speed2 = 0; int Motor_speed_pin1 = 7; int Motor_speed_pin2 = 8; int Motor_pin1=26; int Motor_pin2=28; int Motor_pin3=30; int Motor_pin4=32; int sL; int sR; void setup() { attachInterrupt(22, Start, CHANGE); attachInterrupt(24, Vector, CHANGE); pinMode(Motor_speed_pin1,OUTPUT); pinMode(Motor_speed_pin2,OUTPUT); pinMode(Motor_pin1,OUTPUT); pinMode(Motor_pin2,OUTPUT); pinMode(Motor_pin3,OUTPUT); pinMode(Motor_pin4,OUTPUT); digitalWrite(Motor_pin1,0); digitalWrite(Motor_pin2,0); digitalWrite(Motor_pin3,0); digitalWrite(Motor_pin4,0); analogWrite(Motor_speed_pin1,0); analogWrite(Motor_speed_pin2,0); Time5=millis(); } void spede1(long value1){ //декодирование сигнали из пульты, ответ выводить в resultat1 в диапазон от0 до 255, если flag3=1 то это значить что мы идем вперед if (value1 != 0) { value1 = constrain(value1,mini1,maxi1); if (value1 >= sredni1) { value1 = map(value1,sredni1,maxi1,0,255); flag3=1;} else { value1 = map(value1,sredni1,mini1,0,255); flag3=0;} if (value1>70) resultat1 = value1; else resultat1=0; } } void spede2(long value2){ //декодирование сигнали из пульты, ответ выводить в resultat2 в диапазон от0 до 255, если flag4=1 то это значить что мы повернули направо if (value2 != 0) { value2 = constrain(value2,mini2,maxi2); if (value2 >= sredni2) { value2 = map(value2,sredni2,maxi2,0,255); flag4=1;} else { value2 = map(value2,sredni2,mini2,0,255); flag4=0;} if (value2>70) resultat2 = value2; else resultat2=0; } } void Vector(){ //получение сигнала из пульта сигнала if (flag2==1) { Time3=micros(); flag2=0;} else { Time4=micros(); value2=Time4-Time3; flag2 = 1; } } void Start(){ //получение сигнала из пульта сигнала if (flag1==1) { Time1=micros(); flag1=0;} else { Time2=micros(); value1=Time2-Time1; flag1 = 1; } } void Lev_motor(int sL){ //функция указание направления движение мотора if (sL==1){ digitalWrite(Motor_pin1,1); digitalWrite(Motor_pin2,0); } else{ if (sL==2){ digitalWrite(Motor_pin1,0); digitalWrite(Motor_pin2,1); } else{ if (sL==0){ digitalWrite(Motor_pin1,0); digitalWrite(Motor_pin2,0); } } } } void Right_motor(int sR){ //функция указание направления движение мотора if (sR==1){ digitalWrite(Motor_pin3,1); digitalWrite(Motor_pin4,0); } else{ if (sR==2){ digitalWrite(Motor_pin3,0); digitalWrite(Motor_pin4,1); } else{ if (sR==0){ digitalWrite(Motor_pin3,0); digitalWrite(Motor_pin4,0); } } } } void loop() { spede1(value1); spede2(value2); if (resultat1==0){ if (resultat2==0){ Lev_motor(0); Right_motor(0); } else{ if (flag4==1){ Lev_motor(1); Right_motor(2); } else{ Lev_motor(2); Right_motor(1); } } } else { if (resultat2==0){ if (flag3==1){ Lev_motor(1); Right_motor(1); } else{ Lev_motor(2); Right_motor(2); } } else{ if (flag3==1) { if (flag4==1){ Lev_motor(1); Right_motor(0); } else{ Lev_motor(0); Right_motor(1); } } else{ if (flag4==1){ Lev_motor(0); Right_motor(2); } else{ Lev_motor(2); Right_motor(0); } } } } }
Добрый день. А не подскажете еще более новичку, что означают "22" и "24" в строках
?
Добрый день. А не подскажете еще более новичку, что означают "22" и "24" в строках
?
http://arduino.ru/Reference/AttachInterrupt
Внимательно прочитал... раз, наверное, в седьмой.
Задает функцию обработки внешнего прерывания, то есть функция, которая будет вызвана по внешнему прерыванию. Если до это была задана другая функция, то назначается новая. Большинство контроллеров Arduino умеют обрабатывать до двух внешних прерываний, пронумерованных так: 0 (на цифровом порту 2) и 1 (на цифровом порту 3). Arduino Mega обрабатывает дополнительно еще четыра прерывания: 2 (порт 21), 3 (порт 20), 4 (порт 19) и 5 (порт 18).
где тут число "22" или "23" не вижу. Может потыкаете носом?
"The Arduino Due board has powerful interrupt capabilities that allows you to attach an interrupt function on all available pins. You can directly specify the pin number in attachInterrupt()."
http://www.arduino.cc/en/Reference/AttachInterrupt#.UyCa-_l_v_E
P.S. Подскажите, не испытываете ли вы сложностей с тем, что ваши пины у ардуины 3.3В а не 5В? Сам выбираю ардуину...
Ну 22 и 23 быть не может,по крайней мере у Меги ,но там в первом абзаце написано все. это нумерация выводов с возможностью прерываниея.
Это оказывается для Due... Понятно. Спасибо!
не хотел из-за мелочи создавать тему
подключил пьезаизлучатель к ардуине, тонкая пластинка пару см в диаметре
устройство будет типа сигнализации, как заставить его громко и противно верещать?
=
Надо подавать на него сигнал, который заставит пластину вибрировать.
до ътого я как-то додумался сам
пользовался tone и еще какими-то функциями,пищит, хрипит, надо чтобы пищал громко и противно
Видимо, нужно подавать сигнал на пластину, который заставит ее пищать громко и противно. Какой сигнал пластина преобразует в громкий и противный писк, нужно узнать у производителя. Обычно на электронные изделия есть Datasheet. Насколько я знаю, на этом форуме очень не много телепатов и ясновидящих.
спасибо, кэп
вопрос пока актуальный
2stels: жаль, что вы не понимаете намеков. Маркировочку вашей пластины сюда напишите, если самому лень искать даташит.