
|
![]() | #11 (permalink) Top | |
User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
| prova fatta
ciao Tom sei della stessa annata mia! allora oggi ho potuto fare una prova, funziona! l'ipotesi era corretta, solo che arduino legge i dati dalla ricevente portando con se piccole sbavature.. tenendo fermo lo stick della radio il segnale ogni tanto porta delle piccole variazioni.. che poi trasferite sul servo significano piccoli e fastidiosi movimenti.. ...occorre per tanto un'istruzione di controllo , che effettua l'assegnamento del nuovo valore solo se il valore assoluto della differenza è > 10 ..in modo da avere un margine.. if ( abs( pulseIn(ENG, HIGH) - RX_engine ) > 10) RX_engine = pulseIn(ENG, HIGH); Quindi aggiorna il valore di RX_engine solo se il valore assoluto della differenza con il precedente valore supera 10. Con questa istruzione le sbavature vengono corrette. Questo software è il primo passo.. vale a dire prendo il segnale dalla ricevente... se non cambia rispetto all'ultimo ordine... allora legge dalla lista dei waypoint per andare ad eseguire il movimento del prox punto.. #include <Servo.h> Servo myservo1,myservo2; // create servo object to control a servo const int ENG = 2; // pin lettura ricevente segnale motore INGRESSO const int DIR = 4; // pin lettura segnale servo di direzione INGRESSO const int IR = 8; // pin lettura segnale infrarosso INGRESSO const int ENG_OUT = 9; // pin per segnale motore da inviare USCITA const int DIR_OUT = 10; // pin per segnale direzione servo da inviare USCITA long engine; // segnale imposto per la potenza motore long direct; // segnale imposto al servo di direzione long RX_engine; // segnale proveniente dalla ricevente potenza motore long RX_direct; // segnale proveniente dalla ricevente servo direzione int val_1,val_2; //__________________________________________________ ________________ void setup() { // initialize serial communication: Serial.begin(38400); myservo.attach(ENG_OUT); pinMode(ENG, INPUT); pinMode(DIR, INPUT); pinMode(IR, INPUT); } //__________________________________________________ ________________ void loop() { RX_engine = pulseIn(ENG, HIGH); RX_direct = pulseIn(DIR, HIGH); val_1 = map(RX_engine, 1050, 1850, 0, 180); val_2 = map(RX_direct, 1050, 1850, 0, 180); myservo.write(val_1); } Citazione:
Ultima modifica di faustog_2 : 15 aprile 12 alle ore 00:13 | |
![]() | ![]() |
Bookmarks |
| |
![]() | ||||
Discussione | Autore discussione | Forum | Commenti | Ultimo Commento |
Coassiale mixed controller con arduino | catman | Circuiti Elettronici | 12 | 01 aprile 11 23:17 |
quadricottero con arduino 2009 | sailormann26 | Aeromodellismo Progettazione e Costruzione | 0 | 27 dicembre 10 23:12 |