LDR naar lichtbalk

Arduino specifieke Software
Berichten: 4075
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

LDR naar lichtbalk

Berichtdoor shooter » 12 Apr 2016, 17:04

Ik kreeg een email met de volgende tekst en een foto(te groot maar wel prima)

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

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: LDR naar lichtbalk

Berichtdoor nicoverduin » 12 Apr 2016, 20:21

Heerlijk zo'n slecht gedocumenteerd programma...
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....
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

Re: LDR naar lichtbalk

Berichtdoor shooter » 14 Apr 2016, 10:25

ja het compileert wel goed, maar zoals je ziet gaat het niet met arrays goed.
paul deelen
shooter@home.nl

Berichten: 5
Geregistreerd: 14 Apr 2016, 10:45

Re: LDR naar lichtbalk

Berichtdoor newb » 14 Apr 2016, 10:52

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.

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

Re: LDR naar lichtbalk

Berichtdoor shooter » 14 Apr 2016, 19:40

dat bedoel ik dus, wij wachten af.
paul deelen
shooter@home.nl

Berichten: 5
Geregistreerd: 14 Apr 2016, 10:45

Re: LDR naar lichtbalk

Berichtdoor newb » 05 Mei 2016, 10:21

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);
}

Berichten: 5
Geregistreerd: 14 Apr 2016, 10:45

Re: LDR naar lichtbalk

Berichtdoor newb » 05 Mei 2016, 10:24

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);
}

Berichten: 5
Geregistreerd: 14 Apr 2016, 10:45

Re: LDR naar lichtbalk

Berichtdoor newb » 05 Mei 2016, 10:36

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
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);
}

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: LDR naar lichtbalk

Berichtdoor nicoverduin » 05 Mei 2016, 11:04

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.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 5
Geregistreerd: 14 Apr 2016, 10:45

Re: LDR naar lichtbalk

Berichtdoor newb » 05 Mei 2016, 12:24

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.

Volgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten