Waar moet ik beginnen??
Re: Waar moet ik beginnen??
[code][/code]
/*
Under construction
Date: 11/05/2021
Author: Gij kieken
Purpose: Switch a couple of Led's On and Off at different times
*/
const byte LED1PIN = 4; //LED 1 on pin D4
#define On true
#define Off false
unsigned long currenttime = millis();
unsigned long previousMillis1 = 0; //will store last time LED 1 was updated
//unsigned long previousMillisn = 0; //will store last time LED n was updated
const byte num1Events = 10; //max number of time events for Led 1
int time1Seq[num1Events] = {2000, 20, 50, 60, 50, 1000, 3000, 20, 60, 30}; //incremental On/Off sequences Led 1
bool led1State = Off; //initial led1State
void setup() {
pinMode(LED1PIN, OUTPUT); //Led 1 as output
Serial.begin(9600);
}
void loop() {
static byte T1 = 0;
static byte T2 = 0;
unsigned long currentMillis = millis();
const byte ledState = digitalRead(LED1PIN);
Serial.println(ledState);
Serial.println(millis() );
digitalWrite( 4,led1State);
if (currentMillis - previousMillis1 >= time1Seq[T1]) {
T1++;
previousMillis1 = currentMillis;
if (led1State == Off) {
led1State = On;
} else {
led1State = Off;
}
if (T1 == num1Events) {
T1 = 0; //start over again
}
}
}
/*
Under construction
Date: 11/05/2021
Author: Gij kieken
Purpose: Switch a couple of Led's On and Off at different times
*/
const byte LED1PIN = 4; //LED 1 on pin D4
#define On true
#define Off false
unsigned long currenttime = millis();
unsigned long previousMillis1 = 0; //will store last time LED 1 was updated
//unsigned long previousMillisn = 0; //will store last time LED n was updated
const byte num1Events = 10; //max number of time events for Led 1
int time1Seq[num1Events] = {2000, 20, 50, 60, 50, 1000, 3000, 20, 60, 30}; //incremental On/Off sequences Led 1
bool led1State = Off; //initial led1State
void setup() {
pinMode(LED1PIN, OUTPUT); //Led 1 as output
Serial.begin(9600);
}
void loop() {
static byte T1 = 0;
static byte T2 = 0;
unsigned long currentMillis = millis();
const byte ledState = digitalRead(LED1PIN);
Serial.println(ledState);
Serial.println(millis() );
digitalWrite( 4,led1State);
if (currentMillis - previousMillis1 >= time1Seq[T1]) {
T1++;
previousMillis1 = currentMillis;
if (led1State == Off) {
led1State = On;
} else {
led1State = Off;
}
if (T1 == num1Events) {
T1 = 0; //start over again
}
}
}
Advertisement
Re: Waar moet ik beginnen??
beste Gij Kieken ,
Heb een beetje zitten schuiven in jou code.
Alleen vraag ik me af wat static byte T1 = 0; voor functie heeft in de code?
Heb het aantal event vergroot naar 10 . zodat ik steeds het zelfde patroon kreeg .
bij een oneven aantal was dat niet zo omdat denk true en false steeds om en om gaan.
wat zou ik voor problemen kunnen krijgen als ik het aantal events naar bv 100 zal brengen?
gr RichardZ
Heb een beetje zitten schuiven in jou code.
Alleen vraag ik me af wat static byte T1 = 0; voor functie heeft in de code?
Heb het aantal event vergroot naar 10 . zodat ik steeds het zelfde patroon kreeg .
bij een oneven aantal was dat niet zo omdat denk true en false steeds om en om gaan.
wat zou ik voor problemen kunnen krijgen als ik het aantal events naar bv 100 zal brengen?
gr RichardZ
- Gij Kieken
-
- Berichten: 631
- Geregistreerd: 15 Nov 2015, 11:54
Re: Waar moet ik beginnen??
@Richard,
Afhankelijk van hoe je initieel start (ofwel Aan of Uit)kom je anders uit in de sequence en heb je bijvoorbeeld dan 2x Led Uit na elkaar.
Het is de bedoeling dit zelf bij te houden.
Uitbreiden ,kan, moet je proef ondervinding vast stellen.
De Uno heeft ook zijn beperkingen.
Moest je dit echt willen ,dan moet toch wel eens dieper nadenken of het dat wel is wat je wil en als de matrix eventueel te vereenvoudigen is.
Static, heel kort door de bocht, betekend dit
-de eerste keer door de loop wordt T1 geinitialiseert
-de volgende keren door de loop wordt er niet meet naar deze regel gekeken
-zo houdt T1 zijn waarde na de functie aanroep i.v.p. iedere keer nul te worden
Afhankelijk van hoe je initieel start (ofwel Aan of Uit)kom je anders uit in de sequence en heb je bijvoorbeeld dan 2x Led Uit na elkaar.
Het is de bedoeling dit zelf bij te houden.
Uitbreiden ,kan, moet je proef ondervinding vast stellen.
De Uno heeft ook zijn beperkingen.
Moest je dit echt willen ,dan moet toch wel eens dieper nadenken of het dat wel is wat je wil en als de matrix eventueel te vereenvoudigen is.
Static, heel kort door de bocht, betekend dit
-de eerste keer door de loop wordt T1 geinitialiseert
-de volgende keren door de loop wordt er niet meet naar deze regel gekeken
-zo houdt T1 zijn waarde na de functie aanroep i.v.p. iedere keer nul te worden
Re: Waar moet ik beginnen??
RichardZ schreef:Dus nu wil ik om te beginnen ledjes laten branden die aan en uit gaan
op willekeurige tijdstippen
- Code: Alles selecteren
int boerderij = 2; // Boerderij led op D2
int hooiberg = 3; // hooiberg led op D3
int lantaarnpaal = 4; // lantaarnpaal-led op D4
void setup() {
pinMode(boerderij , OUTPUT);
pinMode(hooiberg , OUTPUT);
pinMode(lantaarnpaal , OUTPUT);
}
void loop() {
int aan = random(1000); // Kies een getal tussen 0 en 1000
int uit = random(1000); // Kies een getal tussen 0 en 1000
if (aan > 500) {
digitalWrite(lantaarnpaal, HIGH);
digitalWrite(hooiberg, HIGH);
}
if (aan > 700) {
digitalWrite(boerderij, HIGH);
}
if ((uit < 800) && (digitalRead(lantaarnpaal) == HIGH)) {
digitalWrite(lantaarnpaal, LOW);
}
if ((uit < 500) && (digitalRead(hooiberg) == HIGH)) {
digitalWrite(hooiberg, LOW);
}
if ((uit < 200) && (digitalRead(boerderij) == HIGH)) {
digitalWrite(boerderij, LOW);
}
delay(random(1000,4000));
}
Probeer het eens uit, en speel vervolgens met de waardes in de if-statements.
Succes!
Re: Waar moet ik beginnen??
Hallo beste ctunes,
heb een beetje lopen rommelen in je code om hem een beetje te begrijpen.
Ik merkte als ik de int aan = random (1000) veranderde in 100 bv dat er dan geen ledjes gaan branden.
en als ik het goed begrijp is de regel met de delay dat hij de ene keer 1000millis wacht met de loop en daarna 4000millis?
delay(random(1000,4000));
Je kan de lampjes wel afzonderlijk van elkaar laten functioneren, alleen wil ik het iets nauwkeuriger doen,
omdat het samen gaat lopen met een muziekje.
heb een beetje lopen rommelen in je code om hem een beetje te begrijpen.
Ik merkte als ik de int aan = random (1000) veranderde in 100 bv dat er dan geen ledjes gaan branden.
en als ik het goed begrijp is de regel met de delay dat hij de ene keer 1000millis wacht met de loop en daarna 4000millis?
delay(random(1000,4000));
Je kan de lampjes wel afzonderlijk van elkaar laten functioneren, alleen wil ik het iets nauwkeuriger doen,
omdat het samen gaat lopen met een muziekje.
Re: Waar moet ik beginnen??
RichardZ schreef:Hallo beste ctunes,
heb een beetje lopen rommelen in je code om hem een beetje te begrijpen.
Ik merkte als ik de int aan = random (1000) veranderde in 100 bv dat er dan geen ledjes gaan branden.
Dat is logisch: random(1000) geeft een getal tussen 0 en 999, als jij dat verandert in 100 krijg je waardes tussen 0 en 99, en zullen geen van de "if's" werken die de leds "aan" moeten zetten.
en als ik het goed begrijp is de regel met de delay dat hij de ene keer 1000millis wacht met de loop en daarna 4000millis?
delay(random(1000,4000));
Neen:"random (1000,4000)", geeft een willekeurig getal tussen 1000 en 3999 terug, dus de delay in navenant.
Zie: https://www.arduino.cc/reference/en/language/functions/random-numbers/random/
Je kan de lampjes wel afzonderlijk van elkaar laten functioneren, alleen wil ik het iets nauwkeuriger doen,
omdat het samen gaat lopen met een muziekje.
Dat klinkt interessant leuk!
Heb je er al over nagedacht welke lampjes bij welke frequentie moeten gaan branden?
(Zeg: de hooiberg bij de bassen, de lantaarnpaal bij de strijkers en de boerderij tijdens de klarinetten?)
Of hoe je uit een stukje muziek de maat kunt halen?
En ook of de amplitude (geluidssterkte) de duur van het "aanzijn" moet inhouden?
Dat vereist wel het invoeren van het muzieksignaal in de arduino, anders krijg je het nimmer goed op tijd.
Eea is overigens goed te doen door gebruik te maken van rc-filters en de analoge ingangen.
('Tuurlijk de puristen zullen menen dat het allemaal in software te vatten valt, maar waarom de natuur in 1000 regels code gaan nabootsen terwijl je dat met wat passieve componenten ook in 10 kan?)
![Wink ;)](./images/smilies/icon_e_wink.gif)
Denk er eens over na.
Groetjes, &c.
PS
Dit is geen kritiek, maar:
Mij bekruipt een beetje het gevoel dat jij de Engelse taal niet helemaal machtig bent, kan dat kloppen?
Zo ja, dan is het misschien gewenst om arduino.cc ook in het Nederlands te laten verschijnen.
Hier ligt wellicht een taak voor de beheerders van dit forum?
Re: Waar moet ik beginnen??
op arduino.cc is ook een deel nederlands forum in de groep internationaal onder andere mas3 en shooter en vele andere helpen je daar in het nederlands, en er zijn alternatieven zoals scratch 4 arduino. en ik vind dat de OP prima bezig is hoor laat het maar ontdekken.
paul deelen
shooter@home.nl
shooter@home.nl
Re: Waar moet ik beginnen??
shooter schreef: en ik vind dat de OP prima bezig is hoor laat het maar ontdekken.
Ik ook, maar ik kan me niet aan de indruk ontrekken dat o.a. RichardZ beter was geholpen met direct een nederlandstalige uitleg van de diverse functies, ik bedoel: de GUI is al vertaald, nu de rest nog?
Of is het toch een kwestie van RTFM?
Want dan is dit forum exact hetzelfde als het wiskundeforum: antwoorden mogen niet gegeven worden, enkel hints.
Doe dan maar hetzelfde als die lui van het wiskundeforum, en verban mij "voorgoed".
.
Re: Waar moet ik beginnen??
beste ctunes,
Bedankt voor je uitleg over de dingen die ik me afvroeg over jou code.
Voor de rest heb ik me behoorlijk vergist in wat er allemaal komt kijken bij het programmeren van een paar simpele ledjes die aan en uit gaan op een bepaald tijdstip.
Over of ik de Engelse taal machtig ben kan ik zeggen voor een groot deel wel maar niet perfect .
dus misschien ligt daar wel ook een deel van het probleem.
Laatste week heb ik niet veel tijd gehad om me verder te storten op dit project ,
maar ik ga cker nog niet opgeven
in ieder geval bedankt voor het mee denken
mvg RichardZ
Bedankt voor je uitleg over de dingen die ik me afvroeg over jou code.
Voor de rest heb ik me behoorlijk vergist in wat er allemaal komt kijken bij het programmeren van een paar simpele ledjes die aan en uit gaan op een bepaald tijdstip.
Over of ik de Engelse taal machtig ben kan ik zeggen voor een groot deel wel maar niet perfect .
dus misschien ligt daar wel ook een deel van het probleem.
Laatste week heb ik niet veel tijd gehad om me verder te storten op dit project ,
maar ik ga cker nog niet opgeven
in ieder geval bedankt voor het mee denken
mvg RichardZ
Re: Waar moet ik beginnen??
RichardZ schreef:Voor de rest heb ik me behoorlijk vergist in wat er allemaal komt kijken bij het programmeren van een paar simpele ledjes die aan en uit gaan op een bepaald tijdstip.
Nooit opgeven: het probleem zit volgens mij niet in hoeverre jij in staat bent een arduino te programmeren, maar eerder in dat je je criteria niet volledig hebt uitgewerkt.
(Hoe wordt het tijdstip bepaald?)
Dat is eigenlijk eender als een boek proberen te schrijven zonder uitgangspunten, motieven, een doel en een publiek; in een ander woord: "onmogelijk".
(Tussen haakjes: dat is 1 van de redenen waarom IT-projecten binnen de (semi-)overheid altijd falen: bij elke revisiemeeting worden de specificaties aangepast, waardoor het "programma" nooit als "af" beschouwd kan worden, dus opgeleverd, en het contract niet als nagekomen kan worden beschouwd.)
Programmeren kan een "plastische" zaak zijn, zeker als je kunstenaar bent en juist op zoek naar "gelukkige ongelukjes", maar meestal is dan toch de eerste vereiste materiaalkennis.
RichardZ schreef:in ieder geval bedankt voor het mee denken
Graag gedaan.
PS
Mocht jij je criteria op een rijtje krijgen, wil ik je graag helpen de programmeerbaarheid daarvan helpen te onderzoeken.
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 7 gasten