LED inschakelen met drukknop
10 berichten
• Pagina 1 van 1
LED inschakelen met drukknop
Ik ben een nieuweling binnen dit forum en ik zit met een probleem. Misschien kan iemand mij helpen.
Ik heb een buttonbox voor een flightsimulator gemaakt. Met de buttonbox, die werkt met een Arduino ProMicro, maak ik gebruik van 6 potentiometers en 16 drukknoppen. De software die ik gebruik is een aangepaste versie van wim_s_button_code.ino gemaakt door Wimwamyoe. De buttonbox werkt in principe naar behoren en alle potentiometers en drukknoppen werken.
Het probleem:
Ik wil graag dat er een LED gaat branden wanneer een drukknop wordt ingedrukt. Welke drukknop maakt niet uit, want die kan ik binnen de Flightsimulator verder definiëren. Ik gebruik al veel pinnen, maar pin 3 is nog vrij.
Een LED laten branden via een drukknop zou geen probleem moeten zijn, maar omdat ik gebruik maak van een 4x4 knoppen matrix, heb ik geen idee hoe ik dit kan realiseren. De rijen van de drukknoppen zijn aangesloten op de pinnen 7,6,5,4 en de kolommen zitten aan de pinnen 10,16,14 en 15. De potentiometers zitten aan de pinnen A0,A1,A2,A3,A8 en A9
Kan iemand mij helpen om op het goede spoor te komen?
Ik heb een buttonbox voor een flightsimulator gemaakt. Met de buttonbox, die werkt met een Arduino ProMicro, maak ik gebruik van 6 potentiometers en 16 drukknoppen. De software die ik gebruik is een aangepaste versie van wim_s_button_code.ino gemaakt door Wimwamyoe. De buttonbox werkt in principe naar behoren en alle potentiometers en drukknoppen werken.
Het probleem:
Ik wil graag dat er een LED gaat branden wanneer een drukknop wordt ingedrukt. Welke drukknop maakt niet uit, want die kan ik binnen de Flightsimulator verder definiëren. Ik gebruik al veel pinnen, maar pin 3 is nog vrij.
Een LED laten branden via een drukknop zou geen probleem moeten zijn, maar omdat ik gebruik maak van een 4x4 knoppen matrix, heb ik geen idee hoe ik dit kan realiseren. De rijen van de drukknoppen zijn aangesloten op de pinnen 7,6,5,4 en de kolommen zitten aan de pinnen 10,16,14 en 15. De potentiometers zitten aan de pinnen A0,A1,A2,A3,A8 en A9
Kan iemand mij helpen om op het goede spoor te komen?
Advertisement
Re: LED inschakelen met drukknop
Kun je een link geven naar wim_s_button_code.ino en naar Wimwamyoe ?
Pinmapping van de Sparkfun Pro Micro (bron:https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide/all)
Wat zit er aan pin 0, 1 en 2 ?
Wil je bij iedere knop dat de led even aan gaat ?
Dus je wilt niet de led aanzetten vanaf de computer ?
Wil je dat de led een vaste tijd aan gaat, ongeacht hoe lang of hoe kort de knop wordt ingedrukt ?
Of wil je dat de led aan blijft zolang er een knop is ingedrukt ?
Mag er dan ook overschakeld worden naar andere knoppen, terwijl die led aan is ?
In de sketch wordt misschien een library gebruikt voor het keypad.
Dan wordt er ergens een functie aangeroepen om de ingedrukte knoppen op te vragen. Daar kun je toevoegen dat de led aan gaat.
Pinmapping van de Sparkfun Pro Micro (bron:https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide/all)
Wat zit er aan pin 0, 1 en 2 ?
Wil je bij iedere knop dat de led even aan gaat ?
Dus je wilt niet de led aanzetten vanaf de computer ?
Wil je dat de led een vaste tijd aan gaat, ongeacht hoe lang of hoe kort de knop wordt ingedrukt ?
Of wil je dat de led aan blijft zolang er een knop is ingedrukt ?
Mag er dan ook overschakeld worden naar andere knoppen, terwijl die led aan is ?
In de sketch wordt misschien een library gebruikt voor het keypad.
Dan wordt er ergens een functie aangeroepen om de ingedrukte knoppen op te vragen. Daar kun je toevoegen dat de led aan gaat.
Re: LED inschakelen met drukknop
De link naar deze .ino file is: https://drive.google.com/file/d/1dKqA0W ... hs0sM/view
De bouw van de door mij gebruikte buttonbox heb ik van wimwamjoey: https://www.youtube.com/watch?v=wkY1NsbWj5I&t=1154s
De .ino file heb ik aangepast door o.a. de opties voor de rotary encoders te verwijderen.
De pinnen 0,1 en 2 zijn negens aan verbonden.
De Arduino wordt ingebouwd in een Throttle (foto), die ik met een 3d-printer heb gemaakt. De bedoeling van de LED is, dat wanneer de parkeerrem (aan/uit schakelaar) wordt geactiveerd, dat de LED dan gaat branden. Dit is de enige LED in de Throttle. De LED moet dus blijven branden zolang de betreffende schakelaar 'aan' staat.
De throttle gebruikt libraries Keypad.h en Joystick.h en is, nadat de arduino van het programma is voorzien, een 'standalone' joystick, die als zodanig zelfstandig werkt. Het aansturen van de LED via de computer is dus niet wenselijk omdat alles nu via 1 usb-kabel met de pc verbonden is.
Ik hoop dat dit voldoende informatie is om voor een oplossing te komen.
De bouw van de door mij gebruikte buttonbox heb ik van wimwamjoey: https://www.youtube.com/watch?v=wkY1NsbWj5I&t=1154s
De .ino file heb ik aangepast door o.a. de opties voor de rotary encoders te verwijderen.
De pinnen 0,1 en 2 zijn negens aan verbonden.
De Arduino wordt ingebouwd in een Throttle (foto), die ik met een 3d-printer heb gemaakt. De bedoeling van de LED is, dat wanneer de parkeerrem (aan/uit schakelaar) wordt geactiveerd, dat de LED dan gaat branden. Dit is de enige LED in de Throttle. De LED moet dus blijven branden zolang de betreffende schakelaar 'aan' staat.
De throttle gebruikt libraries Keypad.h en Joystick.h en is, nadat de arduino van het programma is voorzien, een 'standalone' joystick, die als zodanig zelfstandig werkt. Het aansturen van de LED via de computer is dus niet wenselijk omdat alles nu via 1 usb-kabel met de pc verbonden is.
Ik hoop dat dit voldoende informatie is om voor een oplossing te komen.
- Bijlagen
-
- Throttle.jpg (83.85 KiB) 8234 keer bekeken
Re: LED inschakelen met drukknop
hans52 schreef:Ik hoop dat dit voldoende informatie is
Het is zelden genoeg Je stelt een vraag over je sketch, zonder jouw sketch te laten zien. Dan krijg je soms als antwoord: "de fout zit in regel 139".
Welke code heeft de parkeerrem ?
Die staat hier:
- Code: Alles selecteren
//BUTTON MATRIX
//first change number of rows and columns to match your button matrix,
//then replace all "?" with numbers (starting from 0)
byte buttons[NUMROWS][NUMCOLS] = {
{?,?,?,?},
{?,?,?,?},
{?,?,?,?},
{?,?,?,?}
};
Stel dat je een 'P' hebt voor de parkeerrem.
Dan kijk je wanneer die doorkomt. Daar kun je de code toevoegen.
Nog wel even bij de globale variabelen een const int ledPin = 2; toevoegen.
- Code: Alles selecteren
....
for (int i=0; i<LIST_MAX; i++)
{
if ( buttbx.key[i].stateChanged )
{
// ---------------------------------------
// Toegevoegd in 2020
// Led gaat aan voor parkeerrem
// ---------------------------------------
if( buttbx.key[i].kchar == 'P') // hier de juist code in plaats van 'P'
{
if( buttbx.key[i].kstate == PRESSED)
{
digitalWrite( ledPin, HIGH); // led aan
}
if( buttbx.key[i].kstate == RELEASED)
{
digitalWrite( ledPin, LOW); // led uit
}
}
// ---------------------------------------
// Einde toevoeging
// ---------------------------------------
switch (buttbx.key[i].kstate)
{
case PRESSED:
....
Een led heeft een weerstand nodig, dat zul je wel weten neem ik aan.
Waarschijnlijk is er nog iets nodig voor als de schakelaar al is ingedrukt op het moment dat de buttonbox wordt aangezet.
Re: LED inschakelen met drukknop
Ik heb de toevoeging geprobeerd, maar er gaat ergens iets niet goed.
Ik wil de code graag toevoegen, maar wanneer ik de .ino file wil toevoegen als bijlage, krijg ik de melding dat een ino file niet toegevoegd kan/mag worden.
Hoe kan ik de code toevoegen?
Ik wil de code graag toevoegen, maar wanneer ik de .ino file wil toevoegen als bijlage, krijg ik de melding dat een ino file niet toegevoegd kan/mag worden.
Hoe kan ik de code toevoegen?
Re: LED inschakelen met drukknop
Wat gaat er mis met de sketch ? Krijg je foutmeldingen van de compiler ? Gaat het ledje niet aan ?
Lukt het niet om de sketch op dit forum in je bericht tussen code-tags te zetten ? Met de knop "Code" krijg je de code-tags [ code ] en [ / code ] maar dan zonder spaties. Als je daar je sketch tussen zet, dan ziet het er beter uit.
Misschien lukt een zip-bestand als bijlage ?
Sommigen zetten de sketch ergens ander neer, maar dat werkt niet altijd goed. Soms moet er ingelogd worden om het te kunnen zien.
Lukt het niet om de sketch op dit forum in je bericht tussen code-tags te zetten ? Met de knop "Code" krijg je de code-tags [ code ] en [ / code ] maar dan zonder spaties. Als je daar je sketch tussen zet, dan ziet het er beter uit.
Misschien lukt een zip-bestand als bijlage ?
Sommigen zetten de sketch ergens ander neer, maar dat werkt niet altijd goed. Soms moet er ingelogd worden om het te kunnen zien.
Re: LED inschakelen met drukknop
De code controleren en overzetten naar de Arduino gaat probleemloos, alleen de LED gaat niet branden. Ik heb geprobeerd om de LED aan te sluiten op pin 2 en pin 3 (uiteraard de pinmode aangepast), maar helaas, de LED doet niet wat ik graag zou willen.
Het zippen van de file was ook geen succes, dus ik heb de code op de aangegeven wijze tussen de codes gekopieerd.
Ik hoop dat je iets kunt vinden waarom het fout gaat. In ieder geval hartelijk dank voor de snelle reactie.
Hans
Het zippen van de file was ook geen succes, dus ik heb de code op de aangegeven wijze tussen de codes gekopieerd.
Ik hoop dat je iets kunt vinden waarom het fout gaat. In ieder geval hartelijk dank voor de snelle reactie.
Hans
- Code: Alles selecteren
/*Aangepaste code van de wim_s_button_code.ino gemaakt door Wimwamyoe
* De pinnummering is gebaseerd op het gebruik van een Arduino ProMicro.
* Deze code wordt gebruikt om binnen X-Plane 11 de Boeing 737 Throttle
* aan te sturen, die gemaakt is naar het voorbeeld van Heli Mech uit Brunei.
* Totaal worden er 6 potentiometers gebruikt en 10 knoppen. (kan zonder aanpassing uitgebreid worden naar 16 knoppen.)
* Het is de bedoeling dat 1 knop gekoppeld wordt aan een LED. Deze LED heeft de naam parkLed
* en moet aan gaan wanneer de knop voor de 'ParkBrake' actief is.
*/
#include <Keypad.h>
#include <Joystick.h>
//DEFINITIONS
#define ENABLE_PULLUPS
#define NUMBUTTONS 16 //aantal knoppen
#define NUMROWS 4 //aantal rijen
#define NUMCOLS 4 //aantal kolommen
//#define ledPin 3 //LED voor de ParkBrake
const int ledPin=3;
//KNOPPEN MATRIX
//Groepeer de knoppen en nummer ze. Begin bij 0.
byte buttons[NUMROWS][NUMCOLS] = {
{0,1,2,3},
{4,5,6,7},
{8,9,10,11},
{12,13,14,15}
};
//KNOPPEN MATRIX DEEL 2
byte rowPins[NUMROWS] = {7,6,5,4}; //Geef de pinnummers aan voor de rijen
byte colPins[NUMCOLS] = {10,16,14,15}; //Geef de pinnummers aan voor de kolommen
Keypad buttbx = Keypad( makeKeymap(buttons), rowPins, colPins, NUMROWS, NUMCOLS);
//JOYSTICK SETTINGS
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,
JOYSTICK_TYPE_JOYSTICK,
16, //Aantal knoppen
0, //Aantal HAT-switches.
//Set de Assen op "true" van de potentiometers die je gaat gebruiken
true, // y axis
true, // x axis
true, // z axis
true, // rx axis
true, // ry axis
true, // rz axis
false, // rudder
false, // throttle
false, // accelerator
false, // brake
false); // steering wheel
const int numReadings = 20;
int readings[numReadings]; // the readings from the analog input
int index = 0; // the index of the current reading
int total = 0; // the running total
int currentOutputLevel = 0;
//POTENTIOMETERS DEEL 1
//Voeg alle assen toe die hierboven op 'Enabled' staan
int zAxis_ = 0;
int RxAxis_ = 0;
int xAsis_ = 0;
int yAxis_ = 0;
int RyAxis_ = 0;
int RzAxis_ = 0;
//POTENTIOMETERS DEEL 2
//Geef aan het pinnummer waaraan de potentiometers gekoppeld is.
int potentiometerPin1 = A0;
int potentiometerPin2 = A1;
int potentiometerPin3 = A2;
int potentiometerPin4 = A3;
int potentiometerPin5 = A8;
int potentiometerPin6 = A9;
const bool initAutoSendState = true;
void setup() {
Joystick.begin();
for (int thisReading = 0; thisReading < numReadings; thisReading++) {
readings[thisReading] = 0;
}
}
void loop() {
CheckAllButtons();
CheckAllPotentiometers();
}
//POTENTIOMETERS DEEL 3
// Verander de details van iedere potentiometer die je gebruikt.
void CheckAllPotentiometers(){
//potentiometer 1 Speedbrake
currentOutputLevel = getAverageOutput(potentiometerPin1);
zAxis_ = map(currentOutputLevel,0,1023,0,255);
Joystick.setZAxis(zAxis_);
//potentiometer 2 Thrust 1
currentOutputLevel = getAverageOutput(potentiometerPin2);
RxAxis_ = map(currentOutputLevel,0,1023,0,255);
Joystick.setRxAxis(RxAxis_);
//potentiometer 3 Thrust 2
currentOutputLevel = getAverageOutput(potentiometerPin3);
yAxis_ = map(currentOutputLevel,0,1023,0,255);
Joystick.setYAxis(yAxis_);
//potentiometer 4 Thrust Reverse 1
currentOutputLevel = getAverageOutput(potentiometerPin4);
xAsis_ = map(currentOutputLevel,0,1023,0,255);
Joystick.setXAxis(xAsis_);
//potentiometer 5 Thrust Reverse 2
currentOutputLevel = getAverageOutput(potentiometerPin5);
RyAxis_ = map(currentOutputLevel,0,1023,0,255);
Joystick.setRyAxis(RyAxis_);
//potentiometer 6 Flaps
currentOutputLevel = getAverageOutput(potentiometerPin6);
RzAxis_ = map(currentOutputLevel,0,1023,0,255);
Joystick.setRzAxis(RzAxis_);
}
int getAverageOutput(int pinToRead){
index = 0;
total = 0;
while (index < numReadings){
readings[index] = analogRead(pinToRead);
total = total + readings[index];
index = index + 1;
//delay (1);
}
return total / numReadings;
}
void CheckAllButtons(void) {
if (buttbx.getKeys())
{
for (int i=0; i<LIST_MAX; i++)
{
if ( buttbx.key[i].stateChanged )
{
// ---------------------------------------
// Toegevoegd in 2020
// Led gaat aan voor parkeerrem
// ---------------------------------------
if( buttbx.key[i].kchar == '1') // hier de juist code in plaats van 'P'
{
if( buttbx.key[i].kstate == PRESSED)
{
digitalWrite( ledPin, HIGH); // led aan
}
if( buttbx.key[i].kstate == RELEASED)
{
digitalWrite( ledPin, LOW); // led uit
}
// ---------------------------------------
// Einde toevoeging
// ---------------------------------------
}
switch (buttbx.key[i].kstate) {
case PRESSED:
case HOLD:
Joystick.setButton(buttbx.key[i].kchar, 1);
break;
case RELEASED:
case IDLE:
Joystick.setButton(buttbx.key[i].kchar, 0);
break;
}
}
}
}
}
Re: LED inschakelen met drukknop
Dit was een belangrijke vraag:
Als ik die code wist, dan kon ik dat meteen in de sketch zetten.
En dat weet ik nu nog steeds niet.
Laat ik maar gokken op een 1, dus niet de leesbare ASCII waarde van 1, maar een gewoon getal, een één.
Dan test je in het if-statement ook op het getal één:
De Keypad library wordt vrijwel altijd met de leesbare ASCII tekens gebruikt.
Daarom zie je in alle voorbeelden een '0', '1', '2', '3' enzovoorts, met enkele quotes.
https://www.pjrc.com/teensy/td_libs_Keypad.html
https://playground.arduino.cc/Code/Keypad/
https://github.com/Chris--A/Keypad/blob/master/examples/HelloKeypad/HelloKeypad.ino
Als het op die manier was, dan zou je dus ook in de computer testen op de ASCII waarde.
Nu gebruik je gewone getallen, dan kan ook.
Kun je de tekst van de sketch netter maken ? Zet alle spaties, alle komma's, alle inspringen goed. Als de tekst van de sketch een rommeltje is, dan zal de werking ook wel een rommeltje zijn
Welke code heeft de parkeerrem ?
Die staat hier:
- Code: Alles selecteren
//BUTTON MATRIX
//first change number of rows and columns to match your button matrix,
//then replace all "?" with numbers (starting from 0)
byte buttons[NUMROWS][NUMCOLS] = {
{?,?,?,?},
{?,?,?,?},
{?,?,?,?},
{?,?,?,?}
};
Als ik die code wist, dan kon ik dat meteen in de sketch zetten.
En dat weet ik nu nog steeds niet.
Laat ik maar gokken op een 1, dus niet de leesbare ASCII waarde van 1, maar een gewoon getal, een één.
Dan test je in het if-statement ook op het getal één:
- Code: Alles selecteren
if( buttbx.key[i].kchar == 1)
De Keypad library wordt vrijwel altijd met de leesbare ASCII tekens gebruikt.
Daarom zie je in alle voorbeelden een '0', '1', '2', '3' enzovoorts, met enkele quotes.
https://www.pjrc.com/teensy/td_libs_Keypad.html
https://playground.arduino.cc/Code/Keypad/
https://github.com/Chris--A/Keypad/blob/master/examples/HelloKeypad/HelloKeypad.ino
Als het op die manier was, dan zou je dus ook in de computer testen op de ASCII waarde.
Nu gebruik je gewone getallen, dan kan ook.
Kun je de tekst van de sketch netter maken ? Zet alle spaties, alle komma's, alle inspringen goed. Als de tekst van de sketch een rommeltje is, dan zal de werking ook wel een rommeltje zijn
Re: LED inschakelen met drukknop
HET WERKT!!!
Ik heb nog eens gekeken naar de code
if( buttbx.key[i].kchar == 1)
Ik zag dat bij mij de 1 tussen de ' ' stond.
Die ' heb ik verwijderd en alles werkt nu zoals ik het voor ogen had.
Ik kan nu ieder getal tussen de 0 en de 15 gebruiken, waarna de LED gaat branden bij de daarbij behorende toets.
PERFECT.
Ik zal de code nog gaan fatsoeneren, maar hartelijk dank voor alles!!!
Hans
Ik heb nog eens gekeken naar de code
if( buttbx.key[i].kchar == 1)
Ik zag dat bij mij de 1 tussen de ' ' stond.
Die ' heb ik verwijderd en alles werkt nu zoals ik het voor ogen had.
Ik kan nu ieder getal tussen de 0 en de 15 gebruiken, waarna de LED gaat branden bij de daarbij behorende toets.
PERFECT.
Ik zal de code nog gaan fatsoeneren, maar hartelijk dank voor alles!!!
Hans
Re: LED inschakelen met drukknop
Mooi dat het werkt
Als je de pinnen voor de I2C bus vrij maakt, dan kun je met een I/O expander extra pinnen maken: https://www.adafruit.com/product/732.
Je kunt ook de leds van een ledstrip gebruiken. Die kun je los knippen en dan met draden weer verbinden, zodat je ze in elke positie kunt monteren. De meeste ledstrips gebruiken slechts één pin van de Arduino en dat kan iedere willekeurige digitale pin zijn.
Er zijn dus nog mogelijkheden genoeg
Als je de pinnen voor de I2C bus vrij maakt, dan kun je met een I/O expander extra pinnen maken: https://www.adafruit.com/product/732.
Je kunt ook de leds van een ledstrip gebruiken. Die kun je los knippen en dan met draden weer verbinden, zodat je ze in elke positie kunt monteren. De meeste ledstrips gebruiken slechts één pin van de Arduino en dat kan iedere willekeurige digitale pin zijn.
Er zijn dus nog mogelijkheden genoeg
10 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 23 gasten