BaroneRosso.it - Forum Modellismo

BaroneRosso.it - Forum Modellismo (https://www.baronerosso.it/forum/)
-   Circuiti Elettronici (https://www.baronerosso.it/forum/circuiti-elettronici/)
-   -   Arduino Micro e Presa allievo maestro (https://www.baronerosso.it/forum/circuiti-elettronici/317736-arduino-micro-e-presa-allievo-maestro.html)

faustog_2 27 maggio 14 23:50

Arduino Micro e Presa allievo maestro
 
gentilissimi lettori di Barone Rosso..
volevo condividere queste poche righe di software: dopo aver seguito lo schema elettrico consigliato da Flight Mode Simulator attraverso una resistenza da 680 ohm e un diodo zenner da 4,7 V possiamo portare FUORI i segnali digitali della nostra radio HITEC in formato TTL, buoni da mangiare per arduino o per qualunque micro controllore!
Di seguito la forma del segnale della presa allievo maestro della radio. Da notare che tra un treno di segnali e il successivo abbiamo una tensione di circa 10v.

____ __ ___ _ ___ _ __ __ ______________________
|____| |____| |_| |__| |__||__| |__| |____|


/*
Software by Fausto Giudice for arduino Leonardo & Arduino Micro

This software put into array_pulse the 7 digital signals from Master Slave cable of HITEC Eclipse7 . If the time of sigle pulse to be longer that 2500 uS, then start the pulse index from Zero:
array_pulse[0] -> ch-1 ; array_pulse[1] -> ch-2 ; array_pulse[2] -> ch-3 ; array_pulse[3] -> ch-4
array_pulse[4] -> ch-5 ; array_pulse[5] -> ch-6 ; array_pulse[6] -> ch-7
____________________________________...dice@gmail.com
*/
const int ch1 = 7; // interrupt 4
volatile unsigned long ch1_val;
volatile unsigned long microseconds_1;
volatile unsigned long array_pulse[7];
volatile int pulse;
//__________________________________________________ ______________
void setup()
{
pinMode(ch1, INPUT);
Serial.begin(9600);
pulse = 0;
attachInterrupt(4, CH1_val, CHANGE); // questo sul pin 7
}
//__________________________________________________ ______________
void loop()
{
// show the value of ch-7
Serial.println(array_pulse[6]);
delay(100);
}
//__________________________________________________ ______________
void CH1_val()
{
if(digitalRead(ch1) == HIGH)
{
microseconds_1 = micros();
}
else
{
ch1_val = micros() - microseconds_1;
if(ch1_val < 2500)
{
array_pulse[pulse] = ch1_val;
pulse++;
}
else
pulse = 0;
}
}


Tutti gli orari sono GMT +2. Adesso sono le 21:41.

Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002