| | #7 (permalink) Top | |
| User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
|
ok concordo su ciò che hai scritto... io sto adoperando Arduino Micro, che dispone di ben 5 pin x interrupt, ho appena finito di testare questa piccola funzione... OK tutto regolare... però adesso ho un problema, ovvero se volessi costruirmi un drone, che legge i PPM dalla ricevente e contemporaneamente legge i dati dei sensori ( gyro, accelerometri) dalla porta I2C ...c'è il problema che due dei pin coincidono ovvero il 3 e il 2... per cui ..dovrò optare di leggere i 4 PPM provenienti dalla radio in unico bus... in un unico pin... (volevo evitarlo) grazie alle tante porte interrupt messe a disposizione di Arduini Micro... e invece.. purtroppo devo fare il circuito aggiuntivo che mi convoglia i 4 PPM in un unico BUS.. pazienza! a meno che non vado ad utilizzare sensori analogici.. solo che tali vanno a rallentare di parecchio il software.. quindi non vale la pena! /* PER ARDUINO MICRO questo software cattura i segnali provenienti da una ricevente per aeromodelli ch1 ch2 ch3 ch4 | | | | | |GND | | ___|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|____ | pin 3,2 pin 0,1 | USB | | | ARDUINO MICRO | |_____________________________________| | | | | | | | | | | | | | | | | | la stampa sulla seriale avviene con un grosso ritardo dovuto alla bufferizzazione dei dati, occorre prelevare con i dati da un'applicazione diversa da serial monitor, perche essa blocca il PC. */ const int ch1 = 3; // interrupt 0 const int ch2 = 2; // interrupt 1 const int ch3 = 0; // interrupt 2 const int ch4 = 1; // interrupt 3 volatile unsigned long microseconds_1; volatile unsigned long microseconds_2; volatile unsigned long microseconds_3; volatile unsigned long microseconds_4; volatile byte index =0; volatile unsigned long ch1_val; volatile unsigned long ch2_val; volatile unsigned long ch3_val; volatile unsigned long ch4_val; // External Interrupts: ch1 - pin 3 (interrupt 0)// ch2 - pin 2 (interrupt 1)// ch3 - pin 0 (interrupt 2) // ch4 - pin 1 (interrupt 3) // and 7 (interrupt 4). void setup() { pinMode(ch1, INPUT); pinMode(ch2, INPUT); pinMode(ch3, INPUT); pinMode(ch4, INPUT); Serial.begin(9600); attachInterrupt(0, CH1_val, CHANGE); // questo sul pin3 attachInterrupt(1, CH2_val, CHANGE); // questo sul pin2 attachInterrupt(2, CH3_val, CHANGE); // questo sul pin0 attachInterrupt(3, CH4_val, CHANGE); // questo sul pin1 } //__________________________________________________ ______________ void loop() { Serial.println(ch1_val); Serial.println(ch2_val); Serial.println(ch3_val); Serial.println(ch4_val); Serial.println("......."); delay(1); } //__________________________________________________ _______ void CH1_val() { if(digitalRead(ch1) == HIGH) microseconds_1 = micros(); else ch1_val = micros() - microseconds_1; } //__________________________________________________ _______ void CH2_val() { if(digitalRead(ch2) == HIGH) microseconds_2 = micros(); else ch2_val = micros() - microseconds_2; } //__________________________________________________ _______ void CH3_val() { if(digitalRead(ch3) == HIGH) microseconds_3 = micros(); else ch3_val = micros() - microseconds_3; } //__________________________________________________ _______ void CH4_val() { if(digitalRead(ch4) == HIGH) microseconds_4 = micros(); else ch4_val = micros() - microseconds_4; } a dopo fasuto Citazione:
| |
| | |
| Bookmarks |
| |
Discussioni simili | ||||
| Discussione | Autore discussione | Forum | Commenti | Ultimo Commento |
| Emulare con Arduino un segnale PPM | baccothe | Circuiti Elettronici | 17 | 11 febbraio 14 20:10 |
| aiuto con arduino e ppm | alex-military | Circuiti Elettronici | 0 | 22 febbraio 13 14:52 |
| Aiuto Miscelare canali con JR MX 22 | saviothecnic | Radiocomandi | 16 | 17 novembre 08 18:33 |
| Miscelare 2 servi per il profondità con Tx X3810 | verio77 | Aeromodellismo | 1 | 07 agosto 07 11:18 |