hulp gevraagd met schoolproject

Arduino specifieke Software
Berichten: 6
Geregistreerd: 29 Jun 2014, 16:53

hulp gevraagd met schoolproject

Berichtdoor klappertje10 » 29 Jun 2014, 17:05

hallo,

ik ben nu met school bezig met arduino. ik ben een (bijna) complete leek met arduino en nu kom ik niet meer verder met mn project.
het idee is om een rolgordijn te maken, die dicht gaat als het donker word en open gaat als het weer licht word.
ik wil het rolgordijn heen en weer laten gaan doormiddel van een aantal relais en een lego motor. ik heb het nu eindelijk voor elkaar om de motor twee kanten op te laten gaan.
als ik op pin 3 stroom zet gaat hij vooruit en als ik op pin 3,4 en 5 stroom zet, gaat hij achteruit.
ook heb ik een lichtsensor die al werkt. ik zal mn verhaal verduidelijken met mn skech:


const int firstledPin = 3; // motor vooruit
const int secondledPin = 4;// samen met pin 3,4,5 motor achteruit
const int thirthledPin = 5;
const int inputPin = 2; // input lichtsensor
void setup()
{
pinMode(firstledPin, OUTPUT); // motor
pinMode(secondledPin, OUTPUT); // motor
pinMode(thirthledPin, OUTPUT); // motor
pinMode(inputPin, INPUT); // de input van de lichtsensor
}
void loop()
{ int val = digitalRead(inputPin); // lees licht intensiteit
if (val == HIGH) // kijk of lichtintensiteit hoog is (HIGH)de motor moet nu vooruit gaan draaien
if (val == LOW) // kijk of lichtintensiteit laag is (LOW) de motor moet nu achteruit gaan draaien

{
digitalWrite(firstledPin, HIGH); // zet motor aan
delay(3000); // laat de motor drie seconden draaien
digitalWrite(firstledPin, LOW); // zet motor uit

return loop() ;
}

{

digitalWrite (firstledPin, HIGH); // zet stroom op pinnen 3,4,5 om de motor achteruit te draaien
digitalWrite(secondledPin, HIGH); //
digitalWrite(thirthledPin, HIGH); //
delay(3000); // laat de motor drie seconden draaien
digitalWrite(firstledPin, LOW); // zet de motor uit
digitalWrite(secondledPin, LOW); //
digitalWrite(thirthledPin, LOW); //
return loop();
}
}

nu geeft hij geen errors trouwens.

nu is mijn vraag aan jullie, hoe kan ik er nu voor zorgen dat als het licht HIGH is hij het eerste stukje van de loop gaat doen en als het licht LOW word, hij het tweede stukje gaat doen?
ik hoop dat jullie mij kunnen helpen,

groet koen

Advertisement

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

Re: hulp gevraagd met schoolproject

Berichtdoor shooter » 29 Jun 2014, 20:02

Code: Alles selecteren
const int firstledPin = 3; // motor vooruit
const int secondledPin = 4;// samen met pin 3,4,5 motor achteruit
const int thirthledPin = 5;  // ik snap even niet hoe het geschakeld is maar goed als het werkt
const int inputPin = 2; // input lichtsensor
void setup() //
{
pinMode(firstledPin, OUTPUT); // motor
pinMode(secondledPin, OUTPUT); // motor
pinMode(thirthledPin, OUTPUT); // motor
pinMode(inputPin, INPUT); // de input van de lichtsensor
}
void loop() // gereserveerd mag dus maar een keer
{ int val = digitalRead(inputPin); // lees licht intensiteit
//digitaal betekent natuurlijk wel dat bij schemering de motor op en neer gaat.

if (val == HIGH) {vooruit();}  // kijk of lichtintensiteit hoog is (HIGH)de motor moet nu vooruit gaan draaien
if (val == LOW) {achteruit();}// kijk of lichtintensiteit laag is (LOW) de motor moet nu achteruit gaan draaien
} // einde van het hoofdprogramma

void vooruit()  //programma voor vooruit
{
digitalWrite(firstledPin, HIGH); // zet motor aan
delay(3000); // laat de motor drie seconden draaien
digitalWrite(firstledPin, LOW); // zet motor uit
}

void achteruit()
{
digitalWrite (firstledPin, HIGH); // zet stroom op pinnen 3,4,5 om de motor achteruit te draaien
digitalWrite(secondledPin, HIGH); //
digitalWrite(thirthledPin, HIGH); //
delay(3000); // laat de motor drie seconden draaien
digitalWrite(firstledPin, LOW); // zet de motor uit
digitalWrite(secondledPin, LOW); //
digitalWrite(thirthledPin, LOW); //
}
paul deelen
shooter@home.nl

Berichten: 6
Geregistreerd: 29 Jun 2014, 16:53

Re: hulp gevraagd met schoolproject

Berichtdoor klappertje10 » 29 Jun 2014, 20:28

wouw, super bedankt. hier kan ik mee verder.

nu stuit ik alleen op het probleem dat de motor niet na 3 seconden uitgaat, maar gewoon blijft draaien.
hoe zou ik dit kunnen oplossen? ik denk dat hij nu na de drie seconden weer gaat meten via de sensor, er achter komt dat het nog steeds donker is, en dan de motor weer laat draaien.
maar nadat hij gedraaid heeft, moet hij niks doen, totdat het weer licht word.

groetjes koen

Berichten: 20
Geregistreerd: 25 Jun 2014, 10:49

Re: hulp gevraagd met schoolproject

Berichtdoor Levi Z » 29 Jun 2014, 20:48

Als t een schoolproject is neem ik aan dat je de handleiding gelezen hebt :)

Je hebt een extra variabele nodig die de laatste staat van "val" onthoud.
Als "val" niet veranderd is doe je niks, als deze bijvoorbeeld van laag naar hoog is gegaan dan doe je wel iets.

Je slaat die, bijvoorbeeld "int lastval = val;" op na het draaien van de motor dus in de void vooruit() of void achteruit() loop vlak voor de }

En je zet om je if statements: if (val !== lastval){ en ook weer afsluiten met een }

Klink dat logisch?

Handleiding staat eventueel op mijn en als het na 3 dagen nog niet gelukt is roep je maar :)
Als je je projectje wil delen met fotoos enzo heb ik wel interesse..

Berichten: 6
Geregistreerd: 29 Jun 2014, 16:53

Re: hulp gevraagd met schoolproject

Berichtdoor klappertje10 » 29 Jun 2014, 21:19

hallo,

bedankt voor je snelle reactie.
een handleiding is er helaas niet. we moesten zelf een project bedenken.
dit is mn eerste ervaring met het arduino board.
ik vind het best logisch wat je hebt uitgelegd, maar ik snap het niet helemaal wat je bedoelt met 'En je zet om je if statements: if (val !== lastval){ en ook weer afsluiten met een }'
hoe moet ik dit in de sketch zetten?
na wat pogingen komen er alleen nog maar errors uit.

ik hoop dat je me nog even kunt helpen

groet koen

Berichten: 20
Geregistreerd: 25 Jun 2014, 10:49

Re: hulp gevraagd met schoolproject

Berichtdoor Levi Z » 29 Jun 2014, 21:32

Hehe, zo leer je nog eens wat van een schoolproject....


if (val !== lastval){
if (val == HIGH) {vooruit();} // kijk of lichtintensiteit hoog is (HIGH)de motor moet nu vooruit gaan draaien
if (val == LOW) {achteruit();}// kijk of lichtintensiteit laag is (LOW) de motor moet nu achteruit gaan draaien
}

http://www.zoekutuit.nl/index.php?pagin ... id=1421029

Berichten: 6
Geregistreerd: 29 Jun 2014, 16:53

Re: hulp gevraagd met schoolproject

Berichtdoor klappertje10 » 29 Jun 2014, 21:51

hallo, bedankt voor je inzet!

ik krijg hem maar niet aan de gang. ik heb het precies gedaan zoals gezegd werd, maar ik blijf maar errors krijgen. dit is de sketch die ik nu heb. kunnen jullie fouten ontdekken? ik zal ook de error erbij zetten:

