Go Down

Topic: Eerste probeersel. Werkt niet zoals verwacht. Waar ga ik fout (Read 891 times) previous topic - next topic

septillion

Zijn dat dan taken die veel tijd kosten om te berekenen? Maar begint zo wel een beetje een XY probleem te worden.

Vroegah, ging dat met een Gosub/Return. Ik zie dat dit niet bestaat bij Arduino/C?
Iets soortgelijks is er in C ook maar blijf er ver van weg. Nu heb je gewoon functies :)

Hoe kan ik dan steeds naar de subroutine gaan om daar de verse gegevens te verwerken en weer terug te keren?
Functies dus :)

BTW, even over je laatste reactie.
Ik had een regel die wel werkte, maar die nu erg knullig lijkt...
Code: [Select]

const bool RXLED = 17; //variabele om te aan te geven dat poortje 17 de RXLED is

Lijkt me sterk dat het werkt. ;) Ja, het zal wel compilen maar doet niet wat je wilt. Een bool is namelijk een variabele type van 1-bit. Kan dus alleen een 0 of 1 bevatten. En je schrijft er 17 in, dat is geen 0, dus je bool is nu 1.

Je wilt een het type byte hebben. Die is 8-bit (unsigned) en kan daarmee een waarde tot 255 bevatten.

En zelf zou ik hem iets anders noemen:
Code: [Select]
const byte RxLedPin = 17;
Is het eigenlijk al duidelijk wat het is zonder commentaar.

Of je kunt de ingebakken variant gebruiken.
Code: [Select]
pinMode(LED_BUILTIN_RX, OUTPUT); //LED_BUILTIN_RX is al gedefinieerd als 17 voor een Pro Micro :)
Use fricking code tags!!!!
I want x => I would like x, I need help => I would like help, Need fast => Go and pay someone to do the job...

NEW Library to make fading leds a piece of cake
https://github.com/septillion-git/FadeLed

FTMZ

Dank weer voor je verduidelijkende antwoorden, Septilion!
Excuus dat ik wat laat reageer... Ik zag te laat dat de Treath doorliep op een tweede pagina.

Nog even terugkomend op het verhaal van de RXLEDpin 17 en zo...
Dat dit 17 was, haalde ik uit een ander programma, geënt op de ProMicro.
Dat de waarde van deze pin door de BOOL slechts 1 of 0 kon zijn, was eigenlijk geen probleem.
Het was een indicatieLED. Of 1 of 0.
Het is een erfenisje van mijn onkunde over hoe een pin toe te wijzen.

Het alternatief op Gosub heb ik even onhold gezet. Dat is misschien niet meer aan de orde. Anders heb ik deze forumtreath als naslagwerk.

Het begint me allemaal steeds meer te dagen.
Echter loop ik nu tegen totaal wat anders aan.
Regelmatig geeft mijn laptop aan dat hij geen board op de toegewezen Compoort ziet.
Terwijl ik een paar tellen ervoor nog wat heb geupload naar de ProMicro. Gevolg is wel dat het apparaatje niet werkt en dat ik ook niets kan zien op de seriele monitor.

Het lijkt erop dat deze melding komt, wanneer ik de seriele monitor open (CTRL/Shift/M).
Als het daarna zou werken, zou wat vertraging geen probleem zijn. Maar er gebeurd dan helemaal niets.
Ik moet dan eerst weer de code uploaden, waarna het meestal weer werkt. Tot ik die Seriele monitor er weer bij betrek.
De volgende melding kon ik copieren:

Arduino:1.8.8 (Windows 10), Board:"Arduino Leonardo"

De schets gebruikt 4996 bytes (17%)  programma-opslagruimte. Maximum is 28672 bytes.
Globale variabelen gebruiken 173 bytes (6%) van het dynamisch geheugen. Resteren 2387 bytes voor lokale variabelen. Maximum is 2560 bytes.


Kan op de geselecteerde poort geen board vinden. Controleer of u de correcte poort hebt geselecteerd. Indien deze correct is, druk dan op de resetknop van het board nadat u de upload hebt geïnitialiseerd.

Dit rapport zou meer informatie bevatten met
"Uitgebreide uitvoer weergeven tijden compilatie"
optie aan in Bestand -> Voorkeuren.


Ik heb een keer de compiler en de Seriele monitor tegelijk open gehouden in mijn scherm (ipv te maximaliseren). Ik behoefde dus geen SM meer te openen. Dat leek goed te gaan.
Is dit een bugje wat ik niet ken?

Misschien zijdelings... Maar wat mij ook opvalt is dat het programma niet meteen start wanneer ik de (reeds geprogde) ProMicro aan de spanning (lees: USB van de laptop) hang.
Is dit gerelateerd aan het eerdergenoemde probleem?
Of is dit een ander dingetje wat ik mis?

GijKieken

De Usb aansluiting op je bordje slechte las?
Wat ook kan is dat bij sommige laptops de Usb spanning geen 5 volt haalt,,,

MAS3

