Arduino projectje, kom er niet uit iets te dupliceren

Beste leden,

Ik ben bezig om iets relatief simpels (voor de kenners) te creëren.
Ik zit met het volgende:

Ik heb 3 leds en 3 drukknoppen
elke led moet aangaan door de corresponderende knop in te drukken en deze moet ook blijven branden ongeacht of de knop nogmaals word ingedrukt.

Ik heb een design gemaakt die hardwarematig klopt en kunnen testen.

Ik heb een sketch alleen deze is maar voor 1 led, ik krijg het maar niet voor elkaar om de code bijv. te kopieren en plakken en alleen de pinouts te veranderen.

Zie tekening met sketch, in de simulator werkt het nu alleen met de meest rechter led en meest rechter knop.

waar zit je op vast dan? beter je code als tekst copieren.

kort samengevat:

code:


int pinButton = 2;                             dit is 1 knop
int LED = 8;                                   dit is 1 led

void setup() {
pinMode(pinbutton, INPUT);                     knop als input
pinMode(LED,OUTPUT);                           led als output
}

void loop () {
int stateButton = digitalRead(pinButton);      lees de knop in
if (stateButton == 1) {                        is deze ingedrukt
  digitalwrite(LED, HIGH);                     zet dan de led aan
}
}

om dus meerdere leds te maken, moet je meerdere knoppen en leds definieren

voorbeeld 2, gewoon alles 3 keer gemaakt. 3 knoppen, 3 leds, 3keer de code gekopieerd. ik heb niet naar de pin nr's gekeken. kijk dus zelf waar je knoppen (2-3 en 4) en leds (8-9 en 10) aan hangen

code:


int Button1 = 2;
int Button2 = 3;
int Button3 = 4;
int led1 = 8;
int led2 = 9;
int led3 = 10;

void setup() {
pinMode(Button1, INPUT);
pinMode(Button2, INPUT);
pinMode(Button3, INPUT);
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
}

void loop () {
int stateButton = digitalRead(Button1);
if (stateButton == 1) {
  digitalwrite(led1, HIGH);
}

int stateButton = digitalRead(Button3);
if (stateButton == 1) {
  digitalwrite(led2, HIGH);
}

int stateButton = digitalRead(Button2);
if (stateButton == 1) {
  digitalwrite(led3, HIGH);
}

}
ik hou van werken ..., ik kan er uren naar kijken
Anoniem

Hoi,

Het zou duidelijker zijn wanneer je een afbeelding van de code na kopieren zou plaatsen.

Je kan elk lampje en schakelaar een apart nummer geven in het hele programma. Je zou dit nummer ook kunnen veranderen in een variabele.

Dan hoef je je code niet aan te passen bij uitbreiding, enkel het bereik van de variabele.

Op 5 december 2022 12:37:37 schreef fcapri:
waar zit je op vast dan? beter je code als tekst copieren.

kort samengevat:

code:


int pinButton = 2;                             dit is 1 knop
int LED = 8;                                   dit is 1 led

void setup() {
pinMode(pinbutton, INPUT);                     knop als input
pinMode(LED,OUTPUT);                           led als output
}

void loop () {
int stateButton = digitalRead(pinButton);      lees de knop in
if (stateButton == 1) {                        is deze ingedrukt
  digitalwrite(LED, HIGH);                     zet dan de led aan
}
}

om dus meerdere leds te maken, moet je meerdere knoppen en leds definieren

voorbeeld 2, gewoon alles 3 keer gemaakt. 3 knoppen, 3 leds, 3keer de code gekopieerd.

code:




\[bijlage][/quote]

}

Nou dat dacht ik dus ook, maar de simulator geeft dan een hoop foutcodes aan, 3 daarvan heb ik op weten te lossen.

Deze staan er nog in (ps dit is de code van jou Fcapri)

Edit:

Het is gelukt, bedankt Fcapri!
Paar kleine foutjes weten te vinden en nu werkt alles zoals het moet, blij mee!

Anoniem

was de oorzaak het meerdere keren declareren van int statebutton?

Het valt me op dat je vrolijkde naam Button blijft gebruiken.
Waarschijnlijk is dit niet jouw eigenwoordkeuze.
Logischer zou zijn buttonState ipv statebutton.

Inderdaad, ik ben zelf echt nog een amateur op Arduino gebied en moet het nu nog hebben van bestaande sketches.

Ik gebruik het ook te weinig om te onthouden. Maar iig blij met het resultaat, nu het simpele werk... In elkaar zetten ;)

Krijgen jullie per regel betaald ;) ??

Ik zou schrijven:

c code:



if (digitalRead(Button2)) {
  digitalwrite(led3, HIGH);
}


code:


int buttons[] = {2,3,4};
#define NBUTTONS (sizeof(buttons) / sizeof (buttons[0])) 
int leds[]= {8,9,10};

...
void loop (void) 
{
  for (int i=0;i<NBUTTONS;i++)
     if (digitalRead (buttons[i])) digitalWrite (leds[i], 1);
}
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Keurig, @rew! Lussen ("loops") zijn de aangewezen manier om code overzichtelijk en kort te houden. De declaraties in de inleiding zijn misschien wel een uitdaging voor sommigen.

Of met een funktie:

code:



void setup() 
{
}

void SwitchLed(int Pin, int Led)
{  pinMode(Pin, INPUT);                 // knop als input
   pinMode(Led, OUTPUT);                // led als output
   if (digitalRead(Pin))                // Als pin hoog is
   {  digitalwrite(Led, HIGH);          // Dan Led aan
   }
}

void loop () 
{  SwitchLed(2,  8);   // Pin 2 is button, pin 8 is led
   SwitchLed(3,  9);
   SwitchLed(4, 10);
}

Edit : Nu met de juiste pin nummers

houd het vooral nog simpel bij een beginner.

declareren van variabelen, correct zetten inputs, outputs, een input inlezen in een variabele, en dan vergelijken met een andere.

natuurlijk kan het veel korter, zoals rew doet, maar een beginner verstaat daar niks uit

ik hou van werken ..., ik kan er uren naar kijken

Pfff.... Laat mij maar liever knutselen ;)

Wel leuk, maar ben onderhand te oud om het geduld op te brengen hier echt voor te gaan leren.
Daarbij gebruik ik het gewoon te weinig.

Op 5 december 2022 20:47:33 schreef klabam:
Pfff.... Laat mij maar liever knutselen ;)

Wel leuk, maar ben onderhand te oud om het geduld op te brengen hier echt voor te gaan leren.
Daarbij gebruik ik het gewoon te weinig.

bwa, het valt wel mee hoor.
leercurve is heel hoog.

je hebt nu een werkende programma, save dat maar.
denk nu eens na hoe je er kan voor zorgen, dat ENKEL de led brand van de eerste die afgedrukt heeft. beetje zoals een spelprogramma waar je om het snelst moet afdrukken.
is maar een kleine wijziging hoor. een arduino gaat heeel snel door zijn loop functie.
dus je loopt, tot er een knop ingedrukt is, en die betreffende zet je hoog. en dan
-blokkeer je de rest
of
-stop je de loop zodat die enkel met een reset weer her begint.

met zulke kleine aanpassingen leer je heel snel.
ik begon van 2x niks, en ben heel in het begin al snel tot dit gekomen.
dit is ook maar een arduino van 1,5€, een display van 3€, een RTC clockje van 0,5€ en wat weerstandjes.
https://www.youtube.com/watch?v=q4aHB_H-uug&ab_channel=andydevuyst

ik hou van werken ..., ik kan er uren naar kijken

Inmiddels is het projectje geplaatst en in principe werkt het naar behoren maarrrrr........

Blijkbaar is een Arduino nogal gevoelig voor bepaalde inductie/magnetisch velden o.i.d.

2 meter naast de arduino staat een 3 fase waterpomp.
Elke keer als deze start gaan er spontaan random leds branden van mijn arduino....soms 1 soms 2

Enig idee hoe ik dit kan elimineren??

bprosman

Golden Member

Op 9 december 2022 21:07:14 schreef klabam:
Inmiddels is het projectje geplaatst en in principe werkt het naar behoren maarrrrr........

Blijkbaar is een Arduino nogal gevoelig voor bepaalde inductie/magnetisch velden o.i.d.

2 meter naast de arduino staat een 3 fase waterpomp.
Elke keer als deze start gaan er spontaan random leds branden van mijn arduino....soms 1 soms 2

Enig idee hoe ik dit kan elimineren??

Hoe schakel je die waterpomp ? Vrijloopdiode over de relais gebruikt ?

De jongere generatie loopt veel te vaak zijn PIC achterna.

Die pomp is compleet stand alone.
Is van een ander systeem.
Staat toevallig in dezelfde ruimte.

Dat is geen antwoord. Zeg nu eens: hoe wordt die pomp geschakeld?

[Bericht gewijzigd door Paulinha_B op vrijdag 9 december 2022 23:38:45 (51%)

die pomp veroozaakt blijkbaar een ferme storing. dan is de vraag of je arduino dat oppikt via zijn net adapter (dan is die niet genoeg ontstoort) of via lange draadjes.
heb je het ook als je de arduino aan een powerbank hangt, losgeschakelt van het net?

in deze software dat je nu maakte, kan de led enkel aan, er is geen toestand om ze af te zetten.
de code rammelt ook, er is geen anti dender enzo.
je zou de code zo kunnen maken dat de ingang bv minstens 300ms hoog moeten zijn (knop minstens 300ms indrukken) voordat die een led schakelt, dan ga je al veel storing weghalen.
als de storing echter zo hoog is dat led ook uit gaan, dan heb je een groter probleem.

zowieso is nr 1 het probleem weghalen ipv symptomen bestrijden.

[Bericht gewijzigd door fcapri op zaterdag 10 december 2022 09:00:32 (49%)

ik hou van werken ..., ik kan er uren naar kijken

[Ik heb het topic niet gevolgd, dus misschien al gezegd]
Heb je lange bedrading aan het boardje zitten? Een Arduino op zich is niet gevoelig voor stoorsignalen, maar als je die signalen op z'n pinnen laat binnenstormen dan heeft dat uiteraard effect.
En ja, voeding... misschien helpt een klein elco'tje op Vin.

"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein

Gaan sommige leds ook random uit?
Dan wordt de Arduino gereset en moet je de voeding ontstoren.

Gaan ze alleen random aan? Dan kun je de button signalen ontstoren. Ofwel in software, of wel in hardware door condensatortjes toe te voegen (tussen pin 2,3,4 en massa).

Software debounce bijvoorbeeld:

code:



void setup() 
{
}

void SwitchLed(int Pin, int Led)
{  pinMode(Pin, INPUT);                 // knop als input
   pinMode(Led, OUTPUT);                // led als output
   
   int Count = 0;                       // Teller
   while(digitalRead(Pin))              // Zolang pin hoog is
   {  if(Count++ > 50)                  // En 50 x hoog blijft
      {  digitalwrite(Led, HIGH);       // Dan Led aan
         break;
      }
      else                              // Nog geen 50 x?
      {  delay(1);                      // 1 milliseconde wachten 
      } 
   }
}

void loop () 
{  SwitchLed(2,  8);   // Pin 2 is button, pin 8 is led
   SwitchLed(3,  9);
   SwitchLed(4, 10);
}