const int firstledPin = 3; // motor vooruit
const int secondledPin = 4;// samen met pin 3,4,5 motor achteruit
const int thirthledPin = 5; //
const int inputPin = 2; // input lichtsensor
void setup() //
{
pinMode(firstledPin, OUTPUT); // motor
pinMode(secondledPin, OUTPUT); // motor
pinMode(thirthledPin, OUTPUT); // motor
pinMode(inputPin, INPUT); // de input van de lichtsensor
}
void loop() //
{int val = digitalRead(inputPin); // lees licht intensiteit

if (val !== lastval);
{
if (val == HIGH) {vooruit();} // kijk of lichtintensiteit hoog is (HIGH)de motor moet nu vooruit gaan draaien
if (val == LOW) {achteruit();}// kijk of lichtintensiteit laag is (LOW) de motor moet nu achteruit gaan draaien
} // einde van het hoofdprogramma

void vooruit() //programma voor vooruit
{
digitalWrite(firstledPin, HIGH); // zet motor aan
delay(3000); // laat de motor drie seconden draaien
digitalWrite(firstledPin, LOW); // zet motor uit
int (lastval = val);
}

void achteruit()//probramma voor achteruit
{
digitalWrite (firstledPin, HIGH); // zet stroom op pinnen 3,4,5 om de motor achteruit te draaien
digitalWrite(secondledPin, HIGH); //
digitalWrite(thirthledPin, HIGH); //
delay(3000); // laat de motor drie seconden draaien
digitalWrite(firstledPin, LOW); // zet de motor uit
digitalWrite(secondledPin, LOW); //
digitalWrite(thirthledPin, LOW); //
int (lastval = val);
}



en hier de error:

sketch_jun29a.ino: In function 'void loop()':
sketch_jun29a:15: error: expected primary-expression before '=' token
sketch_jun29a:15: error: 'lastval' was not declared in this scope
sketch_jun29a:15: error: expected `)' before ';' token
sketch_jun29a:15: error: expected primary-expression before ')' token
sketch_jun29a:15: error: expected `;' before ')' token
sketch_jun29a:39: error: expected `}' at end of input

ik hoop dat je me nog een keer kan helpen

mvg koen

Berichten: 20
Geregistreerd: 25 Jun 2014, 10:49

Re: hulp gevraagd met schoolproject

Berichtdoor Levi Z » 29 Jun 2014, 22:06

Leuke puzzel :) probeer eens..

Code: Alles selecteren

ik krijg hem maar niet aan de gang. ik heb het precies gedaan zoals gezegd werd, maar ik blijf maar errors krijgen. dit is de sketch die ik nu heb. kunnen jullie fouten ontdekken? ik zal ook de error erbij zetten:

const int firstledPin = 3; // motor vooruit
const int secondledPin = 4;// samen met pin 3,4,5 motor achteruit
const int thirthledPin = 5; //
const int inputPin = 2; // input lichtsensor
int lastval;

void setup() //
{
pinMode(firstledPin, OUTPUT); // motor
pinMode(secondledPin, OUTPUT); // motor
pinMode(thirthledPin, OUTPUT); // motor
pinMode(inputPin, INPUT); // de input van de lichtsensor
}
void loop() //
{int val = digitalRead(inputPin); // lees licht intensiteit

if (val != lastval)
{
if (val == HIGH) {vooruit();} // kijk of lichtintensiteit hoog is (HIGH)de motor moet nu vooruit gaan draaien
if (val == LOW) {achteruit();}// kijk of lichtintensiteit laag is (LOW) de motor moet nu achteruit gaan draaien
}
} // einde van het hoofdprogramma

void vooruit() //programma voor vooruit
{
digitalWrite(firstledPin, HIGH); // zet motor aan
delay(3000); // laat de motor drie seconden draaien
digitalWrite(firstledPin, LOW); // zet motor uit
lastval = val;
}

void achteruit()//probramma voor achteruit
{
digitalWrite (firstledPin, HIGH); // zet stroom op pinnen 3,4,5 om de motor achteruit te draaien
digitalWrite(secondledPin, HIGH); //
digitalWrite(thirthledPin, HIGH); //
delay(3000); // laat de motor drie seconden draaien
digitalWrite(firstledPin, LOW); // zet de motor uit
digitalWrite(secondledPin, LOW); //
digitalWrite(thirthledPin, LOW); //
lastval = val;
}

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

Re: hulp gevraagd met schoolproject

Berichtdoor shooter » 30 Jun 2014, 09:29

nee het motortje gaat met mijn programma inderdaad niet uit, want de sensor is nog steeds hoog en gaat dus weer omhoog functie in, tot het motortje niet meer verder kan, dus zolang de sensor hoog is draait het motortje, je zult dus eindschakelaars (is beste) op je rolluik moeten zetten, en dan testen op deze eindschakelaars. Zonder eindschakelaars draai je het zeker een keer kapot.
Bedenk maar eens hoe je dat gaat maken, want wij gaan je niet alles voorkauwen he dan ga je niet slagen.

zet in de loop maar eens een delay van 10000 dan zul je zien dat de motor 3000 ms loopt en dan 10000ms stil staat.

de oplossing met lastval werkt wel maar is geen bescherming voor het rolluik.
paul deelen
shooter@home.nl

Berichten: 6
Geregistreerd: 29 Jun 2014, 16:53

Re: hulp gevraagd met schoolproject

Berichtdoor klappertje10 » 30 Jun 2014, 11:55

hallo,

helaas werkt de sketch van levi z nog niet. hij geeft de error:

sketch_jun30a.ino: In function 'void vooruit()':
sketch_jun30a:29: error: 'val' was not declared in this scope
sketch_jun30a.ino: In function 'void achteruit()':
sketch_jun30a:41: error: 'val' was not declared in this scope

hoe moet ik de ''val' declaren?

sorry dat ik jullie misschien een beetje lastig val maar jullie zijn mn enige hoop.
dit is het eerste jaar dat onze school met arduino werkt. onze leraar weet er helemaal niks vanaf, alleen hoe je arduino op een computer installeert :)

gr koen

Volgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 90 gasten