Ziet er top uit
Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature may not be available in some browsers.
Halmar, zit net je schakeling weer te lezen en dat principe ziet er goed uit.Dit is op 40 MHz. In de zender zit overigens niets bijzonders. Werking is als volgt; als je een gewone stuurknuppel naar een uiterste beweegt ziet de arduino dit als een aan signaal, de volgende keer dat je de knuppel naar die plek brengt word hij weer uitgeschakeld. Doormiddel van een aantal weerstanden heb ik 11 (een is middenstand) posities gemaakt, waar je de knuppel als het ware heen kan brengen, maar elke positie heeft dus een schakelaartje gekregen. De arduino kan elke positie vervolgens vertalen naar schakel functie. (Hoop dat het idee duidelijk is). Omdat er in de zender en in de signaal overdracht niets anders is als bij een gewone stuurfunctie, heb ik goede hoop dat dit ook in een 2,4 GHz zender zou moeten werken. Heb zelf helaas geen zender om dit uit te testen, kan alleen het concept testen, gewoon een echte knuppel gebruiken op mijn vliegzender...
Groet Halmar
/*
* Use transmitter stick to togle a led on and of
* By Halmar Lakeman
* 13-10-2015
* Last update 28-12-2017
*/
int input; // Input from transmitter
int ch1 ; // Channels
int ch2 ; // To store channel state
int ch3 ;
int ch4 ;
int ch5 ;
int ch6 ;
int ch7 ;
int ch8 ;
int ch9 ;
int ch10 ;
int laststate1 = 0; // last position
int laststate2 = 0;
int laststate3 = 0;
int laststate4 = 0;
int laststate5 = 0;
int laststate6 = 0;
int laststate7 = 0;
int laststate8 = 0;
int laststate9 = 0;
int laststate10 = 0;
unsigned long lastdebouncetime1 = 0;// keep track of time
unsigned long lastdebouncetime2 = 0;
unsigned long lastdebouncetime3 = 0;
unsigned long lastdebouncetime4 = 0;
unsigned long lastdebouncetime5 = 0;
unsigned long lastdebouncetime6 = 0;
unsigned long lastdebouncetime7 = 0;
unsigned long lastdebouncetime8 = 0;
unsigned long lastdebouncetime9 = 0;
unsigned long lastdebouncetime10 = 0;
int debouncedelay = 500; //time for debouncen
void setup() {
pinMode(2, INPUT); // input, connected to reciever
pinMode(3, OUTPUT); // ch1
pinMode(4, OUTPUT); // ch2
pinMode(5, OUTPUT); // ch3
pinMode(6, OUTPUT); // ch4
pinMode(7, OUTPUT); // ch5
pinMode(8, OUTPUT); // ch6
pinMode(9, OUTPUT); // ch7
pinMode(10, OUTPUT); // ch8
pinMode(11, OUTPUT); // ch9
pinMode(12, OUTPUT); // ch10
pinMode(13, OUTPUT); // Just to switch of the led
}
void loop() {
input = pulseIn(2, HIGH, 25000); // Read the pulse width of the signal
// kanaal 1
//values 860 & 951 are transmitter/configuration dependant. You will have to figure
//out wat works for you. The same goes for all subsequent channels
if ( input < 860 || input > 951 ) { // make it a digital on/off signal
ch1 = 0;
} else if (input > 860 && input < 951) {
ch1 = 1;
}
if((millis() - lastdebouncetime1) > debouncedelay) // debouce time checken
{
if (ch1 == 1 && laststate1 == 0) { // switch on
digitalWrite(3, HIGH);
laststate1 = 1;
lastdebouncetime1 = millis();
} else if (ch1 == 1 && laststate1 == 1){ // switch off
digitalWrite(3, LOW);
laststate1 = 0;
lastdebouncetime1 = millis();
}
}
// kanaal 2
if ( input < 951 || input > 1059 ) { // maak een digitaal aan/uit signaal
ch2 = 0;
} else if (input > 951 && input < 1059) {
ch2 = 1;
}
if((millis() - lastdebouncetime2) > debouncedelay) // debouce tijd checken
{
if (ch2 == 1 && laststate2 == 0) { // aan zetten
digitalWrite(4, HIGH);
laststate2 = 1;
lastdebouncetime2 = millis();
} else if (ch2 == 1 && laststate2 == 1){ // uit zetten
digitalWrite(4, LOW);
laststate2 = 0;
lastdebouncetime2 = millis();
}
}
// kanaal 3
if ( input < 1059 || input > 1200 ) { // maak een digitaal aan/uit signaal
ch3 = 0;
} else if (input > 1059 && input < 1200) {
ch3 = 1;
}
if((millis() - lastdebouncetime3) > debouncedelay) // debouce tijd checken
{
if (ch3 == 1 && laststate3 == 0) { // aan zetten
digitalWrite(5, HIGH);
laststate3 = 1;
lastdebouncetime3 = millis();
} else if (ch3 == 1 && laststate3 == 1){ // uit zetten
digitalWrite(5, LOW);
laststate3 = 0;
lastdebouncetime3 = millis();
}
}
//kanaal 4
if ( input < 1200 || input > 1327 ) { // maak een digitaal aan/uit signaal
ch4 = 0;
} else if (input > 1200 && input < 1327) {
ch4 = 1;
}
if((millis() - lastdebouncetime4) > debouncedelay) // debouce tijd checken
{
if (ch4 == 1 && laststate4 == 0) { // aan zetten
digitalWrite(6, HIGH);
laststate4 = 1;
lastdebouncetime4 = millis();
} else if (ch4 == 1 && laststate4 == 1){ // uit zetten
digitalWrite(6, LOW);
laststate4 = 0;
lastdebouncetime4 = millis();
}
}
//kanaal 5
if ( input < 1327 || input > 1452 ) { // maak een digitaal aan/uit signaal
ch5 = 0;
} else if (input > 1327 && input < 1452) {
ch5 = 1;
}
if((millis() - lastdebouncetime5) > debouncedelay) // debouce tijd checken
{
if (ch5 == 1 && laststate5 == 0) { // aan zetten
digitalWrite(7, HIGH);
laststate5 = 1;
lastdebouncetime5 = millis();
} else if (ch5 == 1 && laststate5 == 1){ // uit zetten
digitalWrite(7, LOW);
laststate5 = 0;
lastdebouncetime5 = millis();
}
}
// kanaal 6
if ( input < 1573 || input > 1691 ) { // maak een digitaal aan/uit signaal
ch6 = 0;
} else if (input > 1573 && input < 1691) {
ch6 = 1;
}
if((millis() - lastdebouncetime6) > debouncedelay) // debouce tijd checken
{
if (ch6 == 1 && laststate6 == 0) { // aan zetten
digitalWrite(8, HIGH);
laststate6 = 1;
lastdebouncetime6 = millis();
} else if (ch6 == 1 && laststate6 == 1){ // uit zetten
digitalWrite(8, LOW);
laststate6 = 0;
lastdebouncetime6 = millis();
}
}
// kanaal 7
if ( input < 1691 || input > 1818 ) { // maak een digitaal aan/uit signaal
ch7 = 0;
} else if (input > 1691 && input < 1818) {
ch7 = 1;
}
if((millis() - lastdebouncetime7) > debouncedelay) // debouce tijd checken
{
if (ch7 == 1 && laststate7 == 0) { // aan zetten
digitalWrite(9, HIGH);
laststate7 = 1;
lastdebouncetime7 = millis();
} else if (ch7 == 1 && laststate7 == 1){ // uit zetten
digitalWrite(9, LOW);
laststate7 = 0;
lastdebouncetime7 = millis();
}
}
// kanaal 8
if ( input < 1818 || input > 1959 ) { // maak een digitaal aan/uit signaal
ch8 = 0;
} else if (input > 1818 && input < 1959) {
ch8 = 1;
}
if((millis() - lastdebouncetime8) > debouncedelay) // debouce tijd checken
{
if (ch8 == 1 && laststate8 == 0) { // aan zetten
digitalWrite(10, HIGH);
laststate8 = 1;
lastdebouncetime8 = millis();
} else if (ch8 == 1 && laststate8 == 1){ // uit zetten
digitalWrite(10, LOW);
laststate8 = 0;
lastdebouncetime8 = millis();
}
}
// kanaal 9
if ( input < 1959 || input > 2068 ) { // maak een digitaal aan/uit signaal
ch9 = 0;
} else if (input > 1959 && input < 2068) {
ch9 = 1;
}
if((millis() - lastdebouncetime9) > debouncedelay) // debouce tijd checken
{
if (ch9 == 1 && laststate9 == 0) { // aan zetten
digitalWrite(11, HIGH);
laststate9 = 1;
lastdebouncetime9 = millis();
} else if (ch9 == 1 && laststate9 == 1){ // uit zetten
digitalWrite(11, LOW);
laststate9 = 0;
lastdebouncetime9 = millis();
}
}
//kanaal 10
if ( input < 2068 || input > 2160 ) { // maak een digitaal aan/uit signaal
ch10 = 0;
} else if (input > 2068 && input < 2160) {
ch10 = 1;
}
if((millis() - lastdebouncetime10) > debouncedelay) // debouce tijd checken
{
if (ch10 == 1 && laststate10 == 0) { // aan zetten
digitalWrite(12, HIGH);
laststate10 = 1;
lastdebouncetime10 = millis();
} else if (ch10 == 1 && laststate10 == 1){ // uit zetten
digitalWrite(12, LOW);
laststate10 = 0;
lastdebouncetime10 = millis();
}
}
}
/*
* Read a servo signal on pin 2 and display in the serial monitor
* By Halmar Lakeman
* 13-10-2015
* Last update 28-12-2017
*/
int ch1;
void setup() {
pinMode(2, INPUT);
Serial.begin(9600);
}
void loop() {
ch1 = pulseIn(2, HIGH, 25000);
Serial.print("Pulse width ");
Serial.println(ch1);
delay(500);
}