Управление по nrl24l01
- Войдите на сайт для отправки комментариев
Пнд, 02/07/2018 - 09:11
Добрый день! Есть скетч по управлению по каналу nrl24l01. Три канала - серва, мотор с реверсом и светодиод. нашел вот такой ваиант, работу сервы и мотора настроил в скетче как надо. работает как положено. а вот со светодиодом непонятки. мигает просто, на нажатие кнопки на пульте не реагирует. подскажите что не так в коде.
Передатчик
#include <SPI.h> #include <nRF24L01.h> #include <RF24.h> #include <Servo.h> #define CE_PIN 9 #define CSN_PIN 10 const uint64_t pipe = 0xE8E8F0F0E1LL; RF24 radio(CE_PIN, CSN_PIN); int datos[3]; int but=7; Servo myservo; int pot_x = 1; int val_x; void setup() { pinMode(7, INPUT); pinMode(pot_x, INPUT); radio.begin(); Serial.begin(9600); radio.openWritingPipe(pipe); } void loop() { datos[0] = analogRead(0); datos[1] = digitalRead(7); val_x = analogRead(pot_x); datos[2] = val_x; bool ok = radio.write(datos, sizeof(datos)); if (ok) { Serial.println(datos[0]); } Serial.println(pot_x); }
Приемник
#include <SPI.h> #include <nRF24L01.h> #include <RF24.h> #include <Servo.h> const uint64_t pipe = 0xE8E8F0F0E1LL; #define CE_PIN 9 #define CSN_PIN 10 RF24 radio(CE_PIN, CSN_PIN); int datos[3]; int ENB = 5; int IN4 = 6; int IN3 = 7; int led = 4; long time = 0; long debounce = 300; boolean ledOn = false; boolean lastBut = HIGH; Servo servo; void setup() { radio.begin(); Serial.begin(9600); radio.openReadingPipe(1, pipe); radio.startListening(); pinMode(ENB, OUTPUT); pinMode(IN4, OUTPUT); pinMode(IN3, OUTPUT); pinMode(led, OUTPUT); int val_led = 0; servo.attach(3); } void loop() { uint8_t numero_canal; if ( radio.available() ) { radio.read(datos, sizeof(datos)); int val = datos[0]; int val1; val1 = map(val, 0, 1023, 254, -254); if (val1 >= 0) { analogWrite(ENB, val1); digitalWrite(IN4, LOW); digitalWrite(IN3, HIGH); } else { val1 = abs(val1); analogWrite(ENB, val1); digitalWrite(IN4, HIGH); digitalWrite(IN3, LOW); } Serial.print("data: "); Serial.println(val1); } if (datos[1] == 0 && lastBut == HIGH && millis() - time > debounce) // Управление светодиодом { ledOn = !ledOn; lastBut = HIGH; time = millis(); } else { lastBut = digitalRead(lastBut); } digitalWrite(led, ledOn); int ledval = datos[1]; int leds=abs(ledval); Serial.println(ledOn); digitalWrite(led,leds); int val_x = datos[2]; val_x = map(val_x, 0, 1023, 0, 170); Serial.println(datos[2]); servo.attach(3); servo.write(val_x); Serial.println(val_x); }
А Вы не хотите написать
1) а как он должен себя вести? Откуда нам знать, чего Вы от него хотите?
2) в каких строках кода Вы с ним работаете и что именно делаете?
На передатчике пин7...требуется чтобы диод зажигался по нажатию кнопки и гас при отжатии. На приемнике диод на пин4.
До п.2 в моём посте не дочитали? Или лень по клавишам бить?
Если бы Вы начали объяснять, что Вы делаете (как Вас просили), Вы бы давно заметили бред в строке №73 - что Вы там читаете с пина №0 (или 1) и зачем?
Впрочем, если Вам неохота писать что и как и вообще, решать проблему, то остальным и подавно это нафиг не нужно.
в программировании не очень силен, скетч нашел в сети. и потому по пункту №2 не дал каких либо четких пояснений.
в программировании не очень силен, скетч нашел в сети. и потому по пункту №2 не дал каких либо четких пояснений.
В таком случае, боюсь, я не смогу помочь. В строке №73 написан какой-то бред. Автор, наверное, обкурился когда писал. Что он имел в виду и что хотел сделать я не знаю.