Uitleg Arduino Timer Sketch
4 berichten
• Pagina 1 van 1
Uitleg Arduino Timer Sketch
Iemand vroeg me te helpen met een Arduino sketch die ´twee tijden tussen schakelaars´ op een ´4 digit 7 segment LED display´moet tonen. Een eenvoudige timer dus. En toen de Sketch klaar was kwam de vraag of ik het wilde toelichten.
Uitleggen wat je doet vind ik lastig, maar een goede manier je eigen gaten op te sporen. En uiteindelijk stop je heel veel tijd in het project van een ander... Daarom plaats ik hier een link naar mijn uitleg van ´zijn´ sketch.
Misschien dat iemand er wat aan heeft. Het laat in ieder geval genadeloos zien wat mijn nivo is (ahum).
Zinvol commentaar zeer welkom.
https://sites.google.com/site/arduinotimer/
Uitleggen wat je doet vind ik lastig, maar een goede manier je eigen gaten op te sporen. En uiteindelijk stop je heel veel tijd in het project van een ander... Daarom plaats ik hier een link naar mijn uitleg van ´zijn´ sketch.
Misschien dat iemand er wat aan heeft. Het laat in ieder geval genadeloos zien wat mijn nivo is (ahum).
Zinvol commentaar zeer welkom.
https://sites.google.com/site/arduinotimer/
Advertisement
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Uitleg Arduino Timer Sketch
Wat ik zelf zou hebben gedaan was de gehele uitleg in de code hebben verwerkt. Verder prima programma zo op eerste gezicht Maar dat wist je wel
Re: Uitleg Arduino Timer Sketch
tjonge pjh je moet nog veel bijleren hoor
ja nico heeft gelijk uitleg is zinvoller in een programma.
laat de 'opdrachtgever' een flowsheet maken, (moet toch gebeuren voor school)
een CADtekening van het geheel moet toch ook gemaakt worden, alsmede een aansluitschema.
je uitleg met die prescaler is niet helemaal correct.
debounce heb je hier niet ndoig, want je moet toch altijd gaan kijken naar de andere schakelaar.
Gebruik van delay samen met interrupts werkt niet goed (delay gebruikt namelijk de timer) dus je zult hier iets anders moeten verzinnen.
beter helemaal geen delay gebruiken, maar andere manier verzinnen (met millis() zoals we wel vaker doen)
de delay in de eerste regel van je loop, beinvloedt de display heel erg.
de rest komt nog.
ja nico heeft gelijk uitleg is zinvoller in een programma.
laat de 'opdrachtgever' een flowsheet maken, (moet toch gebeuren voor school)
een CADtekening van het geheel moet toch ook gemaakt worden, alsmede een aansluitschema.
je uitleg met die prescaler is niet helemaal correct.
debounce heb je hier niet ndoig, want je moet toch altijd gaan kijken naar de andere schakelaar.
Gebruik van delay samen met interrupts werkt niet goed (delay gebruikt namelijk de timer) dus je zult hier iets anders moeten verzinnen.
beter helemaal geen delay gebruiken, maar andere manier verzinnen (met millis() zoals we wel vaker doen)
de delay in de eerste regel van je loop, beinvloedt de display heel erg.
de rest komt nog.
paul deelen
shooter@home.nl
shooter@home.nl
Re: Uitleg Arduino Timer Sketch
kijk, daar ga ik wat aan hebben. thanx
De enige delay die ik in mijn programma gebruik is wanneer er al een externe interrupt is geweest. Die beinvloed dus het display alleen wanneer de knop geactiveerd is. Dan knippert het display even, wat functioneel niet veel uit maakt.
Maar ik kan het mis hebben....
Desalniettemin ga ik het herschrijven zonder delay.
/////////////
Al klaar:
En precies zoals "we eerder deden"
Omdat ik toch de tijd van de laatse knopdruk heb, kan ik zo de delay voorkomen:
if (flag_2 && (millis()-tijd_2) > debounce){...}
Maar ben bang dat ik er dan nog niet helemaal ben.
De enige delay die ik in mijn programma gebruik is wanneer er al een externe interrupt is geweest. Die beinvloed dus het display alleen wanneer de knop geactiveerd is. Dan knippert het display even, wat functioneel niet veel uit maakt.
Maar ik kan het mis hebben....
Desalniettemin ga ik het herschrijven zonder delay.
/////////////
Al klaar:
En precies zoals "we eerder deden"
Omdat ik toch de tijd van de laatse knopdruk heb, kan ik zo de delay voorkomen:
if (flag_2 && (millis()-tijd_2) > debounce){...}
Maar ben bang dat ik er dan nog niet helemaal ben.
- Code: Alles selecteren
volatile unsigned long tijd_1;
volatile unsigned long tijd_2;
volatile int flag_1 = 0;
volatile int flag_2 = 0;
int flag = 0;
long nieuw_interval;
const int diepteGeheugen = 32;
int actie[diepteGeheugen];
unsigned long tijd[diepteGeheugen];
long teller = 0;
int schakelaar_1_Pin = 53; // AANPASSEN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
int schakelaar_2_Pin = 51; // AANPASSEN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
int van ;
int naar ;
int debounce = 20;
int helderheid = 1; // 1 = maximaal gedimd licht
int cijfer[] = {
63, 6, 91, 79, 102, 109, 125, 7, 127, 111};
int anode[] = {
22, 23, 24, 25 }; // AANPASSEN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
int kathode[] = {
5,6,7,8,9,10,11 }; // AANPASSEN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
int digit[] = {
8, 8, 8, 8};
void setup(){
Serial.begin(9600);
attachInterrupt(0, sens1, CHANGE);
attachInterrupt(1, sens2, CHANGE);
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(schakelaar_1_Pin, INPUT);
pinMode(schakelaar_2_Pin, INPUT);
for (int i = 0; i < 4; i++){
pinMode(anode[i], OUTPUT);
}
for (int i = 0; i < 7; i++){
pinMode(kathode[i], OUTPUT);
}
}
void sens1(){
if (!flag_1){
flag_1 = 1;
tijd_1 = millis();
}
}
void sens2(){
if (!flag_2){
flag_2 = 1;
tijd_2 = millis();
}
}
void loop(){
schrijf_Display();
if (flag_1 && (millis()-tijd_1) > debounce){
actie[teller] = 1 - digitalRead(2);
tijd[teller] = tijd_1;
flag_1 = 0;
flag = 1;
}
if (flag_2 && (millis()-tijd_2) > debounce){
actie[teller] = 3 - digitalRead(3);
tijd[teller] = tijd_2;
flag_2 = 0;
flag = 1;
}
if (flag){
flag = 0;
int schak1 = digitalRead(schakelaar_1_Pin);
int schak2 = digitalRead(schakelaar_2_Pin);
if(schak2 == 1){
van = 1;
naar = 1;
}
else if((schak1 == 0) && (schak2 == 0)){
van = 1;
naar = 2;
}
else if((schak1 == 1) && (schak2 == 0)){
van = 3;
naar = 0;
}
if (actie[teller] == (naar)){
int laatste_4 = 0;
for (int j = (diepteGeheugen -1); j > 0; j--){
if ((actie[(teller+j)%diepteGeheugen] == (van)) && (!laatste_4)){
nieuw_interval = tijd[teller] - tijd[(teller+j)%diepteGeheugen];
laatste_4 = 1;
wijzigGetal(nieuw_interval);
}
}
}
teller++;
if (teller > diepteGeheugen) teller=0;
}
}
void wijzigGetal(long getal){
int milliSec = getal % 10;
int centiSec = (getal/10) % 10;
int decaSec = (getal/100) % 10;
int Sec = (getal/1000) % 10;
digit[0]= Sec;
digit[1]= decaSec;
digit[2]= centiSec;
digit[3]= milliSec;
}
void schrijf_Display(){
for (int dig=0; dig<4; dig++){
for (int seg=0; seg<7; seg++){
if(cijfer[digit[dig]]&(1<<seg)){
digitalWrite(kathode[seg], HIGH);
}
else{
digitalWrite(kathode[seg], LOW);//
}
}
digitalWrite(anode[dig], HIGH);
delayMicroseconds(helderheid);
digitalWrite(anode[dig], LOW);
}
}
4 berichten
• Pagina 1 van 1
Terug naar Afgeronde projecten
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 0 gasten