Visualizza messaggio singolo
Vecchio 24 novembre 20, 12:17   #18 (permalink)  Top
Minestrone
User
 
L'avatar di Minestrone
 
Data registr.: 13-09-2012
Messaggi: 4.686
La libreria che ho usato io la trovi qua e devi installarla nella cartella delle librerie:
https://github.com/RealTadango/FrSky
Il codice te lo scrivo alla fine del post, non devi fare altro che copiarlo ed incollarlo nell'IDE di Arduino.
In pratica il codice costruisce un sensore con ID 5900 (puoi anche cambiarlo) che vale 0 quando il pulsante non è a massa e dà 10 quando il pulsante va a massa, vedi un po' tu come costruirti lo switch.
Nel codice è implementato un semplice filtro per il debaunce dell'interruttore (50ms).
All'inizio del codice ci sono le righe che puoi impostare per cambiare il pin dell'interruttore (ora è 8 ma puoi mettere quello che ti fa più comodo). Il pin 8 deve essere collegato a GND quando il pulsante è premuto. Puoi inoltre impostare il pin del segnale che va a SmartPort (ora è il pin 3), l' ID del sensore (ora 5900) e il tempo di debaunce (ora 50 ms).

Immagino che l'Arduino dovrà essere alimentato tramite la ricevente pertanto preoccupati di collegare il positivo al pin RAW e non a Vin perchè altrimenti bruci tutto. Il pin Raw accetta fino a 12V perciò occhio a cosa lo colleghi.
Se usi un arduino pro mini da 3.3V non dovrebbero esserci problemi, se usi un arduino a 5 V potrebbe esserci qualche problema con i livelli di tensione dell'arduino e della ricevente. Per scongiurare qualsiasi problema puoi mettere una semplice resistenza sul cavetto di segnale che va dal pin 3 ala porta smart, 220ohm dovrebbe andare.


CODICE:


#include <SPort.h> //Include la SPort library
#define PIN_INTERRUTTORE 8 //definisce il pin da usare come interruttore
SPortHub hub(0x12, 3); //Hardware ID 0x12, il pin del cavetto smart port è il 3
SimpleSPortSensor sensore(0x5900); //Sensore con ID 0x5900
#define DEBOUNCE 50 //definisce il tempo di debounce

bool lettura = 0;
bool buttonState = 0;
bool lastButtonState = 0;
unsigned long lastDebounceTime = 0; // tempo dall'untimo switch dell'interruttore
unsigned long debounceDelay = DEBOUNCE; // tempo di debaunce

void setup() {
pinMode( PIN_INTERRUTTORE , INPUT_PULLUP);
hub.registerSensor(sensore); //definisce il sensore
hub.begin(); //attiva il sensore
}

void loop() {
//lettura dell'interruttore con debounce
lettura = digitalRead(PIN_INTERRUTTORE);
if (lettura != lastButtonState) {
lastDebounceTime = millis(); // resetta il tempo
}
if ((millis() - lastDebounceTime) > debounceDelay) {

if (lettura != buttonState) {
buttonState = lettura;
}
}


if (lettura) { sensore.value = 0; //setta il valore del sensore
}
else { sensore.value = 10; //setta il valore del sensore

}
hub.handle(); //ora gestisce i dati del sensore
}
Minestrone non è collegato   Rispondi citando