Overigens houdt het ook verband met de werking van de serial monitor en de wijze waarop de controller reset. Je zou bv even met Termite kunnen proberen; redelijke kans dat je daarmee de initiële Serial.print wel vangt, ook zonder opstartvertraging.
Die loop met een eindeloos repeterend if-statement is een nogal merkwaardige workaround die misschien wel (soort van) werkt, maar een aantal nadelen heeft. O.a. dat de tijdsduur afhankelijk is van de snelheid waarmee de loop() draait (dus verdere code), en ook dat dat if-statement eindeloos geëvalueerd blijft worden, ook als de Serial output al (eenmalig) is voltooid. Dus loze code-executie. Geen van beide zijn per se schadelijk of onoverkomelijk, maar m.i. niet de meest logische route.
Overigens, als je toch Copilot vraagt wat er aan de hand is, kun je ook even vragen om een stukje code om het op te lossen. Met zoiets simpels als dit gaat dat vrijwel altijd goed.
while (!Serial){}Dat helpt hier ws. niet. Dat levert alleen een halt op totdat de UART aan de uC zijde is geïnitialiseerd, maar daarmee wordt nog niet gewacht tot de andere kant actief luistert.Accretion schreef op woensdag 7 oktober 2026 @ 19:22:
Afhankelijk van het bord kun je ook het volgende doen:while (!Serial){}
Ok, bedankt voor de tip maar de aanvangspositie wordt volgens mij al bepaald in regel 1 >PageFault schreef op dinsdag 6 oktober 2026 @ 14:39:
Jouw C++ loop is redelijk link. Het is lazy expression en in principe als !printed waar is, wordt warmup niet verhoogt.
1
| bool printed = false; |
De bedoeling is om een tekstregel slechts 1 keer te printen in de serial monitor. Omdat dit niet schijnt te lukken vanuit void setup() is deze omweg door een copiloot gemaakt >NewGuest schreef op dinsdag 6 oktober 2026 @ 18:18:
Moet !printed dan in een aparte if statement gechecked worden om het robuuster te maken?
1
2
3
4
5
6
7
8
| bool printed = false; int warmup = 0; void loop() { if (!printed && warmup++ > 5000) { Serial.println("RGB LED Bridge ready"); printed = true; } } |
Dat vind ik best een hele goeie en dat is ook het eerste waar de assistent mee aan kwam maar ik heb dat geprobeerd en dat pakt niet. Zo'n conversatie kopieer ik naar een Notepad++ bestandje omdat je daar een zoekfunctie kunt gebruiken, in de copiloot chat zit dat niet inbegrepen zover ik weet. Dat bestand heeft zo'n 9500 regels wat een weekje spelen met de Uno-Q beslaat maar heb dit terug kunnen vinden >koraks schreef op dinsdag 6 oktober 2026 @ 19:48:
Als het probleem inderdaad is dat de console output al voorbij is voordat de serial monitor start (en dat is goed mogelijk c.q. vaak het geval), dan kun je gewoon een halt inbouwen m.b.v. bv. delay() die de serial monitor de tijd geeft om op te starten. Bv. delay(5000) meteen aan het begin van setup() geeft een 5 sec. halt waarna de rest van het programma verder gaat.
1
2
3
4
| ⭐ Why the delay trick doesn’t work The delay happens inside the MCU, but App Lab’s Serial Monitor attachment happens inside the Linux side, and App Lab always attaches after the MCU has already started running. |
Tnx, maar de bedoeling is juist om de tekst in App Lab's serial monitor te laten verschijnen. Ik gebruik wel eens HTerm en in de gebruikershandleiding van de Uno-Q staan een tweetal opties >Overigens houdt het ook verband met de werking van de serial monitor en de wijze waarop de controller reset. Je zou bv even met Termite kunnen proberen; redelijke kans dat je daarmee de initiële Serial.print wel vangt, ook zonder opstartvertraging.
:strip_exif()/f/image/RNsQgejixv5J79X2wcG2FzJ3.gif?f=fotoalbum_large)
https://docs.arduino.cc/t...ware-debug-uart-interface
en
https://docs.arduino.cc/tutorials/uno-q/user-manual/#uart
Klopt, erg efficient is het niet, meer een noodverbandje. Goed gezien trouwensDie loop met een eindeloos repeterend if-statement is een nogal merkwaardige workaround die misschien wel (soort van) werkt, maar een aantal nadelen heeft. O.a. dat de tijdsduur afhankelijk is van de snelheid waarmee de loop() draait (dus verdere code), en ook dat dat if-statement eindeloos geëvalueerd blijft worden, ook als de Serial output al (eenmalig) is voltooid. Dus loze code-executie. Geen van beide zijn per se schadelijk of onoverkomelijk, maar m.i. niet de meest logische route.
Het stukje code wat ik gevraagd en gekregen heb is de eenmalige warm-up loop die hierboven staat. Nadat de eerste geleverde code, namelijk een delay in setup() niet bleek te werken. Helaas is zo'n AI daarom geen garantie dat die alles even voor je oplost. Misschien dat dit ooit verbetert als je ervoor moet gaan betalenOverigens, als je toch Copilot vraagt wat er aan de hand is, kun je ook even vragen om een stukje code om het op te lossen. Met zoiets simpels als dit gaat dat vrijwel altijd goed.
Tnx, ik heb het volgende geprobeerd >Accretion schreef op woensdag 7 oktober 2026 @ 19:22:
Afhankelijk van het bord kun je ook het volgende doen:while (!Serial){}
1
2
3
| Serial.begin(9600); while (!Serial) { ; } Serial.println("UNO Q: Button state monitor started"); |
1
2
3
4
5
6
7
8
| ⭐ Why it does NOT work on the UNO Q On the UNO Q: ❌ Serial never becomes “true” during setup() ❌ The Serial Monitor attaches after setup() ❌ The Python container starts after setup() ❌ The serial pipe opens after setup() ❌ The Serial Monitor attaches only when you switch to the tab ❌ The MCU is already past setup() when Serial becomes ready |
Vraag blijft dan wel waarom het bij eerdere versies van App Lab wel heeft gewerkt. En dat kan dan weer te maken hebben met Monitor.begin ipv Serial.begin >
https://docs.arduino.cc/t...l/#from-serial-to-monitor
Erg technisch allemaal en dus niet erg gebruiksvriendelijk en imo is de huidige update wat dit betreft geen verbetering
*******************************************************************************************
Edit, dit lukt ineens wel >
1
2
3
4
5
6
7
8
9
| void setup() { Serial.begin(9600); delay(10000); while (!Serial) { ; // wait for Serial to be ready } Serial.println("UNO Q: Button state monitor started"); } void loop() {} |
:strip_exif()/f/image/YUUXo2jbxCyhGKg75HaZfzpO.jpg?f=fotoalbum_large)
Nou, iedereen bedankt, ik had het zelf al opgegeven maar is dan toch goed gekomen
.
[ Voor 5% gewijzigd door kitao op 08-10-2026 07:54 ]
Met App Lab kan ik je niet specifiek helpen; wat ik zo snel zie, is dat je niet heel andere functionaliteit gebruikt (althans in die screenshot) dan wat al beschikbaar was in de eerste Arduino IDE, maar daar zat/zit uiteraard al die AI-shizzle en geleuter rondom 'bricks' niet in waar ze nu blijkbaar mee in de weer zijn gegaan. Eerlijkgezegd ben ik een tijd terug overgestapt naar VSCode als IDE en voor het incidentele Arduino project dan PlatformIO. Op dit moment werk ik met name met ESP32's en gebruik ik gewoon rechtstreeks ESP-IDF in VSCode, zonder Arduino. De werkwijze is uiteindelijk niet heel anders - alleen vele male flexibeler dan het Arduino ecosysteem.
De oorzaak van het probleem zit waarschijnlijk in het verschil tussen Monitor.print() en Serial.print() die niet alleen in naam verschillen maar ook in werking. De eerste loopt via een Routerbridge, dat is de communicatielijn tussen MPU en MCU en de tweede loopt blijkbaar meer rechtstreeks over de com-poort > https://docs.arduino.cc/t...l/#from-serial-to-monitor
Daarin staat >
For backward compatibility, the Monitor object is still fully supported. If you are maintaining an older project, code using the Arduino_RouterBridge library will continue to work without any changes.
Nou, dat blijkt dus niet (meer) zo te zijn en dat werd duidelijk toen ik bijvoorbeeld een Blink-project van Newbylie uitprobeerde met de volgende sketch >
1
2
3
4
5
6
7
8
9
10
11
12
13
| #include "Arduino_RouterBridge.h" #define LED_PIN 9 void setup() { Bridge.begin(); Monitor.begin(); pinMode(LED_PIN, OUTPUT); Bridge.provide_safe("set_led", set_led); Monitor.println("LED Bridge ready"); } void loop() {} void set_led(int state) { digitalWrite(LED_PIN, state ? HIGH : LOW); } |
Met de nieuwe 0.10.0 App Lab versie print dat geen "LED Bridge ready" meer, niet zichtbaar althans en heb geprobeerd uit te zoeken waar dat aan ligt, helaas zonder veel succes
Over bricks >
Bricks are the modular building blocks of an Arduino App Lab application. They package complex features—such as machine learning models, web interfaces, or database integrations—into reusable components. Think of them as "plug-and-play" services: instead of writing thousands of lines of code from scratch, you add a Brick to your project and interact with it using a few lines of Python.
https://docs.arduino.cc/s...-lab/bricks/about-bricks/
Bij gebruik van App Lab moet er volgens mij altijd een .py aanwezig zijn. Heb het wel eens zonder geprobeerd maar dat ging niet. Dit is dan minimaal nodig voor een Run >
:strip_exif()/f/image/vu5zrdOjaN3taXgCGJmS5MhQ.jpg?f=fotoalbum_large)
Op zich is het best leuk om hier wat mee te oefenen, het vraagt wel een andere benadering als bij een 'normaal' MCU microprocessor board dat niet van communicatie hoeft te worden voorzien door een MPU zoals dat bij de Q wel het geval is > https://newbiely.com/tuto...ion-between-linux-and-mcu
Even instappen en uitproberen is sinds kort helaas iets lastiger geworden met een forse prijsverhoging voor een Uno Q boardje dat voor de 4 GB versie nu iets van 70 tot 80 euro kost > https://store.arduino.cc/products/uno-q-4gb
Ruim een half jaar geleden heb ik de 2 GB versie voor de helft daarvan kunnen bestellen
Ps, nog steeds zoekend naar een verklaring en voor andere nieuwsgierigen, moet ik het hier maar mee doen >
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| ⭐ Why App Lab 0.8.x prints “LED Bridge ready” In App Lab 0.8.x: ✔ Python container starts before the MCU sketch ✔ Serial Monitor attaches before setup() runs ✔ Monitor.begin() is ready immediately ✔ Bridge.begin() is ready immediately ✔ Monitor.println() inside setup() is visible So the example works exactly as shown. ⭐ Why App Lab 0.10.0 does NOT print “LED Bridge ready” In App Lab 0.10.0: ❌ Python container starts after the MCU sketch ❌ Serial Monitor attaches after setup() ❌ Monitor.begin() is not ready during setup() ❌ Bridge.begin() is not ready during setup() ❌ Monitor.println() inside setup() prints into a void This is why you see nothing. This is not a bug in your code. It is a change in App Lab’s architecture. |
Je zou dan verwachten dat hierin terug te vinden >
https://docs.arduino.cc/s...lease-notes/release-0-10/
.
[ Voor 15% gewijzigd door kitao op 09-10-2026 09:16 ]
https://docs.arduino.cc/hardware/modulino-pixels/
die via een Qwiic connector worden aangesloten.
Er zijn ook andere standaard typen connectors zoals mikroBUS™
https://www.mikroe.com/click
en na voor het eerst een Mikroe module via Digikey te hebben ontvangen is het toch weer even puzzelen hoe die aan te sluiten en te programmeren > https://www.mikroe.com/7seg-click
:no_upscale():strip_icc():strip_exif()/f/image/lMwQ8uMAxbKPTAKSj80LNgBA.jpg?f=user_large)
gelukkig wordt er wel een goed schema bij geleverd en schijnt er ook voldoende software ondersteuning voor te zijn > https://download.mikroe.c..._click_v100_Schematic.PDF
Om weer wat vertrouwd te raken met de gebruikte componenten leek het me handig om in vereenvoudigde vorm met een kant en klare code https://simple-circuit.co...t-74hc595-shift-register/ hier een Simulide op toe te passen. Uiteraard is het leerzamer om dit met echte componenten op een breadboard te zetten maar de simulatie bespaart mij tijd
:strip_exif()/f/image/Z3GcAaHF89CGFsKeJIEQqtWO.jpg?f=fotoalbum_large)
Wie de Simulide freeware ook eens wil proberen, in de Arduino IDE klik op Sketch > Export Compiled Binary. Dit maakt een Hex-file aan in je sketch folder onder Build. Vanuit Simulide rechtsklik op de Uno > Load firmware en navigeer naar de hex. Meer info >
https://simulide.com/p/mcus/
.
:no_upscale():strip_icc():strip_exif()/f/image/iA8iLD7Qf9TURAGbhbtSjAUO.jpg?f=user_large)
https://download.mikroe.c...seg-click-manual-v100.pdf
maar omdat de pinafstand 2.54 mm is past de module ook op een breadboard. Voor extra ruimte heb ik twee losse mini breadboardjes gebruikt >
:strip_exif()/f/image/pAcab8NH4jczCB5kLyfIsvE9.jpg?f=fotoalbum_large)
De vorige post had een Uno als microcontroller maar die draait op 5V. De mikroBus heeft ook die optie maar wordt standaard geleverd met een 3.3V gesoldeerde selectie >
:no_upscale():strip_icc():strip_exif()/f/image/5bRMAgzn95VSNkwJr6rwEFrf.jpg?f=user_large)
https://download.mikroe.c...seg-click-manual-v100.pdf
Vandaar dat ik de Due heb gekozen
https://docs.arduino.cc/hardware/due/
zodat er geen voltage level shifters nodig zijn.
De assistent heeft er een test sketch voor geschreven >
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
| #include <SPI.h> const int CS_PIN = 10; const int PWM_PIN = 9; const int RST_PIN = 8; void sendDisplay(uint8_t leftDigit, uint8_t rightDigit) { digitalWrite(CS_PIN, LOW); // Second HC595 SPI.transfer(rightDigit); // First HC595 SPI.transfer(leftDigit); digitalWrite(CS_PIN, HIGH); } void setup() { pinMode(CS_PIN, OUTPUT); pinMode(PWM_PIN, OUTPUT); pinMode(RST_PIN, OUTPUT); digitalWrite(CS_PIN, HIGH); // Enable display digitalWrite(PWM_PIN, HIGH); // Release reset digitalWrite(RST_PIN, HIGH); SPI.begin(); // Display "01" sendDisplay( 0b01111110, // 0 0b00001010 // 1 ); } void loop() { } |
.
/f/image/n7Ni9XqsNSgAhBmqxONthLac.png?f=fotoalbum_large)
The Nano Every is Arduino's smallest board with dimensions of only 45x18mm.
The Arduino Nano Every is an evolution of the classic Arduino Nano sharing the same exact pinout but featuring the ATMega4809, a more powerful processor as well as 48KB of CPU Flash memory and a higher clock speed of 20 MHz.
# https://docs.arduino.cc/hardware/nano-every/
Nu heb ik die niet maar wel een CNano van Microchip, dat Atmel AVR een jaar of 10 geleden heeft opgekocht. Inmiddels is vorig jaar Arduino ook overgenomen door Qualcomm.
Het in de vorige posts getoonde MIKROE mikroBus Clickboard
https://www.mikroe.com/mikrobus
is overgezet op een Explorer experimenteer board met daarin geplugd de CNano Atm4809.
Een voordeel van de Curiosity Nano serie is dat ook al zijn het veel verschillende microcontrollers er toch een goed overzicht is gemaakt van de pinindeling zoals te zien in deze pdf >
https://ww1.microchip.com...Nano-Explorer-Pinouts.pdf
:strip_exif()/f/image/ojlqdUN58S2oGh4ZxE89i6Xk.jpg?f=fotoalbum_large)
Dit heeft het makkelijker gemaakt om de SPI pinindeling aan de assistent door te geven die er vervolgens binnen een paar tellen een C-code voor maakte >
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
| #include <avr/io.h> void SPI0_init(void) { // MOSI and SCK outputs PORTA.DIRSET = PIN4_bm | PIN6_bm; // Enable SPI master SPI0.CTRLA = SPI_ENABLE_bm | SPI_MASTER_bm; SPI0.CTRLB = 0; } void SPI0_send(uint8_t data) { SPI0.DATA = data; while (!(SPI0.INTFLAGS & SPI_IF_bm)) { } } int main(void) { // CS PORTF.DIRSET = PIN1_bm; // RST PORTF.DIRSET = PIN0_bm; // PWM PORTD.DIRSET = PIN3_bm; // Enable display PORTD.OUTSET = PIN3_bm; // Release reset PORTF.OUTSET = PIN0_bm; // Deselect PORTF.OUTSET = PIN1_bm; SPI0_init(); // Latch low PORTF.OUTCLR = PIN1_bm; SPI0_send(0x9E); // digit 3 SPI0_send(0xB6); // digit 2 // Latch high PORTF.OUTSET = PIN1_bm; while (1) { } } |
:strip_exif()/f/image/4VLRK6DcgpWqeA0K6x22FDjo.jpg?f=fotoalbum_large)
De gevolgde opbouw was dus eerst een simulatie met een Uno in Simulide, vervolgens een breadboard praktijk test met een Arduino Due en daarna hard wired op een experimenteer board met een Atmega 4809.
Nadeel is wel dat MPLab X IDE v6.00 de laatste versie is waar MPLAB® Code Configurator Classic (MCC) nog in zit. In nieuwere versies is Classic namelijk eruit gehaald en vervangen. Voordeel van Classic is dat het een Library voor Mikroe Modules heeft, dat bij de nieuwere MCC Melody versie eruit is gehaald
Nu heb ik geen MCC gebruikt bij dit displaytje maar voor meer complexe mikroBUS boards zal waarschijnlijk wel een Library nodig zijn al heb ik dat nog niet geprobeerd. Ander aandachtspunt is dat de Every op 5V werkt en de CNano 4809 op 5V en 3.3V kan draaien. Plug je die in het Explorer board dan gaat die automatisch naar 3.3V en bovendien wordt die standaard geleverd ingesteld op 3.3V dus kan eigenlijk niet mis gaan
Voor wie vertrouwd is met Arduino AVR maar toch eens in een andere omgeving wil rondkijken dan is het wellicht een optie om een tweede IDE ernaast te hebben.
/f/image/zzz4rV1miUVw4ocnYzX8DxZ1.png?f=fotoalbum_large)
.
MPLAB heb ik wel eens gebruikt, maar vooral uit noodzaak.
Inmiddels is MPLab dan ook geschikt voor AVR en volgens mij ook voor Sam, die ik nooit heb gehad. Edit : die heb ik toch wel, zit namelijk in de Due >
The Arduino Due is a microcontroller board based on the Atmel SAM3X8E ARM Cortex-M3 CPU. It is the first Arduino board based on a 32-bit ARM core microcontroller.
Dit is de volledige MPLab support lijst >
https://packs.download.mi...iceDoc/Device_Support.pdf
Met Arduino (Nano) 5V bedoel je waarschijnlijk de ATmega328P maar op zich zijn er meerdere boardjes die Nano heten zoals de eerder genoemde Nano Every 5V maar bijvoorbeeld ook de Arduino Nano 33 BLE Sense 3.3V.
Het is dus niet zo dat ik doelbewust een andere IDE erbij heb genomen maar omdat ik er via Pic IC's ben ingerold en verder vind ik het wel leuk om met zulke software pakketten wat mee bezig te zijn.
PlatformIO had ik wel eens van gehoord maar ik ken het niet echt. Ik zal er eens naar kijken, tnx
https://www.bing.com/vide...rm+io+arduino&FORM=HDRSC4
Zelf zal ik er niet veel tijd voor hebben aangezien MPLab zelf aan het verhuizen is naar VSCode dus ben daar af en toe al mee bezig maar het is zeker een nuttige tip voor iedereen die dit topic volgt.
YouTube: Make the Switch to MPLAB for VS Code
.
[ Voor 13% gewijzigd door kitao op 25-10-2026 09:56 . Reden: Edit ]
YouTube: #52 Atmega328 - an introduction
Het overstappen naar MPLab VSCode vind ik ook niet echt een verbetering, paar keer wat mee gerommeld maar het ligt nu ergens in de kast. Toch, naarmate er nieuwere boardjes uitkomen ga je op een gegeven moment vastlopen als er geen nieuwere versie IDE op je PC aanwezig is.
Of juist andersom, je hebt een nieuwe versie maar de oudere devices worden niet meer ondersteund. Ik heb dat nu bijvoorbeeld met de MikroElektronik Click Library die alleen nog maar draait in MCC Classic en niet eens voor iedere microcontroller. Zie ook > kitao in "De EL-kroeg - Deel 4"
De eerder gebruikte CNano ATmega4809 zag de Library niet dus ben nu bezig met een poging CNano PIC18F47Q10 en die ziet het tot dusver wel. Nog even afwachten of het lukt dat Click board met een library aan de gang te krijgen.
/f/image/ksKDamJn8rd4zGXVDyXpmxeX.png?f=fotoalbum_large)
Voor een verhuizing naar VSCode zijn deze playlists misschien handig >
1. YouTube: Dev Tool Bits| Full Walkthrough and Setup of MPLAB® Tools for VS Cod...
2. YouTube: MCC in VS Code®: Introduction to the Video Series
------------------------------------------------------------------------------------------------------------------------------------
Ps,
Het is inmiddels gelukt het Click board met een Library in MCC aan de gang te krijgen maar ik kan het niet aanraden want het heeft meerdere uren gekost. Het was makkelijker om zelf dat display aan te sturen als om het via een Library te doen (beiden mhv copiloot).
Op zich is Mikroe een mooi systeem met iets meer dan 2.000 Click boards en schijnt ook portable te zijn maar dan moet je wel gevorderd zijn in programmering zoals ik het inschat. En wat geld op zak hebben is ook wel nodig >
https://docs.mikroe.com/m...des/porting-to-3rd-party/
https://www.mikroe.com/compilers
.
[ Voor 15% gewijzigd door kitao op 26-10-2026 14:13 . Reden: Ps ]