Stap 12: Programmeren met de encoders
Encoder bibliotheken
De eenvoudigste manier om encoders gebruiken in uw programma is het gebruik van een encoder bibliotheek. Ik gebruikte de PJRC encoder bibliotheek.
Om het te gebruiken in uw tekening kopiëren de encoder omslag in uw omslag van de "bibliotheken" Arduino, herstart de Arduino IDE, en omvatten het headerbestand in uw tekening door toevoeging van deze lijn aan de bovenkant van uw dossier:
Meer over bibliotheken op de website van Arduino.
Maak gewoon een lid van de klasse van het coderingsprogramma:
Naam van de encoder (pin_1, pin_2); waar is de naam die u wilt geven met het coderingsprogramma en pin_1 & pin_2 zijn de pennen waar u verbinding met het coderingsprogramma.
Thats it, geen gedoe met interrupts, de library regelt het allemaal voor u.
Als u de waarde van het coderingsprogramma nodig hebt, gebruik:
name.Read(); waar de naam die is gaf je eerder. De Lees-functie retourneert een lange.
Als u wilt, kun je een snelle blik op de voorbeelden die worden geleverd bij de bibliotheek. (Bestand > voorbeelden > Encoder)
Relatieve berichten
De Lees-functie retourneert een absolute waarde voor de positie (die terugstelt telkens als u de verbinding de macht, echter, in tegenstelling tot een potentiometer verbreekt). Dit is perfect in orde voor de meeste toepassingen, maar MIDI is anders: het maakt gebruik van relatieve getallen voor rotary encoders. Wat dit betekent is dat de controller stuurt het verschil tussen de nieuwe en de oude waarde van de encoder, dus als bijvoorbeeld de Lees functie van de laatste waarde 96 was en u draai het coderingsprogramma voor 1 stap, de nieuwe waarde 97 uiteraard zullen, maar de Arduino 97 niet mag verzenden. In plaats daarvan stuurt het het verschil: 97-96 = + 1. Als u 1 stap tegen de klok in gedraaid, zou het -1. Eenvoudig.
Hoe zit het met meer stappen? Als u de encoder snel voor, zeg 4 stappen draait, er zijn 2 dingen die kunnen gebeuren: een, de Arduino stuurt zijn MIDI snel genoeg om te lezen het coderingsprogramma minstens 4 keer terwijl u zwenking op. Dit betekent dat het zal 4 berichten verzenden met '+ 1'. Twee, als het niet snel genoeg om te vernieuwen de Lees functie 4 keer, het zal ontdekken dat de Lees functie meer dan 1 stap is veranderd sinds de laatste keer. Bijvoorbeeld, de laatste waarde van de functie van de Lees was 97, u zet 4 stappen en nogmaals door te lezen. Hiermee krijgt u 101: 101 - 97 = 4. Geen probleem, de Arduino stuurt slechts 1 bericht met '+ 4'.
Er misschien wel een paar compatibiliteitsproblemen, wijten aan het feit dat u niet echt negatieve getallen via MIDI verzenden. Er zijn drie manieren om het verzenden van het teken van een getal.
- Toevoegen van 64. Dit is waarschijnlijk de eenvoudigste. Dit wijst eigenlijk 0 tot 64 (oftewel 128/2). Bijvoorbeeld, als ik wil verzenden -1, voeg ik 64, = 63 en ik stuur het. Als ik wil verzenden + 1, ik ook toevoegen 64, 65 =. Als ik stuur 64, zal de computer niets doen, omdat het weet dat er een waterverplaatsing van 0. (Aan de kant van de computer, ze gewoon aftrekken 64, en u kunt het resultaat gebruiken als niets ooit gebeurde.)
- Teken-bit. Op computers, worden ondertekende waarden meestal opgeslagen met een teken-bit. De teken-bit is de meest significante bit. Wanneer er 0, het getal gedefinieerd door de andere bits positief is, wanneer het is 1, het aantal is negatief. In een MIDI-bericht, dit is beetje 6 (de 7e bit, want het is 0 gebaseerd). Bijvoorbeeld: + 4 zou 0b00000100 en -4 zou 0b01000100.
- Een derde is manier het definiëren van + 1 als 0 en -1 127. Kunnen we dit blijven: + 2 = 1 en -2 = 126, etc. tot +63 = 63, en-63 = 65.
Dus, als uw encoder vreemde dingen in uw bepaalde software doet, zoals springen echt ver als u slechts één stap roteert, kunt u dit in uw programma.
Echter, misschien je echt niet nodig om uw eigen programma te schrijven...