Помогите дописать скетч
- Войдите на сайт для отправки комментариев
Ср, 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 . Все работает(поворачивается) но серва дергается когда стоит. Выключаю передатчик сервопривод стоит спокойно. Питание отдельное пробовал на серву с общим минусом безрезультатно. Это в коде проблемы или серва такая(серву менял)?
Приемник(но сервопривод здесь не показан)
Вас Женя зовут? Меня Василий.
Мдя, вы отчество то добавьте, а то Жене к вам и обращаться неудобно будет.(((((
Спасибо! Можно тему закрывать.