P1 poort data lezen/gebruiken

Ik krijg nog steeds data binnen van het vorig programma dus de poort zal juist zijn.

Windowds 10 education
Versie 22h2

Ik heb net basic blink proberen te uploaden en ik krijg de zelfde melding.

21:55:10.576 -> setup -> P1 validator 0.1
21:55:10.576 -> setup -> reader() starting with WAITFORSTART
21:55:11.132 -> loop -> CRC error !! Count = 1
21:55:12.131 -> loop -> Timeout error !!  Count = 1
21:55:12.236 -> loop -> CRC error !! Count = 2
21:55:13.216 -> loop -> CRC error !! Count = 3
21:55:14.249 -> loop -> CRC error !! Count = 4
21:55:15.129 -> loop -> CRC error !! Count = 5
21:55:15.235 -> loop -> CRC error !! Count = 6
21:55:16.250 -> loop -> CRC error !! Count = 7
21:55:17.249 -> loop -> CRC error !! Count = 8
21:55:18.235 -> loop -> CRC error !! Count = 9
21:55:19.217 -> loop -> CRC error !! Count = 10
21:55:20.244 -> loop -> CRC error !! Count = 11
21:55:21.246 -> loop -> CRC error !! Count = 12
21:55:22.236 -> loop -> CRC error !! Count = 13
21:55:23.235 -> loop -> CRC error !! Count = 14
21:55:24.236 -> loop -> CRC error !! Count = 15
21:55:25.251 -> loop -> CRC error !! Count = 16
21:55:26.225 -> loop -> CRC error !! Count = 17
21:55:27.216 -> loop -> CRC error !! Count = 18
21:55:28.224 -> loop -> CRC error !! Count = 19
21:55:29.247 -> loop -> CRC error !! Count = 20
21:55:30.110 -> loop -> CRC error !! Count = 21
21:55:30.216 -> loop -> CRC error !! Count = 22
22:04:35.241 -> loop -> CRC error !! Count = 661
22:04:36.231 -> loop -> CRC error !! Count = 662
22:04:37.239 -> loop -> CRC error !! Count = 663
22:04:38.239 -> loop -> CRC error !! Count = 664
22:04:39.221 -> loop -> CRC error !! Count = 665
22:04:40.248 -> loop -> CRC error !! Count = 666
22:04:41.222 -> loop -> CRC error !! Count = 667
22:04:42.247 -> loop -> CRC error !! Count = 668
22:04:43.237 -> loop -> CRC error !! Count = 669
22:04:44.239 -> loop -> CRC error !! Count = 670
22:04:45.244 -> loop -> CRC error !! Count = 671
22:04:46.228 -> loop -> CRC error !! Count = 672
22:04:47.992 -> loop -> Timeout error !!  Count = 12
22:04:48.217 -> loop -> CRC error !! Count = 673
22:04:49.238 -> loop -> CRC error !! Count = 674

Blijkt dus een nano (atmega328P ¨old bootloader¨) te zijn. Mijn excuses.

