Vraag over byte

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 3
Geregistreerd: 27 Apr 2023, 17:07

Vraag over byte

Berichtdoor robert1024 » 30 Apr 2023, 16:23

Hallo allemaal,

Ik ben nieuw hier op het forum.
Ik ben het programmeren aan het leren in Arduino, maar ik zeg op voorhand al, ik heb geen programmeer knobbel. :D
Nu heb ik een programma gevonden op het internet :oops: voor mijn diorama wat ik aan het bouwen ben.
Dat programma laat diverse LED's aan en uit zetten.
Nu is dit programma uitgerust met 16 LED's wat ik wat overdreven vind, en dit terug wil brengen naar 4 LED's.

Er staat in het programma de volgende regel waar ik dus de vraag over heb:

#define numleds 16

byte ledpins [ ] = { 0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 } ;


Nu wil ik dit terug brengen naar 4 LED's en heb het volgende geprobeerd, maar zonder resultaat.
Wat doe ik fout?

#define numleds 4

byte ledpins [4] = { 0,2,3,4} ;

Hieronder het volledige programma:

Code: Alles selecteren
//random huis verlichting wel weerstand van 220 ohm op de leds zetten

// leds op A0-A3 en 2-13

#define numleds  16                                                       

byte ledpins [ ] =  { 0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 } ;

void setup( )  {                   

    for ( int  i=1; i <= numleds;  i++ )  {     

    pinMode ( ledpins [ i ], OUTPUT) ;

    digitalWrite ( ledpins [ i ] , HIGH) ;

   }

}

void loop ( )  {   

                digitalWrite ( ledpins [ random ( 0, numleds+1 ) ], lightsw ( ) ) ;

                 delay ( 1000 ) ;                   

}

boolean lightsw ( )  {

  if  ( random (0,100) > 40 ) return LOW ;

   else return HIGH ;

}


Groetjes Robert

Advertisement

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Vraag over byte

Berichtdoor shooter » 05 Mei 2023, 20:49

je laat numleds op 16 syaan dat is dus fout dat wordt dus 4 zoals jezel al zegt en dan zou ik kiezen voor wat analoge pinnen dus A0 en die begint bij 14 en 0 niet gebruiken want dat is een programmeer pin (om serial.print te gebruiken
paul deelen
shooter@home.nl

Berichten: 80
Geregistreerd: 02 Nov 2022, 13:03

Re: Vraag over byte

Berichtdoor ThHe » 06 Mei 2023, 00:28

Ik ben zo vrij geweest je code een beetje te herschreven.
Leren programmeren is veel doen en leren van je fouten.
Opmerkingen:
- Een goede gewoonte is om define met HOOFDLETTERS aan te geven.
- Array zoals ledspins beginnen altijd bij 0 tot het aantal-1.
- Even wennen maar een loop gaat van i=0; i < aantal
- Een statement met 2 mogelijkheden kan geschreven worden als
resultaat = (vergelijking) ? (indien true dit als resultaat) : (indien false dit als resultaat)

maar natuurlijk ook zoals jij het had.

Succes met programmeren en je zal merken dat hoe meer je erin duikt hoe leuker het wordt.

Groetjes Theo

Code: Alles selecteren
#define NLEDS 4                                                     

byte ledpins[] = {2,3,4,5};  // index loop van 0..(NLEDS-1)

void setup( ) 
{
  // Loop begint bij 0
  for(int i=0; i < NLEDS; i++ ) 
  {     
    pinMode ( ledpins [ i ], OUTPUT) ;
    digitalWrite ( ledpins [ i ] , HIGH) ;
  }
}

void loop ( ) 
{   
  digitalWrite ( ledpins [ random (0, NLEDS) ], lightsw ( ) ) ;
  delay ( 1000 ) ;                   
}

int lightsw ( ) 
{
  return random (0,100) > 40 ? LOW : HIGH;
}

Berichten: 3
Geregistreerd: 27 Apr 2023, 17:07

Re: Vraag over byte

Berichtdoor robert1024 » 11 Jun 2023, 12:57

ThHe schreef:Ik ben zo vrij geweest je code een beetje te herschreven.
Leren programmeren is veel doen en leren van je fouten.
Opmerkingen:
- Een goede gewoonte is om define met HOOFDLETTERS aan te geven.
- Array zoals ledspins beginnen altijd bij 0 tot het aantal-1.
- Even wennen maar een loop gaat van i=0; i < aantal
- Een statement met 2 mogelijkheden kan geschreven worden als
resultaat = (vergelijking) ? (indien true dit als resultaat) : (indien false dit als resultaat)

maar natuurlijk ook zoals jij het had.

Succes met programmeren en je zal merken dat hoe meer je erin duikt hoe leuker het wordt.

Groetjes Theo

Code: Alles selecteren
#define NLEDS 4                                                     

byte ledpins[] = {2,3,4,5};  // index loop van 0..(NLEDS-1)

void setup( ) 
{
  // Loop begint bij 0
  for(int i=0; i < NLEDS; i++ ) 
  {     
    pinMode ( ledpins [ i ], OUTPUT) ;
    digitalWrite ( ledpins [ i ] , HIGH) ;
  }
}

void loop ( ) 
{   
  digitalWrite ( ledpins [ random (0, NLEDS) ], lightsw ( ) ) ;
  delay ( 1000 ) ;                   
}

int lightsw ( ) 
{
  return random (0,100) > 40 ? LOW : HIGH;
}


Hallo Theo,

Ik heb het programma aangepast, maar de "originele" en de aangepaste voldeden niet aan mijn vereiste, maar hartelijk dank voor de aanpassing.
Even kort wat het programma inhoud.
Het programma regelt de verlichting in een diorama, en daar zit ook een LED bij die een lasser simuleert.
Nu heb ik het programma volledig omgegooid, en de "lasser" toegevoegd.
Overigens heb ik de "Lasser" wel van internet.
Nu gebruiken beide verlichting de functie "Random".
Ik denk dat deze in elkaars vaarwater zitten, want zou gauw een LED van de wisselend "kantoorverlichting" uit gaat, springt de "Lasser" aan.
Ik weet niet of ik deze onafhankelijk van elkaar kan laten werken, door bv "Random1" en Random2" te gebruiken.
Ik heb het programma hieronder gezet, en idd programmeren werkt verslavend.


//Kantoorverlichting voor diorama

int LED1PIN = A1; // LED in kamer 1
int LED2PIN = A2; // LED in kamer 2
int LED3PIN = A3; // LED in kamer 3
int LED4PIN = A4; // LED in kamer 4 konstant
int LED5PIN = A5; // LED in kamer 5 konstant
int LED12PIN = 12; // LED voor laslicht
int ranNum;

void setup() {
// LED pin aansluitingen op de uitgangen
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);
pinMode(A4, OUTPUT);
pinMode(A5, OUTPUT);
pinMode(12, OUTPUT);

}

void loop() {
Laslicht();
digitalWrite(A4, HIGH);digitalWrite(A5, HIGH); // LED A4 en A5 konstant
ranNum=random(A1,A4); // Wisselende LED verlichting in de kamers
digitalWrite(ranNum, HIGH);
delay(10000);
digitalWrite(ranNum, LOW);


}

void Laslicht() {
int r,count;
count=random(10,60);
for (r=0;r<count;r++)
{
digitalWrite(12, HIGH); // zet Lasled aan
delay(random(60));
digitalWrite(12, LOW); // zet Lasled uit
delay(random(100));
}
//delay(random(4000,12000)); //wacht een bepaalde tijd

}

Met vriendelijke groeten,

Robert

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 21 gasten