De Pro Micro is een Leonardo variant.
Dat ding heeft native USB ondersteuning op de chip, en daarmee niet een extra USB naar serieel adapter aan boord.
Dat kan er toe leiden dat je Arduino zich eerst als een Arduino aanmeldt, maar even later (als er niets geupload word naar het ding), zich als een ander USB device meldt.
Dat is dan in jouw geval een HID toetsenbord, want eerder gaf je aan dat te willen gaan gebruiken.
En een toetsenbord is geen Arduino.


Quote from: FTMZ
Nog even terugkomend op het verhaal van de RXLEDpin 17 en zo...
Dat dit 17 was, haalde ik uit een ander programma, geënt op de ProMicro.
Dat de waarde van deze pin door de BOOL slechts 1 of 0 kon zijn, was eigenlijk geen probleem.
Het was een indicatieLED. Of 1 of 0.
Het is een erfenisje van mijn onkunde over hoe een pin toe te wijzen.
Het gaat daar nog steeds fout.
Jij wil aangeven dat je pin 17 wil gebruiken, omdat daar een LED op is aangesloten.
Dat doe je eerst (met je aangepaste code) hier:
Code: [Select]
const bool RXLED = 17;
Je maakt hier de term RXLED gelijk aan de boolean die overeenkomt met de waarde 17.
Zoals septilion al aangaf (en ik ook in een antwoord dat ik uiteindelijk maar niet heb geplaatst), werkt het bij booleans iets anders als je mogelijk zou verwachten.
Want daar is een nul een nul (das nog niet zo verrassend).
Maar alles wat niet een nul is, is een 1.
Dus als je een stukje verderop in je code dit doet:
Code: [Select]
  pinMode(RXLED, OUTPUT);
Dan is dat gelijk aan dit:
Code: [Select]
  pinMode(1, OUTPUT);
En vertel je dus jouw code dat je pin 1 wil gebruiken als een uitgang om weer iets verderop een LEDje mee te laten knipperen.

Ik zou niet weten wat er aan pin 1 van een ProMicro zit (zou ik moeten opzoeken), maar het doet in ieder geval niet wat jij dacht dat het zou doen.
Dat jij uiteindelijk op pin 17 waar je LEDje in werkelijkheid wel aan zit, een 1 of een nul (dus de keuzes die booleans je bieden) wil zetten heeft daar dus verder weinig mee te maken,
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

septillion

Dat de waarde van deze pin door de BOOL slechts 1 of 0 kon zijn, was eigenlijk geen probleem.
Het was een indicatieLED. Of 1 of 0.
Daar maak je een denkfout! Er is een verschil tussen een variabele die het pinnummer bevat en de variabele die de staat van de pin bevat ;) Zie bijvoorbeeld ook digitalWrite(). Eerste parameter is het pin nummer, tweede parameter is de pin staat.

Oeps,  MAS3 was me voor. :D
Use fricking code tags!!!!
I want x => I would like x, I need help => I would like help, Need fast => Go and pay someone to do the job...

NEW Library to make fading leds a piece of cake
https://github.com/septillion-git/FadeLed

FTMZ

Het gaat daar nog steeds fout.
Jij wil aangeven dat je pin 17 wil gebruiken, omdat daar een LED op is aangesloten.
Dat doe je eerst (met je aangepaste code) hier:
Code: [Select]
const bool RXLED = 17;
Je maakt hier de term RXLED gelijk aan de boolean die overeenkomt met de waarde 17.
Zoals septilion al aangaf (en ik ook in een antwoord dat ik uiteindelijk maar niet heb geplaatst), werkt het bij booleans iets anders als je mogelijk zou verwachten.
Want daar is een nul een nul (das nog niet zo verrassend).
Maar alles wat niet een nul is, is een 1.
Dat wist ik. Ik had ook geen problemen met het feit dat het een 1 of 0 was. Ik verwachtte een on/off situatie te maken. Daar heb ik de fout gemaakt door een (ik meende dat dat alias heette) verwijzing naar een pin, te behandelen als de status van de pin.
Nu realiseer ik me ook dat dat de reden is dat ik niks meer zag knipperen.
Quote
Dus als je een stukje verderop in je code dit doet:
Code: [Select]
  pinMode(RXLED, OUTPUT);
Dan is dat gelijk aan dit:
Code: [Select]
  pinMode(1, OUTPUT);
