mijn eerste echte project
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: mijn eerste echte project
Als je de voeding apart houdt van de amp, dan eleveert die mee. Dus niet de GND van de amp aan de GND van de Arduino hangen.
Advertisement
Re: mijn eerste echte project
Gisteren nog wat verder geprogrammeerd zonder MP3s. Maar ik begin er stilaan achter te komen dat het hele MP3 verhaal veel te veel processortijd opslorpt om nog veel andere dingen te doen.
Zo is er sowieso een delay nodig om de servo traag te laten gaan en die tijd is te lang voor de MP3.
Een optie is om de Uno die ik nog heb liggen alles wat MP3's betreft te laten afhandelen, en de Mega voor de rest te gebruiken. Beiden kunnen dan op één of andere manier communiceren zodat de Uno weet welke MP3 hij wanneer moet afspelen.
Maar het inlezen van de reedcontacten en bijhorende verschillende acties werken ook al, al moet ik de 'acties' nog verder programmeren.
Kris
Zo is er sowieso een delay nodig om de servo traag te laten gaan en die tijd is te lang voor de MP3.
Een optie is om de Uno die ik nog heb liggen alles wat MP3's betreft te laten afhandelen, en de Mega voor de rest te gebruiken. Beiden kunnen dan op één of andere manier communiceren zodat de Uno weet welke MP3 hij wanneer moet afspelen.
Maar het inlezen van de reedcontacten en bijhorende verschillende acties werken ook al, al moet ik de 'acties' nog verder programmeren.
Kris
Als je het probleem gedetailleerd genoeg omschrijft, heb je meestal al de oplossing.
Re: mijn eerste echte project
De kogel is door de kerk, de MP3's zullen worden afgehandeld door de UNO, verbonden met de Mega die de rest doet via I2C. De MEGA wordt master.
De code voor de mega gisteren nog wat bijgewerkt tot een werkbaar resultaat, het MP3/IIC gedeelte moet er nog bij.
De timing moet nog nagekeken en ik ben niet 100% zeker dat de richtingen van de deur wel kloppen.
Ik vermoed dat het allemaal schoner en efficiënter kan, maar daar heb ik nu niet de tijd voor om het uit te pluizen.
Er staat ook nog heel wat LCD traffiek te veel in, maar dat is voor controledoeleinden terwijl ik eraan bezig ben, dat gaat er in de definitieve versie allemaal uit.
Kris
De code voor de mega gisteren nog wat bijgewerkt tot een werkbaar resultaat, het MP3/IIC gedeelte moet er nog bij.
- Code: Alles selecteren
//libraries
#include <LiquidCrystal.h> //LCD library
#include <Wire.h> //I2C Library
#include <Servo.h> //Servo library
//shortnames
Servo deurservo; //noem servo deurservo
LiquidCrystal lcd (8,9,4,5,6,7); //noem lcddisplay lcd
//variables
int deurpositie; //positie van de deur voor de servo
int ogen=11; //leds voor ogen op pin 11
int ogen_dim=30; //dimwaarde voor ogen
int groen=23; //reedcontacten voor verschillende kleuren teams
int geel=25;
int rood=27;
int blauw=29;
boolean status_groen; //statusvariabelen voor kleuren
boolean status_geel;
boolean status_rood;
boolean status_blauw;
int status_all;
int kleur; //resultaat kleurentest
boolean eindeloopdeuropen=31; //eindeloopcontact deur open
boolean eindeloopdeurtoe=33; //eindeloopcontact deur dicht
int deuropen; //eindstand servo deur open
int deurtoe; //eindstand servo deur toe
//setup
void setup()
{
//Setup lcd
lcd.begin(16,2);
lcd.setCursor(0,0);
//Setup Servo en eindeloopcontacten
deurservo.attach(37); //deurservo op pin 37
pinMode(eindeloopdeuropen, INPUT); //eindeloopschakelaar bij deur open
pinMode(eindeloopdeurtoe, INPUT); //eindeloopschakelaar bij deur toe
digitalWrite(eindeloopdeuropen, HIGH);//activeren pullup
digitalWrite(eindeloopdeurtoe, HIGH); //activeren pullup
deurtoe=leerfunctie_toe(90); //leer stand toe
deuropen=leerfunctie_open(deurtoe); //leer stand open
deur_sluiten(50);
lcd.clear();
lcd.setCursor(2,0);
lcd.print(deuropen);
lcd.setCursor(2,1);
lcd.print(deurtoe);
//Setup leds en test
pinMode (ogen,OUTPUT);
ogen_flits(10,10);
//Setup reedcontact inputs
pinMode (geel, INPUT); //setup pins als inputs
pinMode (groen, INPUT);
pinMode (rood, INPUT);
pinMode (blauw, INPUT);
digitalWrite(geel, HIGH); //activeren pull-up weerstanden
digitalWrite(groen, HIGH); // daardoor worden de pinnen actief laag
digitalWrite(rood, HIGH); // de reed contacten moeten dus de pin
digitalWrite(blauw, HIGH); // naar massa trekken
}
//loop
void loop()
{
lcd.clear();
do
{
status_groen=digitalRead(groen);
status_geel=digitalRead(geel);
status_rood=digitalRead(rood);
status_blauw=digitalRead(blauw);
status_all=(status_groen&status_geel&status_rood&status_blauw);
lcd.clear();
lcd.print("gr ge ro bl all");
lcd.setCursor(1,1);
lcd.print(status_groen);
lcd.setCursor(4,2);
lcd.print(status_geel);
lcd.setCursor(7,2);
lcd.print(status_rood);
lcd.setCursor(10,2);
lcd.print(status_blauw);
lcd.setCursor(13,2);
lcd.print(status_all);
delay(200);
} while (status_all == HIGH);
ogen_flits(1,20);
lcd.clear();
if (status_groen == LOW)
{
kleur=1;
lcd.print("groen");
}
if (status_geel == LOW)
{
kleur=2;
lcd.print("geel");
}
if (status_rood == LOW)
{
kleur=3;
lcd.print("rood");
}
if (status_blauw == LOW)
{
kleur=4;
lcd.print("blauw");
}
switch (kleur)
{
case 1:
lcd.clear();
deur_openen(5);
ogen_flits(30,10);
lcd.print("Welkom");
delay(500);
lcd.setCursor(0,2);
lcd.print("groene team !");
delay(500);
lcd.clear();
lcd.print("Let goed op.....");
lcd.setCursor(1,2);
delay(1500);
lcd.print("....en noteer.");
delay(2000);
lcd.clear();
lcd.print("Het graf dat U..");
lcd.setCursor(0,2);
delay(1500);
lcd.print(".zoekt, draagt..");
delay(2000);
lcd.clear();
lcd.print("..volgende naam:");
lcd.setCursor(0,2);
delay(2500);
lcd.print("Charlewieke");
delay(5000);
deur_sluiten(5);
break;
case 2:
lcd.clear();
deur_openen(5);
ogen_flits(30,10);
lcd.print("Welkom");
delay(200);
lcd.setCursor(0,2);
lcd.print("gele team !");
delay(500);
lcd.clear();
lcd.print("Let goed op.....");
lcd.setCursor(1,2);
delay(1500);
lcd.print("....en noteer.");
delay(2000);
lcd.clear();
lcd.print("Het graf dat U..");
lcd.setCursor(0,2);
delay(1500);
lcd.print(".zoekt, draagt..");
delay(2000);
lcd.clear();
lcd.print("..volgende naam:");
lcd.setCursor(0,2);
delay(2500);
lcd.print("Mariette");
delay(5000);
deur_sluiten(5);
break;
case 3:
lcd.clear();
deur_openen(5);
ogen_flits(30,10);
lcd.print("Welkom");
delay(200);
lcd.setCursor(0,2);
lcd.print("rode team !");
delay(500);
lcd.clear();
lcd.print("Let goed op.....");
lcd.setCursor(1,2);
delay(1500);
lcd.print("....en noteer.");
delay(2000);
lcd.clear();
lcd.print("Het graf dat U..");
lcd.setCursor(0,2);
delay(1500);
lcd.print(".zoekt, draagt..");
delay(2000);
lcd.clear();
lcd.print("..volgende naam:");
lcd.setCursor(0,2);
delay(2500);
lcd.print("Jefke van Lowie");
delay(5000);
deur_sluiten(5);
break;
case 4:
lcd.clear();
deur_openen(5);
ogen_flits(30,10);
lcd.print("Welkom");
delay(200);
lcd.setCursor(0,2);
lcd.print("blauwe team !");
delay(500);
lcd.clear();
lcd.print("Let goed op.....");
lcd.setCursor(1,2);
delay(1500);
lcd.print("....en noteer.");
delay(2000);
lcd.clear();
lcd.print("Het graf dat U..");
lcd.setCursor(0,2);
delay(1500);
lcd.print(".zoekt, draagt..");
delay(2000);
lcd.clear();
lcd.print("..volgende naam:");
lcd.setCursor(0,2);
delay(2500);
lcd.print("Johanneke");
delay(5000);
deur_sluiten(5);
break;
}
}
//********************
//* functies *
//********************
//-----------------------------------
//leerfunctie deurservo open
//-----------------------------------
int leerfunctie_open(int deurpositie)
{
int test_open;
lcd.clear();
do
{
deurservo.write (deurpositie);
deurpositie -=1;
test_open=digitalRead(eindeloopdeuropen);
lcd.setCursor(2,0);
lcd.print(test_open);
lcd.setCursor(9,1);
lcd.print(deurpositie);
delay(200);
}while (test_open!=LOW&&deurpositie>0);
return deurpositie;
}
//-----------------------------------
//leerfunctie deurservo toe
//-----------------------------------
int leerfunctie_toe(int deurpositie)
{
int test_toe;
lcd.clear();
do
{
deurservo.write (deurpositie);
deurpositie +=1;
test_toe=digitalRead(eindeloopdeurtoe);
lcd.setCursor(2,0);
lcd.print(test_toe);
lcd.setCursor(9,1);
lcd.print(deurpositie);
delay(200);
}while (test_toe!=LOW&&deurpositie<180);
return deurpositie;
}
//-----------------------------------
//ogenflits functie
//-----------------------------------
void ogen_flits(int delay1,int delay2)
{
for (int ogen_dim=0;ogen_dim<150;ogen_dim++)
{
analogWrite(ogen,ogen_dim);
delay(delay1);
}
for (int ogen_dim=150;ogen_dim>=0;ogen_dim--)
{
analogWrite(ogen,ogen_dim);
delay(delay2);
}
return;
}
//-----------------------------------
//deur openen functie
//-----------------------------------
void deur_openen(int tijd)
{
for (int deurpositie = deurservo.read(); deurpositie>=deuropen; deurpositie--)
{
deurservo.write (deurpositie);
delay(tijd);
}
}
//-----------------------------------
//deur sluiten functie
//-----------------------------------
void deur_sluiten(int tijd)
{
for (int deurpositie = deurservo.read(); deurpositie<=deurtoe; deurpositie++)
{
deurservo.write (deurpositie);
delay(tijd);
}
}
De timing moet nog nagekeken en ik ben niet 100% zeker dat de richtingen van de deur wel kloppen.
Ik vermoed dat het allemaal schoner en efficiënter kan, maar daar heb ik nu niet de tijd voor om het uit te pluizen.
Er staat ook nog heel wat LCD traffiek te veel in, maar dat is voor controledoeleinden terwijl ik eraan bezig ben, dat gaat er in de definitieve versie allemaal uit.
Kris
Als je het probleem gedetailleerd genoeg omschrijft, heb je meestal al de oplossing.
Re: mijn eerste echte project
ik zag allemaal delays in het programma, deze zijn funest voor de loop.
een betere is om dat te doen met if (millis() - starttime1 > runtime1) {// timer1 is elapsed}
make a new timer for every timer running simultane.
een betere is om dat te doen met if (millis() - starttime1 > runtime1) {// timer1 is elapsed}
make a new timer for every timer running simultane.
paul deelen
shooter@home.nl
shooter@home.nl
Re: mijn eerste echte project
Die moet je eens uitleggen want ik ben niet mee.
kris
kris
Als je het probleem gedetailleerd genoeg omschrijft, heb je meestal al de oplossing.
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: mijn eerste echte project
Ik ben het helemaal met je eens Er zitten alleen maar volgtijdelijke stappen in. Iemand drukt op een knopje.... deurtje open.... krijgt boodschap op lcd te zien..... deurtje dicht.KrisG schreef:Die moet je eens uitleggen want ik ben niet mee.
kris
Re: mijn eerste echte project
Het is inderdaad geen rocket-science en dat was ook niet de bedoeling en dat zal het nooit worden
De grootste uitdaging zit in het mechanische bij dit project. Het arduino deel is een uitdaging omdat het nieuw is voor mij
Kris
De grootste uitdaging zit in het mechanische bij dit project. Het arduino deel is een uitdaging omdat het nieuw is voor mij
Kris
Als je het probleem gedetailleerd genoeg omschrijft, heb je meestal al de oplossing.
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: mijn eerste echte project
Voor de toekomst zou je bijvoorbeeld dat hele LCD stuk in een routine kunnen gooien en alleen de "kleur" en "grafnaam" als parameter kunnen meegeven. Scheelt weer een zooi overbodige code.
Re: mijn eerste echte project
Hetzelfde kan voor de testen van de reedcontacten. Maar dat zal er alleen van komen als ik tijd over heb
Er is nog zoveel te doen voor het einde van de maand.
Kris
Er is nog zoveel te doen voor het einde van de maand.
Kris
Als je het probleem gedetailleerd genoeg omschrijft, heb je meestal al de oplossing.
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: mijn eerste echte project
lijkt wel een echt project komen ook altijd tijd tekort Maar voorlopig draait ie
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 30 gasten