Meestal zie je in de foutmelding een timeout staan, bij jou staat er wat anders, namelijk dat er telkens een andere reactie komt (resp =0x2f is ASCII teken nummer 47 en dat is "/".
Vervolgens komen de tekens 0x46 "F", 0x4c "L" en 0x55 "U".
komt je dat al bekend voor ?

Dit betekent voor mij dat je code gewoon draait en die informatie over de seriële poort gooit.
Wanneer je een code gaat uploaden, wordt er een extra pinnetje aangezet op de seriële poort (ook als dat een virtuele poort via USB is) , welke de controller een reset moet geven.
Schijnbaar gebeurt dat niet en krijgt je IDE niet het verwachtte antwoord waarmee de upload kan beginnen.
En daarom komt dus die foutmelding over de respons.
Wat je nu kunt doen is de reset knop op je boardje ingedrukt houden totdat je ziet dat de code naar het board gestuurd wordt.
Dan laat je die knop los, en zou het uploaden wel moeten lukken.
Wil je dat dus eens proberen, desnoods een aantal malen ?

22:33:01.979 -> setup -> reader() starting with WAITFORSTART
22:33:02.974 -> loop -> CRC error !! Count = 1
22:33:03.991 -> loop -> CRC error !! Count = 2
22:33:05.009 -> loop -> CRC error !! Count = 3
22:33:07.791 -> setup -> P1 validator 0.1
22:33:07.791 -> setup -> reader() starting with WAITFORSTART
22:33:07.973 -> loop -> CRC error !! Count = 1
22:33:08.898 -> loop -> CRC error !! Count = 2
22:33:08.993 -> loop -> CRC error !! Count = 3
22:33:27.200 -> setup -> P1 validator 0.1
22:33:27.200 -> setup -> reader() starting with WAITFORSTART
22:33:27.973 -> loop -> CRC error !! Count = 1
22:33:28.975 -> loop -> CRC error !! Count = 2
22:33:46.046 -> setup -> P1 validator 0.1
22:33:46.046 -> setup -> reader() starting with WAITFORSTART
22:33:47.005 -> loop -> CRC error !! Count = 1
22:33:47.973 -> loop -> CRC error !! Count = 2
22:33:47.973 -> loop -> CRC error !! Count = 3
22:33:48.990 -> loop -> CRC error !! Count = 4
22:34:14.352 -> setup -> P1 validator 0.1
22:34:14.409 -> setup -> reader() starting with WAITFORSTART

Ik heb ook eens de code veranderd naar #define USE_ALTSOFTSERIAL.
Maar het blijft het zelfde.

OK

Blij dat je er in geslaagd bent het prgramma te laden. Wat was er fout?

Gebasered op de getoonde resultaten is de benadering met AltSoftSerial niet betrouwbaar voor het lezen van de P1 meter.

Je hebt naar mijn mening 3 keuzes

  1. Het programma baseren op het bericht 11 en hopen voor het beste. Je weet immers niet of de gefilterde data volledig correct is.
  2. Je meter aansluiten op de Rx van de Uno en Serial gebruiken. Voor het laden van een programma moet je dan wel elke keer de meter afkoppelen of ladem via icsp met een programmeer apparaat.
    a. Je kunt dan debuggen door je andere Uno te gebruiken als serial-to-usb omzetter.
    b. Een serial-to-usb omzetter te kopen.
  3. Een ander model Arduino gebruiken dat je een extra seriële poort geeft (Mega, Leonardo, Micro en nog wat anderen).

Zoals je kunt begrijoen is (1) naar mijn mening geen optie. Blijven (2) en (3) over.
(2a) is een optie als je voor je uiteindelijke "product" geen aansluiting met een computer nodig hebt.
(2b) is een optie als je nog wel een aansluiting met je computer nodig hebt; bv om informatie naar een bestand te sturen om achteraf te zien wanneer zaken in en uitgeschakeld werden.
(3) zou mijn voorkeur hebben.

Laat maar horen welke kant je op wilt.

Ik ben volledig de mist in gegaan met de uno.
Het bord die aangesloten is is een nano (atmega328P oldbootloader)
Mijn excuses hiervoor.

En nu ben ik het even kwijt. Mijn antwoord was gebaseerd op de resultaten met de crc en timeout fouten die je eerder toonde. En die uitvoer kun je alleen maar krijgen als je USE_ALTSOFTSERIAL hebt ingeschakeld; anders zal het niet compileren voor een Nano.

Welke arduino zou je aanraden om dit op de simpelste manier te doen?

Simpelste manier zou ik niet weten (je vroeg het ook niet aan mij).
Maar ik heb hier wel een heel compact boardje liggen, een Beetle van DF Robot (klik !).
Die is dusdanig compact dat je er veel leuks mee kunt doen.
Het is een Leonardo variant en je kunt 'm dus ook als zodanig benaderen.
Dat betekent dat de controller zelf een USB aansluiting heeft, plus een seriële poort en dat is waar je naar op zoek bent.
Verder heeft het alleen het hoogst noodzakelijke aan boord, dus de controller, een kristal voor de hartslag, 2 of 3 weerstandjes en evenzoveel condensatoren en 3 LEDjes voor de meest basic informatie.
Het heeft wat pinnen waar je je relais mee kunt aansturen (ook weer via een transistor want geen enkele Arduino kan dat zonder transistor doen).
Dat betekent dus ook dat je zelf de voeding moet verzorgen want dat zit niet op dit boardje.
Je vertelde in je eerste berichtje dat je de koppeling met een transistor hebt gemaakt naar een voorbeeld.
Die transistor heb je nodig om het signaal te inverteren (omdraaien).
Dat heb ik zojuist even opgezocht.
Ben je er zeker van dat je de schakeling met de transistor en de 3 weerstanden correct hebt nagebouwd ?
Wanneer je dat ook op een breadboardje hebt gemaakt, dan durf ik best te noemen dat dat nou niet bepaald de beste manier is om schakelingen te bouwen en dat daar ook wel eens fouten in de communicatie door zouden kunnen ontstaan.
Ik adviseer je ook om de tip van meneer Otten (ik denk dat ik wel weet wie dat is), toe te passen met de diodes en het condensatortje want dat kan al veel helpen.
Omdat je dus de voeding en het signaal plus het relais toe moet voegen, zou ik dat op een eenvoudig printje bouwen.
Ik denk dat je de meeste daarvoor benodigde componenten wel kunt vinden, bijvoorbeeld hier (ik denk dat dit meneer Otten is)
Daar heb ik ook wel eens geshopt dus die ken ik wel.
De site in de Beetle link ken ik verder niet, dat is het eerste resultaat van Google in het Nederlands.

De simpelste manier is om een Arduino to gebruiken met de extra poort. Ik heb er reeds 3 genoemd.

Ik denk dat de, door @MAS3 genoemde, FireBeetle voor dit project wat minder geschikt is. Het grootste probleem voor mij zou het aansluiten van de meter zijn; de signaal draad moet direct op de onderkant van het bord worden gesoldeerd.

Bron: Beetle Board - Compatible with Arduino Leonardo - ATmega32U4 - DFRobot

Het andere mogelijk nadeel van de FireBeetle is dat je van tevoren goed moet nadenken of je dit project ooit wilt uitbreiden aangezien de mogelijkheden wat beperkt zijn.

Persoonlijk zou ik een SparkFun Pro Micro en een stukje strip board (voorbeeldje hieronder) gebruiken.


of gaatjes board

Je kunt je transistor en en weerstanden daar op solderen, een paar draadjes eraan solderen en die draadjes in de juiste gaten van de Pro Micro solderen.

Dat geeft je betrouwbare verbindingen en het is redelijk gemakkelijk om iets te veranderen.

Eenzelfde benadering is mogelijk met de Arduino Micro. Je kunt die solderen op een stukje strip board waar ook de transistor en weerstanden op worden gesoldeerd.
Je moet wel wat verbindingen doorsnijden met een scherp hobby mes zodat je geen kortsluiting hebt tussen de beide kanten van het microcontroller bord.

Als je een breadboard wil blijven gebruiken kun je één van de twee microcontroller borden gebruiken; de Pro Micro heeft het nadeel dat je er pinnen op moet solderen voordat het in een breadboard geplaatst kan worden.

Van een programmeer perspectief maakt het weinig verschil welke je gaat gebruiken.

Als je een Pro Micro koopt, koop die dan in godsherenaam niet van Ali of Ebay; de meeste verkopers daar hebben geen idee wat ze verkopen en het zal ons uren kosten om uit te vinden waarom de Pro Micro niet werkt. Koop in een gerenommeerde winkel met een goede ruil (of geld terug) mogelijkheid; zelfs als je een clone van die winkel koopt zal het het extra geld waard zijn naar mijn mening.

Er zijn twee versies van de Pro Micro; de genoemde is een 5V/16MHz versie, er is ook een 3.3V/8MHz. Het maakt niet zoveel uit welke je koopt; met mijn beperkte electronica kennis zou ik de 5V versie kopen maar de mailtip van de heer Otten in de link in je opening post voor de aansluiting op een ESP8266 kan je helpen.

PS
Het probleem met Ali/Ebay is dat als je een 3.3V Pro Micro koopt er een gerede kans bestaat dat je een 5V versie krijgt of omgekeerd.

Ik probeer deze eens.

Geen idee wat ik zal krijgen :slight_smile:

Een prima keuze hoor.
Let er wel op dat je het juiste boardje selecteert (die je mogelijk moet installeren vanaf de Sparkfun site), want de verschillen tussen 3 volt en 5 volt zijn lastig te zien aan het boardje (staat meestal een merkje op de onderkant bij de betreffende versie), maar het heeft grote verschillen voor je code en diens werking.
De 3 volt werkt op 8 MHz, en voor 16 MHz heb je echt 5 volt nodig.
Dat betekent dat de ene 2 maal zo snel werkt als de andere, en de IDE houdt daar rekening mee wanneer je je boardje selecteert.
Op die manier kan de IDE er bijvoorbeeld voor zorgen dat delay (1000); (heh, bah) 1 seconde duurt en niet ineens 2 seconden.