En vertel je dus jouw code dat je pin 1 wil gebruiken als een uitgang om weer iets verderop een LEDje mee te laten knipperen.
Inderdaad... Zo fout dit... :-(
Het stomme was dat ik dit achteraf wel wist en het ook zou aanpassen (nav een eerdere reactie van jullie).
Quote
Dat jij uiteindelijk op pin 17 waar je LEDje in werkelijkheid wel aan zit, een 1 of een nul (dus de keuzes die booleans je bieden) wil zetten heeft daar dus verder weinig mee te maken,

Idd. Ik wijs op een andere manier een pin toe, snap ik nu.

Wat de functie van die pin 1 versus pun 17 betreft, maakt dat voor het projectie niet zoveel uit.
Het is slechts een indicatie ledje om te zien waar een programma zich bevindt.

Even terug naar de ProMicro in zijn hoedanigheid als HID.
Dat stukje code heb ik uitgeschakeld omdat ik eerst de voorwaarden/condities wil creeeren waaronder de ProMicro zijn waardes als toetsenbord moet gaan "typen".

Ik zou dus verwachten dat de ProMicro USB poort constant een verbinding heeft met mijn laptop.
Of is het zo dat seriele data naar de serial-monitor conflicteert met het proggen van de code in de ProMicro?

En daarbij blijf ik het lastig vinden dat het apparaatje het niet lijkt te doen zónder aangesloten te zijn op mijn laptop. (wacht even... Ik bedoel dit anders, maar ik weet niet meer hoe. Zonder USB geen spanning op de print. Dat was het niet...)

MAS3

Je moet even opletten met de Leonardo varianten wanneer je een seriële verbinding initialiseert.
Ik kan je nu niet direct een link geven, maar ik weet wel (ook weer niet van de hoed en de rand) dat daar een specifieke stap voor gezet moet worden (serial.available, zo even uit het hoofd), anders blokkeert de hele boel.

Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

FTMZ

Waarvan Akte, MAS3,

Ik doe nog niet zoveel met het uiteindelijke plan om een stukje tekst te genereren, afhankelijk van berekende waardes.
Ik wil me eerst maar eens vastbijten in hoe die formules binnen schappelijke loopjes kunnen blijven en ik geen Goto of Gosub acties nodig heb.

Als ik dat in de vingers heb, kan ik de HID funktie aanroepen om de stukjes tekst op het beeld te krijgen.
Voor nu (gebaseerd op jullie adviezen) laat ik dat seriële achterwege.
Tenzij het meekijken met de seriële monitor daar ook onder valt. Want die zal nodig zijn tijdens het programmeren om te zien of alles naar wenst verloopt. Uiteindelijk kan ik die regeltjes wel laten vervallen.

MAS3

Ja, het meekijken via de seriële poort valt daar ook onder.
Want om dat te faciliteren, moet je eerst de verbinding opzetten en vervolgens iets naar die verbinding sturen, zodat je ook wat hebt on mee te kijken met de seriële monitor.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

FTMZ

Wat dat aangaat was ik zo nu en dan te haastig met het starten van het programma.
Terwijl de dataupload nog niet leek te zijn voltooid.

MAS3

Ik maak een keuze tussen het gebruik van de seriële poort, of van een tijdelijk toegevoegd display.
Het gaat mij er daarbij dan om wat voor mij op dat moment het beste uitkomt.
Wanneer ik iets maak waar een display bij hoort, dan probeer ik slechts een gedeelte van het display te gebruiken voor het debuggen.

Soms is het ook mogelijk meerdere displays te gebruiken.
Ik kan me wel voorstellen dat wanneer je geen pins over hebt, dat dat dan allemaal wat lastig is.

Houd er rekening mee dat bij de meeste Arduinos het opzetten van een seriële verbinding met de PC, de Arduino een reset krijgt.
Je kunt dat meestal wel voorkomen, maar dan word het uploaden van nieuwe code weer lastig (want daarvoor is een reset noodzakelijk).
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

FTMZ

Dat verklaart wel de nodige bugs in het seriele deel.
Om dit moment gebruik ik de seriele monitor ook om te debuggen.
Toen ik nog mijn projecten in PICbasic schreef, had ik ook (vaak) een 2x20 display om zaken te monitoren.
Ik vond het juist zo makkelijk dat het bij Arduino met een monitor gaat zodat ik niet meer hele bouwwerken, op een plankje geschroefd, mee moest zeulen als ik weer ging programmeren.
Toegegeven, er zaten toen ook nog proggers bij, en een USB HUB...

Bestaat er ook een online omgeving met een virtuele Arduino?
Zodat je gedragingen kunt monitoren zonder daadwerkelijk een Arduino aan te sluiten?
Leek me zo nu en dan wel handig.

Uiteindelijk zal ik natuurlijk niets meer bij hoeven houden met de seriele monitor, en is mijn Arduino een soort van keyboard. Ik hoop alleen wel dat deze meteen als zodanig start, en ook herkend wordt door de betreffende PC, zodat hij meteen zijn taak kan uitvoeren.

Tot zover ben ik flink vooruit geholpen!

septillion

Bestaat er ook een online omgeving met een virtuele Arduino?
Ja, maar ver weg van blijven ;) Werken leuk om wat standaard ledjes te laten knipperen maar daarna is het een ramp.

Ik hoop alleen wel dat deze meteen als zodanig start, en ook herkend wordt door de betreffende PC, zodat hij meteen zijn taak kan uitvoeren.
Hij zal zich altijd eerst even aanmelden als Arduino om te controleren of je hem niet wilt programmeren. Gebeurd dat niet dan verdwijnt hij als Arduino en verschijnt hij als HID.
Use fricking code tags!!!!
I want x => I would like x, I need help => I would like help, Need fast => Go and pay someone to do the job...

NEW Library to make fading leds a piece of cake
https://github.com/septillion-git/FadeLed

FTMZ

Dank voor deze toevoeging. Had ik nog even gemist.
Geen simulatiesofteware dus. :)

Go Up