Помогите дописать скетч
- Войдите на сайт для отправки комментариев
Ср, 22/02/2017 - 15:46
Помогите подправить код так, чтоб нажал отпустил кнопку подключенную к D4 передатчика выход А0 приемника ставал высоким. Еще раз нажал отпустил низким. Пока только работает так, нажал А0 высокий уровень отпустил низкий.
Передатчик
[code] #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> #define CE_PIN 9 #define CSN_PIN 10 const uint64_t pipe = 0xE8E8F0F0E1LL; RF24 radio(CE_PIN, CSN_PIN); int datos[4]; void setup(void) { radio.begin(); radio.openWritingPipe( pipe); Serial.begin(9600); pinMode(4, INPUT); digitalWrite(4, HIGH); } void loop() { datos[0] = analogRead(1); datos[1] = analogRead(0); datos[2] = analogRead(4);//крутилка ствола datos[2] = map(datos[2],0,1023,0,180); datos[3] = digitalRead(4);//кнопка D4 bool ok = radio.write(datos, sizeof(datos)); Serial.println(datos[0]); } [/code]
Приемник
[code] #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> #include <Servo.h> Servo myservo1; const uint64_t pipe = 0xE8E8F0F0E1LL; #define CE_PIN 9 #define CSN_PIN 10 RF24 radio(CE_PIN, CSN_PIN); int datos[4]; int pwm = 0; bool directionL; bool directionR; // направление вращение для L298N byte valueL; byte valueR; // значение ШИМ M1, M2 (0-255) int mLeft; int mRight; long time = 0; long debounce = 300; int pos; int fspeed; // движение вперед int bspeed; // движение назад int steer; const int in1 = 7; // direction pin 1 const int in2 = 6; // direction pin 2 const int in3 = 4; // direction pin 1 const int in4 = 2; // direction pin 2 const int ena = 5; // PWM pin to change speed const int enb = 3; byte IsConnect; void setup() { pinMode(in1, OUTPUT); // connection to L298n pinMode(in2, OUTPUT); // connection to L298n pinMode(ena, OUTPUT); // connection to L298n pinMode(in3, OUTPUT); // connection to L298n pinMode(in4, OUTPUT); // connection to L298n pinMode(enb, OUTPUT); // connection to L298n pinMode(14, OUTPUT); myservo1.attach(8); radio.begin(); Serial.begin(9600); radio.openReadingPipe(1, pipe); radio.startListening(); } int MotoL, MotoR; int ValStickX, ValStickY; void loop() { uint8_t numero_canal; if ( radio.available()) { radio.read(datos, sizeof(datos)); IsConnect = HIGH; } else{ IsConnect = LOW; } myservo1.write(datos[2]); digitalWrite(14, !datos[3]); int val_x = datos[0]; int val_y = datos[1]; ValStickX = map(val_x, 0, 1023, 254, -254); ValStickY = map(val_y, 0, 1023, 254, -254); if (abs(ValStickX) < 20) { ValStickX = 0; } if (abs(ValStickY) < 20) { ValStickY = 0; } MotoL = ValStickY - (ValStickX / 1.2); MotoR = ValStickY + (ValStickX / 1.2); if (IsConnect == LOW){MotoL = 0;} if (IsConnect == LOW){MotoR = 0;} if (MotoL > 255) { MotoL = 255; } if (MotoR > 255) { MotoR = 255; } if (MotoL < -255) { MotoL = -255; } if (MotoR < -255) { MotoR = -255; } Serial.println(mLeft); if (MotoL > 0) { valueL = MotoL; directionL = 0; } else if (MotoL < 0) { valueL = abs(MotoL); directionL = 1; } else { directionL = 0; valueL = 0; } if (MotoR > 0) { valueR = MotoR; directionR = 0; } else if (MotoR < 0) { valueR = abs(MotoR); directionR = 1; } else { directionR = 0; valueR = 0; } digitalWrite(in1, directionR); digitalWrite(in2, !directionR); digitalWrite(in3, directionL); digitalWrite(in4, !directionL); analogWrite(ena, valueL); analogWrite(enb, valueR); } [/code]
Помогите подправить код так, чтоб нажал отпустил кнопку подключенную к D4 передатчика выход А0 приемника ставал высоким. Еще раз нажал отпустил низким. Пока только работает так, нажал А0 высокий уровень отпустил низкий.
А волжебное слово? Вам тут кто-то задолжал?
Кроме того, перечитайте свой текст. Вы его сами понимаете? Что, например, за кнопка такая "подключенная к D4 передатчика" и что за передатчик к D4 которого подключена кнопка?
Извигите помогите будьте добры. Это скетчи для апаратуры радоуправления. А кнопка без фиксации(В ардуинском джойстике)
Так Вы именно так и написали в строке 64. Если на кнопке в данный момент LOW, то Вы выдаёте на пин 14 HIGH. Всё так и должно быть.
Конкретизируйте что надо, а то Ваш текст непонятен обсолютно.
Вы хотите изменять состояние пина 14 по отпусканию кнопки, так? Нажал, держу, ничего не менеятся, отпустил - состояние пина 14 изменилось на протиположное. Так или нет?
Да! Нажал отпустил пин 14 на противоположное.
Ну, так и делайте. Храните в передатчкие старое состояние кнопки. Изначально "ненажата". После чтения пакет проверяёте условие, что старое состояние "нажата", а новое - "не нажата" и только в этом случае меняёте состояние пина. А только прочитанное состояние запоминать в старом.
Понимаете. как это написать?
Смутно. Переменные надо вводить в приемнике и передатчике? Может пример какой подскажите. Код не мой потихоньку вникаю. Кнопку сам прописал но мне надо как я вам выше писал.
Вас Женя зовут? Меня Василий. Может за какуюто символическую плату допишите пару строчек.
Ну, вставьте после 53 строки запоминание
а вместо строки 64 что-нибудь вроде
Да, забыл спросить. Когда запустилась программа и кнопку ещё никто не трогал, она у Вас LOW? Если LOW - то всё правильно, а если HIGH, то везде в моё1м примере поменяйте LOW на HIGH и наоборот.
Собственно, всё.
Кудесник!!! Все работает!
А этот код для еще оной кнопки можно применить, что он значит. Я вас могу отблагодарить? Извините за нескромность у меня серва подключена 8 пин приемника. В передатчике пин А4(резистор переменный 10Ком) управление. Сервопривод самый дешовый SG90 . Все работает(поворачивается) но серва дергается когда стоит. Выключаю передатчик сервопривод стоит спокойно. Питание отдельное пробовал на серву с общим минусом безрезультатно. Это в коде проблемы или серва такая(серву менял)?
Приемник(но сервопривод здесь не показан)
Вас Женя зовут? Меня Василий.
Мдя, вы отчество то добавьте, а то Жене к вам и обращаться неудобно будет.(((((
Спасибо! Можно тему закрывать.