Dit betekent een signaal van 42 bites. en dat resulteert in een woord van 42bites lang.
Hoe kan ik iets dergelijks uitlezen in mijn Arduino256 en hoe filter ik de windrichting en de windkracht eruit.
Section Length (bits) Inverted? Endianness Description Notes
A 5 Yes LSB first Start Frame Always 00100
B 4 Yes LSB first Wind Direction 0-15, see table below
C 12 Yes LSB first Wind Speed 0-511
D 4 Yes LSB first Checksum (deze heb ik nodig)
E 4 No LSB first Wind Direction 0-15, see table below
F 12 No LSB first Wind Speed 0-511
Wat is precies je vraag? Krijg je een bit patroon van 42 bits binnen? of 42 bytes die of een 1 of 0 bevatten. En het resultaat moet vervolgens opgebroken worden in de verschillende variabelen?
De bron staat al in het plaatje vermeld (maar misschien moet je daarvoor naar rechts scrollen), dus daar zit geen probleem.
Die windmeter is een apart ding.
Je moet m namelijk triggeren, waarna dat ding ineens een berg data spuit (42 bits dus).
Dus je moet zelf eerst van de pin die je gebruikt de pullup activeren.
Als je klaar bent om data te ontvangen, moet je die pin heel kort (iets van 5 milliseconden gok ik) laag maken.
Even later (weer zo'n 5 milliseconden), na het vrijgeven van die pin, trekt de sensor 'm 20 milliseconden laag, als een soort van bevestiging dat er data aan zit te komen.
Dan weer een startsignaal, waarna de bits in èèn riedel komen.
Ik denk dat je hiervoor niet de seriele pins 0 en 1 kunt gebruiken, vanwege het laag moeten maken van die pin.
Dus kom je dan op softserial uit.
Maar ik heb geen idee of je dan wel die pin even laag kunt maken en dan nog op tijd bent om alle gewenste informatie binnen te halen en te verwerken.
Die druksensor zal best meevallen.
Ik zie er een adafruit logo opstaan en daar zul je vast gemakkelijk voorbeeld code van kunnen vinden en toepassen.
Recent heb ik (uit een bijdrage van robtillaart) begrepen dat het beter is om die datapin (die never nooit niet (3 x negatief == negatief) zal veranderen), als een const te definiëren.
Ik meen dat het daarmee een vaste waarde word (die alleen in de compiler ruimte nodig heeft) en niet een variabele waarvoor ruimte in je "werkgeheugen" gereserveerd moet worden, en dat lijkt te worden bevestigd in de reference pages door de koppeling aan/relatie met #define.
Dat zal vermoedelijk niet gelden voor bitlength, die je hier als -1 definieert en niet als 1 zoals je zei.
-1 betekent vaak (nog) niet beschikbaar danwel leeg (nul is anders als leeg), maar er word zo wel ruimte voor gereserveerd.
Voor een korte sketch maakt dat vermoedelijk niet veel uit, maar het is wel beter als dit zo vroeg mogelijk word toegepast.
MAS3:
Recent heb ik (uit een bijdrage van robtillaart) begrepen dat het beter is om die datapin (die never nooit niet (3 x negatief == negatief) zal veranderen), als een const te definiëren.
Ik ben zelf meer een voorstander van
#define pin 12
Ik heb gemerkt dat bijvoorbeeld
const int pin = 12;
8 bytes code meer gebruikt zodra je een simpele move naar een variabele doet tov. de define.
8 bytes code meer gebruikt zodra je een simpele move naar een variabele doet tov. de define.
Sommige mensen houden niet van #define en #ifdef
Maar ik vermoed dat die alleen maar kleine sketches maken of op een Arduino Mega of due werken.
Arduino zelf gebruikt String in de bridge library die geschreven is voor een yun die 32k (-4k bootloader) heeft en dat terwijl je linino kunt gebruiken om die string operaties te doen
Met vriendelijke groet
Jantje
Toch enigzins getriggered Op die Arduino pagina staat eigenlijk niets ... zoals wel op meerdere. Het enige goede argument die ik tot nu toe kon vinden was dat daar het een preprocessor directive is, de preprocessor gewoon de tekst vervangt. En dus tijdens debugging dit niet meer zichtbaar maakt. En dat is logisch
Maar voor mijn pin definities en nog wat andere zaken ga ik wel op deze manier door. 8 bytes lijkt niet veel, maar als je het nogal wat keren nodig hebt kan het een issue worden.
En een hardware debugger heb ik niet is me nog ff te prijzig.... En de defines kleuren ook zo lekker blauw in mijn Eclipse omgeving. Dan weet ik automatisch dat ik een define te pakken heb. Ach elk nadeel heeft zijn voordeel... Was een of andere voetballer die dat geloof ik ooit zei
Ik ben heel blij dat er een gezellig draadje ontstaat.
Voor mij ook een goed onderwerp.
En ja ik gebruik een MEGA. omdat ik deze op de kop kon tikken.
Maar daar is het eigenlijke onderwerp een beetje op de achtergrond geraakt.
Hoe kan ik een pulstrein(van 41 bites) binnen halen?
Alvast bedankt.
Ondertussen werkt mijn BMP08 als een lier....
Daar gaan mijn sda/scl ingangen, dus.
Indien dit een I²C ingang is, kan er daar niet meer I²C items aan hangen?
Dat was toch de bedoeling van I²C, of ben ik verkeerd?
I2C kan meerdere devices over hetzelfde lijntje hebben. Elk device heeft zijn eigen adres. Dus kan je gewoon een ander device adres kiezen om die te bereiken. En als dat te gek wordt kun je ook nog SoftI2C overwegen