arduino project
5 απαντήσεις
Σελίδα 3 από 3
Σελίδα 3 από 3 • 1, 2, 3
Απ: arduino project
-nikos- έγραψε:
και ο ποιο δυσκολος ειναι τελικα να βρουμε-φτιαξουμε κωδικα με 3 αξωνες σε ενα αρντουινο....
Ακουστε... τα δυσκολα ειναι για τους καλους αλλα.....τα ευκολα ειναι για τους καλυτερους .
Τελικά είμαι και καλός και...καλύτερος !!!!!
εφτιαξα τον κωδικα με φουλ ευαισθησια τριών αξόνων....
και οχι μονο για σερβο ή esc αλλα και για οδήγηση απλων μοτέρ... τρεις μερες παιδευόμουν...
στην φώτο δημοσιεύω μόνο το void loop ...
δεν δημοσιευω ολοκληρο τον κωδικα γιατι ετοιμαζω βιντεο σχετικο με το γυροσκοπιο αφενος και
αφετερω μαλλον θα βαλω στα σχεδια και την κατασκευη drone με arduino,,
ομως μια μικρη περιληψη θα ειναι χρησιμη στους αναγνωστες...
φωτο κυκλωματος=
τον κωδικα τον ανεπτηξα σε οδηγηση pwm και οχι σε servo driver γιατι το pwm μπορουμε ευκολα να το μετατρεψουμε σε οδηγηση 6 αξωνων απλων μοτερ αλλα και σε 6 servo driver για 3κοπτερο ή 6κοπτερο...
μολις ολοκληρωσω το κυκλωμα θα γυρισω και το βιντεο
Στοχος γυροσκοπικης σταθεροποιησης επιτευχθει !!!
επομενος στοχος η gps οδηγηση.
_________________
«αν κλείσεις την πόρτα σου σε κάθε πλάνη, στο τέλος θα μείνει απ' έξω και η αλήθεια»
Απ: arduino project
-nikos- έγραψε:
ο κώδικας δεν θα δημοσιευτεί
μπορειτε να αρχισετε τους πειραματισμους με αυτο το βιντεο=
στο οποίο δινει και κώδικα και περιγραφη,,
δεν ειναι ο κώδικας που χρησιμοποιω αλλά ειναι μια καλη αρχη.
_________________
«αν κλείσεις την πόρτα σου σε κάθε πλάνη, στο τέλος θα μείνει απ' έξω και η αλήθεια»
Απ: arduino project
ενα καινουριο προγραμμα που σου.....''φτιαχνει τον κώδικα'' και
φαινεται αρκετα ενδιαφερον
ειναι το https://www.circuito.io/app?components=9442,10334,11022,488167
ειναι δωρεαν και εχει μεγαλη γκαμα εξαρτηματων.....
απλα ''τραβατε'' το εξαρτημα μεσα στο κύκλωμα και
αυτο αυτόματα φτιαχνει τις συνδέσεις και παράγει τον κώδικα....
θα το βρειτε πολυ ενδιαφερον
θα το βρειτε εδω = https://www.circuito.io/app?components=512,11021
φαινεται αρκετα ενδιαφερον
ειναι το https://www.circuito.io/app?components=9442,10334,11022,488167
ειναι δωρεαν και εχει μεγαλη γκαμα εξαρτηματων.....
απλα ''τραβατε'' το εξαρτημα μεσα στο κύκλωμα και
αυτο αυτόματα φτιαχνει τις συνδέσεις και παράγει τον κώδικα....
θα το βρειτε πολυ ενδιαφερον
θα το βρειτε εδω = https://www.circuito.io/app?components=512,11021
_________________
«αν κλείσεις την πόρτα σου σε κάθε πλάνη, στο τέλος θα μείνει απ' έξω και η αλήθεια»
Απ: arduino project
-nikos- έγραψε:
ετοιμο και το βιντεο =
ο κώδικας δεν θα δημοσιευτεί
μετα απο πολλες ιντερνετικες απαιτησεις και απο το παραπανω βιντεο και απο την κατασκευη ηλεκτρονικης αγκυρας με gps που μπορειτε να την δειτε εδω= https://doityourself123.forumgreek.com/t397-topic
δημοσιευω τον κωδικα
_________________
«αν κλείσεις την πόρτα σου σε κάθε πλάνη, στο τέλος θα μείνει απ' έξω και η αλήθεια»
Απ: arduino project
-nikos- έγραψε:
φυσικα ο κωδικας θα ειναι free
Οπως υποσχεθηκα......!!!!
μετετρεψα τον κωδικα για λεντ σε κωδικα για ινβερτερ καθαρου ιμητονου !!!!!! με αναδραση και με τα ουλα του...
ο κωδικας=
int sensorValue;
void setup()
{
pinMode(5, OUTPUT);//MOSFET DRIVER 1
pinMode(6, OUTPUT);//MOSFET DRIVER 2
//FEEDBACK ON PIN A4
}
void loop()
{
analogWrite(6,HIGH);
analogWrite(5,LOW);
sensorValue = analogRead(4);//FEEDBACK ON PIN A4
analogWrite(6, sensorValue / 4);
//analogWrite(37, 1023 - sensorValue);
delay(9); //The delay can be change to get the desired frequency
analogWrite(6,LOW);
analogWrite(5,LOW);
delay(1);
analogWrite(6,LOW);
analogWrite(5,HIGH);
sensorValue = analogRead(4);//FEEDBACK ON PIN A4
analogWrite(5, sensorValue / 4);
//analogWrite(37, 1023 - sensorValue);
delay(9); //The delay can be change to get the desired frequency
analogWrite(6,LOW);
analogWrite(5,LOW);
delay(1);
}
---------------------------------------------
ετσι,,, με αγαπη σε ολους...
για ενα φραχτη ηλεκτροπληξιας για φραξιμο........σαλιγκαριων
τροποποιησα ξανα
τον παραπάνω κώδικα ωστε να οδηγει μια ηλεκτρονική απο μηχανάκι...
ο κωδικας=
και το σχηματικό της ανάφλεξης....
_________________
«αν κλείσεις την πόρτα σου σε κάθε πλάνη, στο τέλος θα μείνει απ' έξω και η αλήθεια»
Απ: arduino project
arduino και σουζα με ποδηλατο...
_________________
«αν κλείσεις την πόρτα σου σε κάθε πλάνη, στο τέλος θα μείνει απ' έξω και η αλήθεια»
Απ: arduino project
το καλυτερο Tutorial
για Arduino Wireless Communication με το = NRF24L01
και λεπτομεριες στον κωδικα που ελενχουν την αποσταση =
https://www.youtube.com/watch?v=57pdX6b0sfw
για Arduino Wireless Communication με το = NRF24L01
και λεπτομεριες στον κωδικα που ελενχουν την αποσταση =
https://www.youtube.com/watch?v=57pdX6b0sfw
_________________
«αν κλείσεις την πόρτα σου σε κάθε πλάνη, στο τέλος θα μείνει απ' έξω και η αλήθεια»
Απ: arduino project
οι κωδικες στα παραπανω βιντεο εχουν bags και δεν δουλευουν.....-nikos- έγραψε:το καλυτερο Tutorial
για Arduino Wireless Communication με το = NRF24L01
και λεπτομεριες στον κωδικα που ελενχουν την αποσταση =
https://www.youtube.com/watch?v=57pdX6b0sfw
αυτος ο κωδικας δουλευει =
// transmiter
#include "nRF24L01.h" //NRF24L01 library created by TMRh20 https://github.com/TMRh20/RF24
#include "RF24.h"
#include "SPI.h"
#define SwitchPin 8
int SentMessage[1] = {000};
RF24 radio(9,10); // NRF24L01 used SPI pins + Pin 9 and 10 on the NANO
const uint64_t pipe = 0xE6E6E6E6E6E6; // Needs to be the same for communicating between 2 NRF24L01
void setup()
{
pinMode(SwitchPin, INPUT_PULLUP);
digitalWrite(SwitchPin,HIGH);
radio.begin(); // Start the NRF24L01
radio.openWritingPipe(pipe); // Get NRF24L01 ready to transmit
radio.setPALevel(RF24_PA_MAX);
}
void loop()
{
if (digitalRead(SwitchPin) == LOW) // If switch is pressed
{
SentMessage[0] = 111;
radio.write(SentMessage, 1); // Send pressed data to NRF24L01
}
else
{
SentMessage[0] = 000;
radio.write(SentMessage, 1); // Send idle data to NRF24L01
}
}
-------------------------------------------------------------------------------------------------
//reciver
#include "nRF24L01.h" // NRF24L01 library created by TMRh20 https://github.com/TMRh20/RF24
#include "RF24.h"
#include "SPI.h"
#define LED_PIN 3
int ReceivedMessage[1] = {000}; // Used to store value received by the NRF24L01
RF24 radio(9,10); // NRF24L01 SPI pins. Pin 9 and 10 on the Nano
const uint64_t pipe = 0xE6E6E6E6E6E6; // Needs to be the same for communicating between 2 NRF24L01
void setup(void)
{
radio.begin(); // Start the NRF24L01
radio.openReadingPipe(1,pipe); // Get NRF24L01 ready to receive
radio.startListening(); // Listen to see if information received
radio.setPALevel(RF24_PA_MAX);
pinMode(LED_PIN, OUTPUT);
}
void loop(void)
{
while (radio.available())
{
radio.read(ReceivedMessage, 1); // Read information from the NRF24L01
if (ReceivedMessage[0] == 111) // Indicates switch is pressed
{
digitalWrite(LED_PIN, HIGH);
}
else
{
digitalWrite(LED_PIN, LOW);
}
delay(2);
}
}
ενας απλος κωδικας με ενα κουμπακι και ενα λαμπακι
οταν φτιαξω ολοκληρωμένο κωδικα για σερβο θα εχουμε βιντεο... αγαπουλες
_________________
«αν κλείσεις την πόρτα σου σε κάθε πλάνη, στο τέλος θα μείνει απ' έξω και η αλήθεια»
Απ: arduino project
-nikos- έγραψε:
,,,,,,
ενας απλος κωδικας με ενα κουμπακι και ενα λαμπακι
οταν φτιαξω ολοκληρωμένο κωδικα για σερβο θα εχουμε βιντεο... αγαπουλες
προχωράμε.....
κωδικας για σερβο τηλεκατευθηνομενου που δουλευει...!!!!
reciver =
#include "nRF24L01.h" //NRF24L01 library
#include "RF24.h"
#include "SPI.h"
////////////////////// PPM CONFIGURATION//////////////////////////
#define channel_number 6 //set the number of channels
#define sigPin 2 //set PPM signal output pin on the arduino
#define PPM_FrLen 27000 //set the PPM frame length in microseconds (1ms = 1000µs)
#define PPM_PulseLen 400 //set the pulse length
//////////////////////////////////////////////////////////////////
int ppm[channel_number];
const uint64_t pipeIn = 0xE8E8F0F0E1LL;
RF24 radio(9, 10);
// The sizeof this struct should not exceed 32 bytes
struct MyData {
byte throttle;
byte yaw;
byte pitch;
byte roll;
byte AUX1;
byte AUX2;
};
MyData data;
void resetData()
{
// 'safe' values to use when no radio input is detected
data.throttle = 127;
data.yaw = 127;
data.pitch = 127;
data.roll = 127;
data.AUX1 = 127;
data.AUX2= 127;
setPPMValuesFromData();
}
void setPPMValuesFromData()
{
ppm[0] = map(data.throttle, 0, 255, 1000, 2000);
ppm[1] = map(data.yaw, 0, 255, 1000, 2000);
ppm[2] = map(data.pitch, 0, 255, 1000, 2000);
ppm[3] = map(data.roll, 0, 255, 1000, 2000);
ppm[4] = map(data.AUX1, 0, 255, 1000, 2000);
ppm[5] = map(data.AUX2, 0, 255, 1000, 2000);
}
/**************************************************/
void setupPPM() {
pinMode(sigPin, OUTPUT);
digitalWrite(sigPin, 0); //set the PPM signal pin to the default state (off)
cli();
TCCR1A = 0; // set entire TCCR1 register to 0
TCCR1B = 0;
OCR1A = 100; // compare match register (not very important, sets the timeout for the first interrupt)
TCCR1B |= (1 << WGM12); // turn on CTC mode
TCCR1B |= (1 << CS11); // 8 prescaler: 0,5 microseconds at 16mhz
TIMSK1 |= (1 << OCIE1A); // enable timer compare interrupt
sei();
}
void setup()
{
resetData();
setupPPM();
// Set up radio module
radio.begin();
radio.setDataRate(RF24_250KBPS); // Both endpoints must have this set the same
radio.setAutoAck(false);
radio.openReadingPipe(1,pipeIn);
radio.startListening();
}
/**************************************************/
unsigned long lastRecvTime = 0;
void recvData()
{
while ( radio.available() ) {
radio.read(&data, sizeof(MyData));
lastRecvTime = millis();
}
}
/**************************************************/
void loop()
{
recvData();
unsigned long now = millis();
if ( now - lastRecvTime > 1000 ) {
// signal lost?
resetData();
}
setPPMValuesFromData();
}
/**************************************************/
//#error Delete this line befor you cahnge the value (clockMultiplier) below
#define clockMultiplier 2 // set this to 2 if you are using a 16MHz arduino, leave as 1 for an 8MHz arduino
ISR(TIMER1_COMPA_vect){
static boolean state = true;
TCNT1 = 0;
if ( state ) {
//end pulse
PORTD = PORTD & ~B00000100; // turn pin 2 off. Could also use: digitalWrite(sigPin,0)
OCR1A = PPM_PulseLen * clockMultiplier;
state = false;
}
else {
//start pulse
static byte cur_chan_numb;
static unsigned int calc_rest;
PORTD = PORTD | B00000100; // turn pin 2 on. Could also use: digitalWrite(sigPin,1)
state = true;
if(cur_chan_numb >= channel_number) {
cur_chan_numb = 0;
calc_rest += PPM_PulseLen;
OCR1A = (PPM_FrLen - calc_rest) * clockMultiplier;
calc_rest = 0;
}
else {
OCR1A = (ppm[cur_chan_numb] - PPM_PulseLen) * clockMultiplier;
calc_rest += ppm[cur_chan_numb];
cur_chan_numb++;
}
}
}
Η εξοδος ειναι στο πιν 2 σε μορφη RF ppm ειναι 5 καναλια σε 6 εντολες
και το
transmiter =
#include "nRF24L01.h" //NRF24L01 library
#include "RF24.h"
#include "SPI.h"
/*Create a unique pipe out. The receiver has to
wear the same unique code*/
const uint64_t pipeOut = 0xE8E8F0F0E1LL; //IMPORTANT: The same as in the receiver
RF24 radio(9, 10); // select CSN pin
// The sizeof this struct should not exceed 32 bytes
// This gives us up to 32 8 bits channals
struct MyData {
byte throttle;
byte yaw;
byte pitch;
byte roll;
byte AUX1;
byte AUX2;
};
MyData data;
void resetData()
{
//This are the start values of each channal
// Throttle is 0 in order to stop the motors
//127 is the middle value of the 10ADC.
data.throttle = 127;
data.yaw = 127;
data.pitch = 127;
data.roll = 127;
data.AUX1 = 127;
data.AUX2 = 127;
}
void setup()
{
//Start everything up
radio.begin();
radio.setAutoAck(false);
radio.setDataRate(RF24_250KBPS);
radio.openWritingPipe(pipeOut);
resetData();
}
/**************************************************/
// Returns a corrected value for a joystick position that takes into account
// the values of the outer extents and the middle of the joystick range.
int mapJoystickValues(int val, int lower, int middle, int upper, bool reverse)
{
val = constrain(val, lower, upper);
if ( val < middle )
val = map(val, lower, middle, 0, 128);
else
val = map(val, middle, upper, 128, 255);
return ( reverse ? 255 - val : val );
}
void loop()
{
// The calibration numbers used here should be measured
// for your joysticks till they send the correct values.
data.throttle = mapJoystickValues( analogRead(A0), 34, 524, 1020, true );
data.yaw = mapJoystickValues( analogRead(A1), 34, 505, 1020, true );
data.pitch = mapJoystickValues( analogRead(A2), 34, 544, 1020, true );
data.roll = mapJoystickValues( analogRead(A3), 34, 522, 1020, true );
data.AUX1 = mapJoystickValues( analogRead(A4), 34, 522, 1020, true );
data.AUX2 = mapJoystickValues( analogRead(A5), 34, 522, 1020, true );
radio.write(&data, sizeof(MyData));
}
Έχει επεξεργασθεί από τον/την -nikos- στις Δευ Νοε 02, 2020 12:32 pm, 9 φορές συνολικά
_________________
«αν κλείσεις την πόρτα σου σε κάθε πλάνη, στο τέλος θα μείνει απ' έξω και η αλήθεια»
Απ: arduino project
-nikos- έγραψε:
Η εξοδος ειναι στο πιν 2 σε μορφη RF ppm
και....οπως εψαχνα για το πως γινεται το ppm servo driver... επεσα πανω σε αυτο =
https://norcim-rc.club/Radio6.htm
λοιπων....αν το ppm γίνεται servo με ενα....4017 θα... εκπλαγω ευχαριστα...
αν και εχω μερικές αμφιβολίες.... αν στο 4017 πεσει ενας παλμος ασχετος πιθανων να χαθει η μπαλα...
θα το δοκιμασω ομως.. ειναι πολυ καλο για να ειναι αληθινό.....
επισεις ενα ενδιαφερον λινκ για χρηση του arduino για ppm μετατροπη = https://playground.arduino.cc/Code/ReadReceiver/
Έχει επεξεργασθεί από τον/την -nikos- στις Τετ Νοε 25, 2020 7:45 am, 1 φορά
_________________
«αν κλείσεις την πόρτα σου σε κάθε πλάνη, στο τέλος θα μείνει απ' έξω και η αλήθεια»
Απ: arduino project
και απευθηας σε σερβο δεκτης =
//Receiver Code
// 7 Channel Receiver
#include "nRF24L01.h" //NRF24L01 library
#include "RF24.h"
#include "SPI.h"
#include "Servo.h"
int ch_width_1 = 0;
int ch_width_2 = 0;
int ch_width_3 = 0;
int ch_width_4 = 0;
int ch_width_5 = 0;
int ch_width_6 = 0;
int ch_width_7 = 0;
Servo ch1;
Servo ch2;
Servo ch3;
Servo ch4;
Servo ch5;
Servo ch6;
Servo ch7;
struct Signal {
byte throttle_a;
byte pitch_a;
byte roll_a;
byte yaw_a;
byte throttle_b;
byte pitch_b;
byte roll_b;
};
Signal data;
const uint64_t pipeIn = 0xE9E8F0F0E1LL;
RF24 radio(9, 10);
void ResetData()
{
// Define the inicial value of each data input.
// The middle position for Potenciometers. (254/2=127)
data.throttle_a = 127; // Motor Stop
data.pitch_a = 127; // Center
data.roll_a = 127; // Center
data.yaw_a = 127; // Center
data.throttle_b = 127; // Center
data.pitch_b = 127; // Center
data.roll_b = 127; // Center
}
void setup()
{
//Set the pins for each PWM signal
ch1.attach(2);
ch2.attach(3);
ch3.attach(4);
ch4.attach(5);
ch5.attach(6);
ch6.attach(7);
ch7.attach(;
//Configure the NRF24 module
ResetData();
radio.begin();
radio.openReadingPipe(1,pipeIn);
radio.startListening(); //start the radio comunication for receiver
}
unsigned long lastRecvTime = 0;
void recvData()
{
while ( radio.available() ) {
radio.read(&data, sizeof(Signal));
lastRecvTime = millis(); // receive the data
}
}
void loop()
{
recvData();
unsigned long now = millis();
if ( now - lastRecvTime > 1000 ) {
ResetData(); // Signal lost.. Reset data
}
ch_width_1 = map(data.throttle_a, 0, 255, 1000, 2000);
ch_width_2 = map(data.pitch_a, 0, 255, 1000, 2000);
ch_width_3 = map(data.roll_a, 0, 255, 1000, 2000);
ch_width_4 = map(data.yaw_a, 0, 255, 1000, 2000);
ch_width_5 = map(data.throttle_b, 0, 255, 1000, 2000);
ch_width_6 = map(data.pitch_b, 0, 255, 1000, 2000);
ch_width_7 = map(data.roll_b, 0, 255, 1000, 2000);
// Write the PWM signal
ch1.writeMicroseconds(ch_width_1);
ch2.writeMicroseconds(ch_width_2);
ch3.writeMicroseconds(ch_width_3);
ch4.writeMicroseconds(ch_width_4);
ch5.writeMicroseconds(ch_width_5);
ch6.writeMicroseconds(ch_width_6);
ch7.writeMicroseconds(ch_width_7);
}
--------------------------------------------------------
// 7 Channel Transmitter
#include "nRF24L01.h" //NRF24L01 library
#include "RF24.h"
#include "SPI.h"
const uint64_t pipeOut = 0xE9E8F0F0E1LL; //IMPORTANT: The same as in the receiver 0xE9E8F0F0E1LL
RF24 radio(9, 10); // select CE,CSN pin |
struct Signal {
byte throttle_a;
byte pitch_a;
byte roll_a;
byte yaw_a;
byte throttle_b;
byte pitch_b;
byte roll_b;
};
Signal data;
void ResetData()
{
data.throttle_a = 127; // Motor Stop (254/2=127)(Signal lost position)
data.pitch_a = 127; // Center (Signal lost position)
data.roll_a = 127; // Center(Signal lost position)
data.yaw_a = 127; // Center (Signal lost position )
data.throttle_b = 127; // Center (Signal lost position )
data.pitch_b = 127; // Center (Signal lost position )
data.roll_b = 127; // Center (Signal lost position )
}
void setup()
{
//Start everything up
radio.begin();
radio.openWritingPipe(pipeOut);
radio.stopListening(); //start the radio comunication for Transmitter
ResetData();
}
// Joystick center and its borders
int mapJoystickValues(int val, int lower, int middle, int upper, bool reverse)
{
val = constrain(val, lower, upper);
if ( val < middle )
val = map(val, lower, middle, 0, 128);
else
val = map(val, middle, upper, 128, 255);
return ( reverse ? 255 - val : val );
}
void loop()
{
// Control Stick Calibration
// Setting may be required for the correct values of the control levers.
data.throttle_a = mapJoystickValues( analogRead(A0), 12, 524, 1020, false );//15, 1023, 15, 190
data.roll_a = mapJoystickValues ( analogRead(A1), 12, 524, 1020, true ); // "true" or "false" for servo direction
data.pitch_a = mapJoystickValues ( analogRead(A2), 12, 524, 1020, false ); // "true" or "false" for servo direction
data.yaw_a = mapJoystickValues ( analogRead(A3), 12, 524, 1020, true ); // "true" or "false" for servo direction
data.throttle_b = mapJoystickValues( analogRead(A4), 12, 524, 1020, true ); // "true" or "false" for servo direction
data.roll_b = mapJoystickValues ( analogRead(A5), 12, 524, 1020, false ); // "true" or "false" for servo direction
data.pitch_b = mapJoystickValues ( analogRead(A6), 12, 524, 1020, true ); // "true" or "false" for servo direction
radio.write(&data, sizeof(Signal));
}
//Receiver Code
// 7 Channel Receiver
#include "nRF24L01.h" //NRF24L01 library
#include "RF24.h"
#include "SPI.h"
#include "Servo.h"
int ch_width_1 = 0;
int ch_width_2 = 0;
int ch_width_3 = 0;
int ch_width_4 = 0;
int ch_width_5 = 0;
int ch_width_6 = 0;
int ch_width_7 = 0;
Servo ch1;
Servo ch2;
Servo ch3;
Servo ch4;
Servo ch5;
Servo ch6;
Servo ch7;
struct Signal {
byte throttle_a;
byte pitch_a;
byte roll_a;
byte yaw_a;
byte throttle_b;
byte pitch_b;
byte roll_b;
};
Signal data;
const uint64_t pipeIn = 0xE9E8F0F0E1LL;
RF24 radio(9, 10);
void ResetData()
{
// Define the inicial value of each data input.
// The middle position for Potenciometers. (254/2=127)
data.throttle_a = 127; // Motor Stop
data.pitch_a = 127; // Center
data.roll_a = 127; // Center
data.yaw_a = 127; // Center
data.throttle_b = 127; // Center
data.pitch_b = 127; // Center
data.roll_b = 127; // Center
}
void setup()
{
//Set the pins for each PWM signal
ch1.attach(2);
ch2.attach(3);
ch3.attach(4);
ch4.attach(5);
ch5.attach(6);
ch6.attach(7);
ch7.attach(;
//Configure the NRF24 module
ResetData();
radio.begin();
radio.openReadingPipe(1,pipeIn);
radio.startListening(); //start the radio comunication for receiver
}
unsigned long lastRecvTime = 0;
void recvData()
{
while ( radio.available() ) {
radio.read(&data, sizeof(Signal));
lastRecvTime = millis(); // receive the data
}
}
void loop()
{
recvData();
unsigned long now = millis();
if ( now - lastRecvTime > 1000 ) {
ResetData(); // Signal lost.. Reset data
}
ch_width_1 = map(data.throttle_a, 0, 255, 1000, 2000);
ch_width_2 = map(data.pitch_a, 0, 255, 1000, 2000);
ch_width_3 = map(data.roll_a, 0, 255, 1000, 2000);
ch_width_4 = map(data.yaw_a, 0, 255, 1000, 2000);
ch_width_5 = map(data.throttle_b, 0, 255, 1000, 2000);
ch_width_6 = map(data.pitch_b, 0, 255, 1000, 2000);
ch_width_7 = map(data.roll_b, 0, 255, 1000, 2000);
// Write the PWM signal
ch1.writeMicroseconds(ch_width_1);
ch2.writeMicroseconds(ch_width_2);
ch3.writeMicroseconds(ch_width_3);
ch4.writeMicroseconds(ch_width_4);
ch5.writeMicroseconds(ch_width_5);
ch6.writeMicroseconds(ch_width_6);
ch7.writeMicroseconds(ch_width_7);
}
--------------------------------------------------------
// 7 Channel Transmitter
#include "nRF24L01.h" //NRF24L01 library
#include "RF24.h"
#include "SPI.h"
const uint64_t pipeOut = 0xE9E8F0F0E1LL; //IMPORTANT: The same as in the receiver 0xE9E8F0F0E1LL
RF24 radio(9, 10); // select CE,CSN pin |
struct Signal {
byte throttle_a;
byte pitch_a;
byte roll_a;
byte yaw_a;
byte throttle_b;
byte pitch_b;
byte roll_b;
};
Signal data;
void ResetData()
{
data.throttle_a = 127; // Motor Stop (254/2=127)(Signal lost position)
data.pitch_a = 127; // Center (Signal lost position)
data.roll_a = 127; // Center(Signal lost position)
data.yaw_a = 127; // Center (Signal lost position )
data.throttle_b = 127; // Center (Signal lost position )
data.pitch_b = 127; // Center (Signal lost position )
data.roll_b = 127; // Center (Signal lost position )
}
void setup()
{
//Start everything up
radio.begin();
radio.openWritingPipe(pipeOut);
radio.stopListening(); //start the radio comunication for Transmitter
ResetData();
}
// Joystick center and its borders
int mapJoystickValues(int val, int lower, int middle, int upper, bool reverse)
{
val = constrain(val, lower, upper);
if ( val < middle )
val = map(val, lower, middle, 0, 128);
else
val = map(val, middle, upper, 128, 255);
return ( reverse ? 255 - val : val );
}
void loop()
{
// Control Stick Calibration
// Setting may be required for the correct values of the control levers.
data.throttle_a = mapJoystickValues( analogRead(A0), 12, 524, 1020, false );//15, 1023, 15, 190
data.roll_a = mapJoystickValues ( analogRead(A1), 12, 524, 1020, true ); // "true" or "false" for servo direction
data.pitch_a = mapJoystickValues ( analogRead(A2), 12, 524, 1020, false ); // "true" or "false" for servo direction
data.yaw_a = mapJoystickValues ( analogRead(A3), 12, 524, 1020, true ); // "true" or "false" for servo direction
data.throttle_b = mapJoystickValues( analogRead(A4), 12, 524, 1020, true ); // "true" or "false" for servo direction
data.roll_b = mapJoystickValues ( analogRead(A5), 12, 524, 1020, false ); // "true" or "false" for servo direction
data.pitch_b = mapJoystickValues ( analogRead(A6), 12, 524, 1020, true ); // "true" or "false" for servo direction
radio.write(&data, sizeof(Signal));
}
_________________
«αν κλείσεις την πόρτα σου σε κάθε πλάνη, στο τέλος θα μείνει απ' έξω και η αλήθεια»
Απ: arduino project
Καθυστέρηση με millis αντι για delay...
πολυ επεξηγηματικη και ευχάριστη παρουσίαση,
πολυ επεξηγηματικη και ευχάριστη παρουσίαση,
_________________
«αν κλείσεις την πόρτα σου σε κάθε πλάνη, στο τέλος θα μείνει απ' έξω και η αλήθεια»
Σελίδα 3 από 3 • 1, 2, 3
Σελίδα 3 από 3
Δικαιώματα σας στην κατηγορία αυτή
Δεν μπορείτε να απαντήσετε στα Θέματα αυτής της Δ.Συζήτησης