Arduino expert gezocht
35 berichten
• Pagina 2 van 4 • 1, 2, 3, 4
- Sander8511
- Berichten: 18
- Geregistreerd: 02 Nov 2018, 23:05
Re: Arduino expert gezocht
Als je alles eenmaal weet, is het idd niet zo moeilijk.
Ja ik heb beide libraries opgehaald en de voorbeeldcode ook.
Een timer terug laten tellen dat lukt.
Dit stukje code komt uit de voorbeeld sketch. Ben er een beetje mee aan het knoeien geweest en heb hem nu ingesteld dat hij vanaf 30 seconden terug telt. Top zeg ik.
Ik begrijp het alleen niet allemaal 100%. Van de eerste 2 regels weet ik bijvoorbeeld niet wat het doet?
uint16_t blinkcounter = 0;
boolean drawDots = false;
for (uint16_t timer = 3000; timer > 0; timer --) {
matrix.writeDigitNum(0, (timer / 1000), drawDots);
matrix.writeDigitNum(1, (timer / 100) % 10, drawDots);
matrix.drawColon(drawDots);
matrix.writeDigitNum(3, (timer / 10) % 10, drawDots);
matrix.writeDigitNum(4, timer % 10, drawDots);
De allereerste stap is om met een potmeter de timer in te kunnen stellen van 0 tot 60 seconden. Waar ik nu aan zit te denken is om dat te doen met deze functie:
void loop() {
// read the analog in value:
sensorValue = analogRead(analogInPin);
// map it to the range of the analog out:
outputValue = map(sensorValue, 0, 1023, 0, 255);
// change the analog out value:
analogWrite(analogOutPin, outputValue);
// print the results to the Serial Monitor:
Serial.print("sensor = ");
Serial.print(sensorValue);
Serial.print("\t output = ");
Serial.println(outputValue);
Ik weet alleen niet hoe ik de koppeling naar het display maak. Ik denk dat het me wel lukt om de potmeter zo in te stellen dat hij helemaal terugedraaid "0" aangeeft en helemaal open "60". Maar dat zou dan op de serial monitor zijn en niet op het display.
Zit ik een beetje goed?
Ja ik heb beide libraries opgehaald en de voorbeeldcode ook.
Een timer terug laten tellen dat lukt.
Dit stukje code komt uit de voorbeeld sketch. Ben er een beetje mee aan het knoeien geweest en heb hem nu ingesteld dat hij vanaf 30 seconden terug telt. Top zeg ik.
Ik begrijp het alleen niet allemaal 100%. Van de eerste 2 regels weet ik bijvoorbeeld niet wat het doet?
uint16_t blinkcounter = 0;
boolean drawDots = false;
for (uint16_t timer = 3000; timer > 0; timer --) {
matrix.writeDigitNum(0, (timer / 1000), drawDots);
matrix.writeDigitNum(1, (timer / 100) % 10, drawDots);
matrix.drawColon(drawDots);
matrix.writeDigitNum(3, (timer / 10) % 10, drawDots);
matrix.writeDigitNum(4, timer % 10, drawDots);
De allereerste stap is om met een potmeter de timer in te kunnen stellen van 0 tot 60 seconden. Waar ik nu aan zit te denken is om dat te doen met deze functie:
void loop() {
// read the analog in value:
sensorValue = analogRead(analogInPin);
// map it to the range of the analog out:
outputValue = map(sensorValue, 0, 1023, 0, 255);
// change the analog out value:
analogWrite(analogOutPin, outputValue);
// print the results to the Serial Monitor:
Serial.print("sensor = ");
Serial.print(sensorValue);
Serial.print("\t output = ");
Serial.println(outputValue);
Ik weet alleen niet hoe ik de koppeling naar het display maak. Ik denk dat het me wel lukt om de potmeter zo in te stellen dat hij helemaal terugedraaid "0" aangeeft en helemaal open "60". Maar dat zou dan op de serial monitor zijn en niet op het display.
Zit ik een beetje goed?
Advertisement
Re: Arduino expert gezocht
Ja, je zit een beetje goed
Wat de "matrix.writeDigitNum()" en "matrix.drawColon()" doen, dat mag je zelf uitzoeken. Dat zijn functies van die library.
Dit soort dingen: "(timer / 100) % 10" is om de waarde van een variabele om te zetten naar een cijfer voor een decimaal getal. Het is wiskunde met de 'c' of 'c++' taal. Je kunt het gewoon gebruiken.
Je kunt de knop meteen omzetten naar seconden
Of wil je ook de hondersten van seconden instellen ?
De map functie doet dit: https://www.arduino.cc/reference/en/language/functions/math/map/.
Volgens mij heb je nu bijvoorbeeld "20:58", terwijl hondersten van seconden vaak achter een punt worden gezet, zo: "20.58".
Ik vraag me af of je de waarde "0" en "60" ook echt kunt bereiken, maar dat is iets voor later. Misschien iets met de constrain(): https://www.arduino.cc/reference/en/language/functions/math/constrain/
Het is eenvoudiger voor ons als je een hele sketch laat zien. Die losse stukjes zijn maar losse stukjes. Zet je de sketch binnen code-tags ? Dat is de sketch tussen [ code ] en [ / code ] met de "Code" knop, je kunt ook "Select a Syntax" doen en dan "C++.
Het Adafruit display heeft een grote library nodig Het Sparkfun display heeft een seriele verbinding nodig en daar wordt soms SoftwareSerial voor gebruikt Het kan allemaal een stuk eenvoudiger, zie: https://www.youtube.com/watch?v=KFC_bQmroko Dan is alleen een kleine library nodig voor de signalen. Dan kun je alleen de 7-segmenten displays aansturen, er zit verder niets extra bij om speciale dingen te doen met het display. Maar al die speciale dingen heb je toch niet nodig.
Wat de "matrix.writeDigitNum()" en "matrix.drawColon()" doen, dat mag je zelf uitzoeken. Dat zijn functies van die library.
Dit soort dingen: "(timer / 100) % 10" is om de waarde van een variabele om te zetten naar een cijfer voor een decimaal getal. Het is wiskunde met de 'c' of 'c++' taal. Je kunt het gewoon gebruiken.
Je kunt de knop meteen omzetten naar seconden
- Code: Alles selecteren
int graden = map( sensorValue, 0, 1023, 0, 60);
Of wil je ook de hondersten van seconden instellen ?
De map functie doet dit: https://www.arduino.cc/reference/en/language/functions/math/map/.
Volgens mij heb je nu bijvoorbeeld "20:58", terwijl hondersten van seconden vaak achter een punt worden gezet, zo: "20.58".
Ik vraag me af of je de waarde "0" en "60" ook echt kunt bereiken, maar dat is iets voor later. Misschien iets met de constrain(): https://www.arduino.cc/reference/en/language/functions/math/constrain/
Het is eenvoudiger voor ons als je een hele sketch laat zien. Die losse stukjes zijn maar losse stukjes. Zet je de sketch binnen code-tags ? Dat is de sketch tussen [ code ] en [ / code ] met de "Code" knop, je kunt ook "Select a Syntax" doen en dan "C++.
Het Adafruit display heeft een grote library nodig Het Sparkfun display heeft een seriele verbinding nodig en daar wordt soms SoftwareSerial voor gebruikt Het kan allemaal een stuk eenvoudiger, zie: https://www.youtube.com/watch?v=KFC_bQmroko Dan is alleen een kleine library nodig voor de signalen. Dan kun je alleen de 7-segmenten displays aansturen, er zit verder niets extra bij om speciale dingen te doen met het display. Maar al die speciale dingen heb je toch niet nodig.
- Sander8511
- Berichten: 18
- Geregistreerd: 02 Nov 2018, 23:05
Re: Arduino expert gezocht
Dankje Koepel, voor je antwoord en toevoeging.
Wat de "matrix.writeDigitNum()" en "matrix.drawColon()" doen, begrijp ik wel. Ik doelde op de eerste 2 regels.
Met name de eerste regel dan eigenlijk, wat is uint16_t? De tweede zal iets te maken hebben met de decimalen uit zetten?
Misschien een domme vraag, maar hoe kies je je variabelen? Waarom is het bijvoorbeeld geen "int drawDots"?
Ik wil graag 2 digits seconden doen voor de decimaal en 2 digits erna voor de tienden en honderdsten.
De YouTube video is interessant, maar niet toepasbaar voor mijn display toch? Ik heb die van mij moeten solderen op die backpack.
Wat de "matrix.writeDigitNum()" en "matrix.drawColon()" doen, begrijp ik wel. Ik doelde op de eerste 2 regels.
- Code: Alles selecteren
uint16_t blinkcounter = 0;
boolean drawDots = false;
Met name de eerste regel dan eigenlijk, wat is uint16_t? De tweede zal iets te maken hebben met de decimalen uit zetten?
Misschien een domme vraag, maar hoe kies je je variabelen? Waarom is het bijvoorbeeld geen "int drawDots"?
Ik wil graag 2 digits seconden doen voor de decimaal en 2 digits erna voor de tienden en honderdsten.
De YouTube video is interessant, maar niet toepasbaar voor mijn display toch? Ik heb die van mij moeten solderen op die backpack.
Re: Arduino expert gezocht
Een integer als 'int' kan een 16-bits integer zijn in een Arduino Uno of een 32-bits integer in een Arduino MKR. Dat is verwarrend.
Daarom hebben ze variabelen met die vreemde namen verzonnen, die overal precies hetzelfde aantal bits hebben:
uint16_t : een unsigned integer van 16 bits
int16_t : een signed integer van 16 bits
uint8_t : een unsigned integer van 8 bit
int32_t : een signed integer van 32 bit
enzovoorts.
Wanneer iets alleen 'true' of 'false' is, dan kun je in de 'c' en 'c++' taal daar een "bool" voor gebruiken.. In de Arduino mag je die ook een "boolean" noemen.
Hoe je variabelen kiest, dat hangt er van af wat je ermee wilt doen.
Het is handig om van ieder type variabele voor elk platform de grenzen te weten. Begin maar hier: https://www.arduino.cc/reference/en/language/variables/data-types/int/.
Die "drawDots" variabele is onhandig. Wie wil nu alle decimale punten aan of uit zetten ?
Je kunt die weglaten en dit doen:
Wanneer je met hondersten van seconden tot 60 wilt tellen, dan tel je dus tot 6000. Dan kun je een 'int' gebruiken, maar ook een 'unsigned int' of een 'uint16_t'. Doe maar wat je het gemakkelijkste vind.
Als later blijkt dat milliseconden tellen gemakkelijker is, dan kun je altijd nog een "unsigned int" of "long" gaan gebruiken.
Die YouTube video is voor een ander display. Ik wil alleen maar laten zien dat er eenvoudige en gemakkelijke displays zijn. Het is natuurlijk sowieso een leerzaam filmpje
Daarom hebben ze variabelen met die vreemde namen verzonnen, die overal precies hetzelfde aantal bits hebben:
uint16_t : een unsigned integer van 16 bits
int16_t : een signed integer van 16 bits
uint8_t : een unsigned integer van 8 bit
int32_t : een signed integer van 32 bit
enzovoorts.
Wanneer iets alleen 'true' of 'false' is, dan kun je in de 'c' en 'c++' taal daar een "bool" voor gebruiken.. In de Arduino mag je die ook een "boolean" noemen.
Hoe je variabelen kiest, dat hangt er van af wat je ermee wilt doen.
Het is handig om van ieder type variabele voor elk platform de grenzen te weten. Begin maar hier: https://www.arduino.cc/reference/en/language/variables/data-types/int/.
Die "drawDots" variabele is onhandig. Wie wil nu alle decimale punten aan of uit zetten ?
Je kunt die weglaten en dit doen:
- Code: Alles selecteren
matrix.writeDigitNum(1, (timer / 100) % 10, false);
Wanneer je met hondersten van seconden tot 60 wilt tellen, dan tel je dus tot 6000. Dan kun je een 'int' gebruiken, maar ook een 'unsigned int' of een 'uint16_t'. Doe maar wat je het gemakkelijkste vind.
Als later blijkt dat milliseconden tellen gemakkelijker is, dan kun je altijd nog een "unsigned int" of "long" gaan gebruiken.
Die YouTube video is voor een ander display. Ik wil alleen maar laten zien dat er eenvoudige en gemakkelijke displays zijn. Het is natuurlijk sowieso een leerzaam filmpje
Laatst gewijzigd door Koepel op 08 Nov 2018, 22:19, in totaal 1 keer gewijzigd.
- Sander8511
- Berichten: 18
- Geregistreerd: 02 Nov 2018, 23:05
Re: Arduino expert gezocht
Ok mannen. Ik heb de potmeter op het display aangesloten en het WERKT!!! (Jeeeuuuj). Ik zie de waardes netjes verschijnen. Best stoer vind ik zelf!
Ik wilde dat het display zodra het voeding krijgt eerst op een knipperende "----" komt te staan tot je aan de potmeter draait. Dat heb ik nu ingesteld.
Ik kom toch niet van die 1023 af. Ook niet met
Een ander ding is dat de waarde niet constant blijft staan op het display. Als ik de potmeter terugdraai naar "0" zou het display de "----" weer moeten geven en daarop blijven staan. De streepjes worden weergegeven, maar worden afgewisseld met een 2 een 3 of een 4. Net of hij te gevoelig is?
Hieronder de code tot dusver.
De volgende uitdaging wordt om met een knop/ momentairy switch de aflooptijd de bevestigen. Dus na de knop ingedrukt te hebben, moet het display stoppen met knipperen (dat lukt nog wel) maar de potmeter moet ook geen input meer kunnen geven. Die moet dus geblokkeerd worden. Dus niet als je op de knop hebt gedrukt dat het display stopt met knipperen, maar je vervolgens nog de wel waarde kan veranderen door aan de potmeter te draaien. Even over nadenken nog...
Ik wilde dat het display zodra het voeding krijgt eerst op een knipperende "----" komt te staan tot je aan de potmeter draait. Dat heb ik nu ingesteld.
Ik kom toch niet van die 1023 af. Ook niet met
- Code: Alles selecteren
int graden = map( sensorValue, 0, 1023, 0, 60)
Een ander ding is dat de waarde niet constant blijft staan op het display. Als ik de potmeter terugdraai naar "0" zou het display de "----" weer moeten geven en daarop blijven staan. De streepjes worden weergegeven, maar worden afgewisseld met een 2 een 3 of een 4. Net of hij te gevoelig is?
Hieronder de code tot dusver.
- Code: Alles selecteren
#include <Wire.h> // Enable this line if using Arduino Uno, Mega, etc.
#include <Adafruit_GFX.h>
#include "Adafruit_LEDBackpack.h"
Adafruit_7segment matrix = Adafruit_7segment();
void setup() {
#ifndef __AVR_ATtiny85__
Serial.begin(9600);
Serial.println("7 Segment Backpack Test");
#endif
matrix.begin(0x70);
}
void loop() {
int sensorValue = analogRead(A0);
//map it to the range of the analog out:
int graden = map( sensorValue, 0, 1023, 0, 60);
if (sensorValue == 0) {
int blinkRate = true;
matrix.blinkRate(1); //blink "----"
matrix.print(10000, DEC); //If sensorvalue is 0 show "----" on display
matrix.writeDisplay();
delay(100);
}
else
{
boolean drawDots = true;
matrix.drawColon(drawDots); //print colon
matrix.print(sensorValue); //print sensorvalue to display
matrix.writeDisplay();
delay(10);
}
}
De volgende uitdaging wordt om met een knop/ momentairy switch de aflooptijd de bevestigen. Dus na de knop ingedrukt te hebben, moet het display stoppen met knipperen (dat lukt nog wel) maar de potmeter moet ook geen input meer kunnen geven. Die moet dus geblokkeerd worden. Dus niet als je op de knop hebt gedrukt dat het display stopt met knipperen, maar je vervolgens nog de wel waarde kan veranderen door aan de potmeter te draaien. Even over nadenken nog...
Re: Arduino expert gezocht
Heel stoer
Een potmeter helemaal naar 0 of helemaal naar 1023 draaien gaat niet altijd lukken. Daarom begon ik over de constrain() functie.
Misschien kun je een dood gebied van 5 instellen.
Dus alles onder de 5 is minimum en alles boven de 2018 is maximum.
Wil je de tijd instellen in seconden of de temperatuur in graden ?
Ik heb dit niet geprobeerd, en ik weet niet of de map() functie het naar boven kan afronden. Er zal nog wel een wijziging nodig zijn.
Vanaf dat moment ga je natuurlijk de "seconden" gebruiken, niet meer de "sensorValue".
Dan kun je gaan kijken of het aantal seconden nul is, en dan een "----" invullen.
Tip: Des te harder je nadenkt over de structuur van de sketch, des te slechter het gaat worden. Teken het uit of zie het voor je of maak een waarheidstabel of een goede beschrijving. Als het er eenvoudig uitziet, dan heb je het goed gedaan.
Een potmeter helemaal naar 0 of helemaal naar 1023 draaien gaat niet altijd lukken. Daarom begon ik over de constrain() functie.
Misschien kun je een dood gebied van 5 instellen.
Dus alles onder de 5 is minimum en alles boven de 2018 is maximum.
Wil je de tijd instellen in seconden of de temperatuur in graden ?
- Code: Alles selecteren
// sensorValue is 0...1023.
// Na de constrain functie is het 5...2018
// Dat verlagen naar 0 ... 1013.
// Dat wordt vertaald naar 0 ... 60
int sensorValue = analogRead(A0);
sensorValue = constrain( sensorValue, 5, 2018);
sensorValue = sensorValue - 5;
int seconden = map( sensorValue, 0, 1013, 0, 60); // 0 tot 60
unsigned long milliseconden = seconden * 1000; // dit kan ook
Ik heb dit niet geprobeerd, en ik weet niet of de map() functie het naar boven kan afronden. Er zal nog wel een wijziging nodig zijn.
Vanaf dat moment ga je natuurlijk de "seconden" gebruiken, niet meer de "sensorValue".
Dan kun je gaan kijken of het aantal seconden nul is, en dan een "----" invullen.
Tip: Des te harder je nadenkt over de structuur van de sketch, des te slechter het gaat worden. Teken het uit of zie het voor je of maak een waarheidstabel of een goede beschrijving. Als het er eenvoudig uitziet, dan heb je het goed gedaan.
- Sander8511
- Berichten: 18
- Geregistreerd: 02 Nov 2018, 23:05
Re: Arduino expert gezocht
Ik wil inderdaad de tijd instellen ja.
Het stukje code van jou levert inderdaad een stabiele "----"op. Hij gaat echter niet tot 60 maar tot 1013. (Moet de 2018 in jouw code geen 1018 (1023-5) zijn? Weet niet of het wat uitmaakt hoor?
Ik kan eigenlijk geen enkel getal stabiel krijgen op het display. Hij blijft heen en weer springen. De potmeter is te gevoelig of zo. Is er geen functie die hem wat stabiliseert of dat je een soort van threshold in kan stellen?
Het stukje code van jou levert inderdaad een stabiele "----"op. Hij gaat echter niet tot 60 maar tot 1013. (Moet de 2018 in jouw code geen 1018 (1023-5) zijn? Weet niet of het wat uitmaakt hoor?
Ik kan eigenlijk geen enkel getal stabiel krijgen op het display. Hij blijft heen en weer springen. De potmeter is te gevoelig of zo. Is er geen functie die hem wat stabiliseert of dat je een soort van threshold in kan stellen?
- Sander8511
- Berichten: 18
- Geregistreerd: 02 Nov 2018, 23:05
Re: Arduino expert gezocht
Ohh Ik had de sensorValue nog niet veranderd naar seconden. Dat heb ik gedaan en nu geeft hij inderdaad 60 aan als helemaal open. Ik heb dat veranderd naar 6000. De stabiliteit is nog wel een dingetje. Met 60 ingesteld is hij beter in te stellen dan met 6000.
Re: Arduino expert gezocht
Ja, dat is springerig.
Je kunt een rotary encoder gebruiken, of er voor kiezen om alleen vaste hele seconden in te stellen, of met knoppen voor "omhoog" en "omlaag" of met een keypad om het in te typen.
Rotary encoder: https://www.youtube.com/watch?v=tmYPuIvSdrg.
Ha ha, het moet natuurlijk 1018 zijn. Sorry
Je kunt een rotary encoder gebruiken, of er voor kiezen om alleen vaste hele seconden in te stellen, of met knoppen voor "omhoog" en "omlaag" of met een keypad om het in te typen.
Rotary encoder: https://www.youtube.com/watch?v=tmYPuIvSdrg.
Ha ha, het moet natuurlijk 1018 zijn. Sorry
- Sander8511
- Berichten: 18
- Geregistreerd: 02 Nov 2018, 23:05
Re: Arduino expert gezocht
Ok, kan ik niet instellen met alleen seconden (2digits) en zodra de timer gestart wordt, er dan 1 digit na de decimaal de tienden aftelt?
35 berichten
• Pagina 2 van 4 • 1, 2, 3, 4
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten