LDR naar lichtbalk
15 berichten
• Pagina 1 van 2 • 1, 2
LDR naar lichtbalk
Ik kreeg een email met de volgende tekst en een foto(te groot maar wel prima)
cpp code
daar heb ik het volgende bij gezet:
Ik denk dat je iets meer moet vertellen wat je waarneemt, en dan heb je de oplossing eigenlijk al zelf in de hand.
cpp code
ik zie je berekening niet zitten maar dat komt omdat jij ze abcd noemt.
gebruik overal floats behalve voor de uiteindelijke array.
opdracht:
maak het aantal leds dat aan is afhankelijk van de totale lichtsterkte.
de positie van de led is integer (mapr/(mapr+mapl) *8)
ik zal dit bovenstaande stuk ook op arduinoforum.nl zetten, dan kun jij meelezen wat anderen denken
voldoende huiswerk denk ik voor vandaag.
cpp code
int sensorPin2 = A0;
int sensorPin1 = A1;
int LDRR = 4;
int LDRL = 5;
int Led[] = {
2, 3, 4, 5, 6, 7, 8, 9
};
void setup(){
pinMode(Led[2, 3, 4, 5, 6, 7, 8, 9], OUTPUT);
Serial.begin(9600);
}
void loop(){
LDRR = analogRead(sensorPin2);
LDRL = analogRead(sensorPin1);
Serial.println(LDRR);
Serial.println(LDRL);
int mapr = map(LDRR, 0, 1023, 1, 8);
int mapl = map(LDRL, 0, 1023, 1, 8);
Serial.println(mapr);
Serial.println(mapl);
delay(500);
if (mapr != mapl){
int a = mapr + mapl;
int b = a / 8;
if (mapr > mapl){
b = b + 4;
b = (int) b;
digitalWrite(Led[2, 3, 4, 5, 6, 7, 8, 9], LOW);
digitalWrite(Led[b], HIGH);
Serial.println(b);
}
else{
int c = 4 - b;
b = (int) b;
digitalWrite(Led[2, 3, 4, 5, 6, 7, 8, 9], LOW);
digitalWrite(Led[b], HIGH);
Serial.println(b);
}
if (mapr == mapl){
int d = 4;
digitalWrite(Led[2, 3, 4, 5, 6, 7, 8, 9], LOW);
digitalWrite(Led[2], HIGH);
Serial.println(b);
}
}
Serial.println();
delay(600);
}
daar heb ik het volgende bij gezet:
Ik denk dat je iets meer moet vertellen wat je waarneemt, en dan heb je de oplossing eigenlijk al zelf in de hand.
cpp code
int sensorPinR = A0;
int sensorPinL = A1;
int LDRR = 4; // waarom staat hier 4? maak er 1023 van (is max van ingang
int LDRL = 5;
int Led[] = { // dit betekent led[0]=2 led[1]=3 enz.
2, 3, 4, 5, 6, 7, 8, 9
};
void setup(){
pinMode(Led[2, 3, 4, 5, 6, 7, 8, 9], OUTPUT); // dus dit kan wel maar is niet goed beter is een for loop(in een aparte functie
Serial.begin(9600);
}
void loop(){
LDRR = analogRead(sensorPinR);
LDRL = analogRead(sensorPinL);
Serial.println(LDRR);
Serial.println(LDRL);
int mapr = map(LDRR, 0, 1023, 1, 8); // deze waarden moet je vaststellen, dus donker en licht zijn bijv 200 en 500.
int mapl = map(LDRL, 0, 1023, 1, 8);
Serial.println(mapr);
Serial.println(mapl);
delay(500);
if (mapr != mapl){ // wat zou dit moeten zijn?
int a = mapr + mapl; // a?
int b = a / 8; // b? en dat is een float en geen int
if (mapr > mapl){
b = b + 4; // als rechts groter is moet eigenlijk c=4+b zijn
b = (int) b; // dat kan niet want b is een float en haakjes staan verkeerd (b)
digitalWrite(Led[2, 3, 4, 5, 6, 7, 8, 9], LOW); // zie boven
digitalWrite(Led[b], HIGH); // dit is wel goed
Serial.println(b);
}
else{
int c = 4 - b; // c?
b = (int) b;
digitalWrite(Led[2, 3, 4, 5, 6, 7, 8, 9], LOW); // zie boven
digitalWrite(Led[b], HIGH);
Serial.println(b);
}
//if (mapr == mapl){// dit is dus de else van de eerste IF
else{int d = 4; //d?
digitalWrite(Led[2, 3, 4, 5, 6, 7, 8, 9], LOW);
digitalWrite(Led[2], HIGH); // dat is derde led en hierboven ga je uit van led[4](de vijfde)
Serial.println(b);
}
}
Serial.println();
delay(600);
}
void(ledsuit){
for (int teller=0;teller<=7;teller++){digitalWrite(led[teller],LOW);}
ik zie je berekening niet zitten maar dat komt omdat jij ze abcd noemt.
gebruik overal floats behalve voor de uiteindelijke array.
opdracht:
maak het aantal leds dat aan is afhankelijk van de totale lichtsterkte.
de positie van de led is integer (mapr/(mapr+mapl) *8)
ik zal dit bovenstaande stuk ook op arduinoforum.nl zetten, dan kun jij meelezen wat anderen denken
voldoende huiswerk denk ik voor vandaag.
paul deelen
shooter@home.nl
shooter@home.nl
Advertisement
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: LDR naar lichtbalk
Heerlijk zo'n slecht gedocumenteerd programma...
En deze kende ik nog niet. Werkt ie wel?
cpp code
Maakt het in ieder geval lekker onduidelijk.
Als dit een schoolwerkstuk is dan was het een dikke onvoldoende..... Maar ja over het onderwijs op dit gebied was ik al niet echt onder de indruk gezien de vragen de afgelopen jaren....
Neelie wil dat ze leren programmeren...
Nou ik vraag me hoe....
En deze kende ik nog niet. Werkt ie wel?
cpp code
digitalWrite(Led[2, 3, 4, 5, 6, 7, 8, 9], LOW);
Maakt het in ieder geval lekker onduidelijk.
Als dit een schoolwerkstuk is dan was het een dikke onvoldoende..... Maar ja over het onderwijs op dit gebied was ik al niet echt onder de indruk gezien de vragen de afgelopen jaren....
Neelie wil dat ze leren programmeren...
Nou ik vraag me hoe....
Re: LDR naar lichtbalk
ja het compileert wel goed, maar zoals je ziet gaat het niet met arrays goed.
paul deelen
shooter@home.nl
shooter@home.nl
Re: LDR naar lichtbalk
Dit is mijn programma en heb ik onderdeel gemaakt van een school opdracht.
Wij doen op school verder niets met arduino en moet het dus allemaal maar zelf een beetje uitzoeken.
Het programma bepaald aan de hand van 2 ldr's waar het licht het sterkst is en dat geef hij weer op 8 led's.
Afhankelijk van de sterkte moet het lampje zo dicht mogelijk bij de sterke ldr aan gaan.
Ik zal binnenkort mijn nieuwe programma erop zetten.
Wij doen op school verder niets met arduino en moet het dus allemaal maar zelf een beetje uitzoeken.
Het programma bepaald aan de hand van 2 ldr's waar het licht het sterkst is en dat geef hij weer op 8 led's.
Afhankelijk van de sterkte moet het lampje zo dicht mogelijk bij de sterke ldr aan gaan.
Ik zal binnenkort mijn nieuwe programma erop zetten.
Re: LDR naar lichtbalk
Het duurde even maar ik heb hem werkend gekregen.
Maar ik vroeg mij af of er nog rare dingen tussen staan die eigenlijk anders moeten.
hieronder de code:
int led1 = 3;
int led2 = 4;
int led3 = 5;
int led4 = 6;
int led5 = 7;
int led6 = 8;
int led7 = 9;
int led8 = 10;
int sensorL = A0;
int sensorR = A1;
int nr = 4;
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
pinMode(sensorL, INPUT);
pinMode(sensorR, INPUT);
Serial.begin(9600);
}
void loop() {
int links = analogRead(sensorL);
int rechts = analogRead(sensorR);
links = map(links, 0, 1023, 1, 8);
rechts = map(rechts, 0, 1023, 1, 8);
Serial.println(links);
Serial.println(rechts);
Serial.println(nr)
delay(500);
if(links > rechts){
nr = ++nr;
}
Serial.println
delay(500)
else if(rechts > links){
nr = --nr;
}
delay(500)
else{
nr = nr;
}
delay(500);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
if(nr == 1){
digitalWrite(led1, HIGH);
}
if(nr == 2){
digitalWrite(led2, HIGH);
}
if(nr == 3){
digitalWrite(led3, HIGH);
}
if(nr == 4){
digitalWrite(led4, HIGH);
}
if(nr == 5){
digitalWrite(led5, HIGH);
}
if(nr == 6){
digitalWrite(led6, HIGH);
}
if(nr == 7){
digitalWrite(led7, HIGH);
}
if(nr == 8){
digitalWrite(led8, HIGH);
}
delay(10);
}
Maar ik vroeg mij af of er nog rare dingen tussen staan die eigenlijk anders moeten.
hieronder de code:
int led1 = 3;
int led2 = 4;
int led3 = 5;
int led4 = 6;
int led5 = 7;
int led6 = 8;
int led7 = 9;
int led8 = 10;
int sensorL = A0;
int sensorR = A1;
int nr = 4;
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
pinMode(sensorL, INPUT);
pinMode(sensorR, INPUT);
Serial.begin(9600);
}
void loop() {
int links = analogRead(sensorL);
int rechts = analogRead(sensorR);
links = map(links, 0, 1023, 1, 8);
rechts = map(rechts, 0, 1023, 1, 8);
Serial.println(links);
Serial.println(rechts);
Serial.println(nr)
delay(500);
if(links > rechts){
nr = ++nr;
}
Serial.println
delay(500)
else if(rechts > links){
nr = --nr;
}
delay(500)
else{
nr = nr;
}
delay(500);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
if(nr == 1){
digitalWrite(led1, HIGH);
}
if(nr == 2){
digitalWrite(led2, HIGH);
}
if(nr == 3){
digitalWrite(led3, HIGH);
}
if(nr == 4){
digitalWrite(led4, HIGH);
}
if(nr == 5){
digitalWrite(led5, HIGH);
}
if(nr == 6){
digitalWrite(led6, HIGH);
}
if(nr == 7){
digitalWrite(led7, HIGH);
}
if(nr == 8){
digitalWrite(led8, HIGH);
}
delay(10);
}
Re: LDR naar lichtbalk
excuus dat is een oude versie, hier de nieuwe:
int led1 = 3;
int led2 = 4;
int led3 = 5;
int led4 = 6;
int led5 = 7;
int led6 = 8;
int led7 = 9;
int led8 = 10;
int sensorL = A0;
int sensorR = A1;
int nr = 4;
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
pinMode(sensorL, INPUT);
pinMode(sensorR, INPUT);
Serial.begin(9600);
}
void loop() {
int links = analogRead(sensorL);
int rechts = analogRead(sensorR);
links = map(links, 0, 1023, 1, 8);
rechts = map(rechts, 0, 1023, 1, 8);
Serial.println(links);
Serial.println(rechts);
delay(10);
if(links > rechts){
nr = --nr;
Serial.println(nr);
}
else if(rechts > links){
nr = ++nr;
Serial.println(nr);
}
else if(links = rechts){
if(nr > 4){
nr = --nr;
}
if(nr < 4){
nr = ++nr;
}
}
Serial.println();
if(nr >= 9){
nr = 8;
}
if(nr <= 0){
nr = 1;
}
delay(100);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
if(nr == 1){
digitalWrite(led1, HIGH);
}
if(nr == 2){
digitalWrite(led2, HIGH);
}
if(nr == 3){
digitalWrite(led3, HIGH);
}
if(nr == 4){
digitalWrite(led4, HIGH);
}
if(nr == 5){
digitalWrite(led5, HIGH);
}
if(nr == 6){
digitalWrite(led6, HIGH);
}
if(nr == 7){
digitalWrite(led7, HIGH);
}
if(nr == 8){
digitalWrite(led8, HIGH);
}
delay(10);
}
int led1 = 3;
int led2 = 4;
int led3 = 5;
int led4 = 6;
int led5 = 7;
int led6 = 8;
int led7 = 9;
int led8 = 10;
int sensorL = A0;
int sensorR = A1;
int nr = 4;
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
pinMode(sensorL, INPUT);
pinMode(sensorR, INPUT);
Serial.begin(9600);
}
void loop() {
int links = analogRead(sensorL);
int rechts = analogRead(sensorR);
links = map(links, 0, 1023, 1, 8);
rechts = map(rechts, 0, 1023, 1, 8);
Serial.println(links);
Serial.println(rechts);
delay(10);
if(links > rechts){
nr = --nr;
Serial.println(nr);
}
else if(rechts > links){
nr = ++nr;
Serial.println(nr);
}
else if(links = rechts){
if(nr > 4){
nr = --nr;
}
if(nr < 4){
nr = ++nr;
}
}
Serial.println();
if(nr >= 9){
nr = 8;
}
if(nr <= 0){
nr = 1;
}
delay(100);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
if(nr == 1){
digitalWrite(led1, HIGH);
}
if(nr == 2){
digitalWrite(led2, HIGH);
}
if(nr == 3){
digitalWrite(led3, HIGH);
}
if(nr == 4){
digitalWrite(led4, HIGH);
}
if(nr == 5){
digitalWrite(led5, HIGH);
}
if(nr == 6){
digitalWrite(led6, HIGH);
}
if(nr == 7){
digitalWrite(led7, HIGH);
}
if(nr == 8){
digitalWrite(led8, HIGH);
}
delay(10);
}
Re: LDR naar lichtbalk
Nogmaals mijn excuses. 3 maal scheepsrecht, had wat veel programma's openstaan.
Dit is mijn programma werkend getest. Mochten er rare dingen instaan of fout/ risicovol dan hoor ik het graag.
cpp code
Dit is mijn programma werkend getest. Mochten er rare dingen instaan of fout/ risicovol dan hoor ik het graag.
cpp code
int led1 = 3;
int led2 = 4;
int led3 = 5;
int led4 = 6;
int led5 = 7;
int led6 = 8;
int led7 = 9;
int led8 = 10;
int sensorL = A0;
int sensorR = A1;
int nr = 4;
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
pinMode(sensorL, INPUT);
pinMode(sensorR, INPUT);
Serial.begin(9600);
}
void loop() {
int links = analogRead(sensorL);
int rechts = analogRead(sensorR);
links = map(links, 0, 1023, 1, 8);
rechts = map(rechts, 0, 1023, 1, 8);
Serial.println(links);
Serial.println(rechts);
delay(10);
if(links > rechts){
nr = --nr;
Serial.println(nr);
}
else if(rechts > links){
nr = ++nr;
Serial.println(nr);
}
else if(links = rechts){
if(nr > 4){
nr = --nr;
}
if(nr < 4){
nr = ++nr;
}
}
Serial.println();
if(nr >= 9){
nr = 8;
}
if(nr <= 0){
nr = 1;
}
delay(100);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
if(nr == 1){
digitalWrite(led1, HIGH);
}
if(nr == 2){
digitalWrite(led2, HIGH);
}
if(nr == 3){
digitalWrite(led3, HIGH);
}
if(nr == 4){
digitalWrite(led4, HIGH);
}
if(nr == 5){
digitalWrite(led5, HIGH);
}
if(nr == 6){
digitalWrite(led6, HIGH);
}
if(nr == 7){
digitalWrite(led7, HIGH);
}
if(nr == 8){
digitalWrite(led8, HIGH);
}
delay(10);
}
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: LDR naar lichtbalk
Het is jammer dat je totaal geen commentaar in jouw programma hebt toegevoegd. Geen idee hoe het onderwijs dit gaat waarderen. Maar gezien de gemiddelde reactie van de studenten over de inzet van de leraren verwacht ik er niet zoveel van.
Verbeterpunten:
a) Commentaar toevoegen
b) Beschrijving van dit programma wat het eigenlijk doet en auteur, datum versie etc
c) toepassing van arrays waardoor de code vermoedelijk meer dan gehalveerd kan worden. Daarnaast genereert het gebruik van arrays in jouw geval rond de 400 bytes aan flash code minder
d) zaken als "nr = --nr;" kuin je gewoon vervangen door "nr--;"
e) onduidelijk waarom er korte delays ingebouwd zijn. Een delay van 10 is tekort voor jouw ogen om waar te nemen.
f) je definieert een led als variabele (i.e. int led1 = x). Onnodige geheugen gebruik. Gebruik of #define of const int led1 = x; Op die manier scheelt het 2 bytes per led.
g) Dit is fout " else if(links = rechts){" hierbij maak je links gelijk aan rechts. Je moet "==" gebruiken als je gaat aftesten. Conclusie programma is niet goed getest.
Verbeterpunten:
a) Commentaar toevoegen
b) Beschrijving van dit programma wat het eigenlijk doet en auteur, datum versie etc
c) toepassing van arrays waardoor de code vermoedelijk meer dan gehalveerd kan worden. Daarnaast genereert het gebruik van arrays in jouw geval rond de 400 bytes aan flash code minder
d) zaken als "nr = --nr;" kuin je gewoon vervangen door "nr--;"
e) onduidelijk waarom er korte delays ingebouwd zijn. Een delay van 10 is tekort voor jouw ogen om waar te nemen.
f) je definieert een led als variabele (i.e. int led1 = x). Onnodige geheugen gebruik. Gebruik of #define of const int led1 = x; Op die manier scheelt het 2 bytes per led.
g) Dit is fout " else if(links = rechts){" hierbij maak je links gelijk aan rechts. Je moet "==" gebruiken als je gaat aftesten. Conclusie programma is niet goed getest.
Re: LDR naar lichtbalk
Dank voor je reactie en positiviteit over het onderwijs, deze code is maar een onderdeel van een groter geheel en ze zullen dus niet naar de code gaan kijken.
Een beschrijving en versie is inderdaad wel handig ga ik nu nog even doen. Wat de delays betreft, ik kwam ergens tegen dat je deze er voor de ''netheid'' in kon zetten waardoor het soepeler zou lopen merkte zelf niet echt verschil.
Ik kan alleen niet helemaal het verschil vinden tussen ''='' en ''==" . Heb nu == erin verwerkt en hij doet het nog, had ik met alleen = kans op onverwachte dingen gehad?
Nogmaals dank voor de feedback.
Een beschrijving en versie is inderdaad wel handig ga ik nu nog even doen. Wat de delays betreft, ik kwam ergens tegen dat je deze er voor de ''netheid'' in kon zetten waardoor het soepeler zou lopen merkte zelf niet echt verschil.
Ik kan alleen niet helemaal het verschil vinden tussen ''='' en ''==" . Heb nu == erin verwerkt en hij doet het nog, had ik met alleen = kans op onverwachte dingen gehad?
Nogmaals dank voor de feedback.
15 berichten
• Pagina 1 van 2 • 1, 2
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten