8bit uitgangen

Hallo,

Ik ben extreem nieuw met arduino (moet zelfs opletten dat ik het niet verkeerd spel)...

Ik wil iets heel simpels maken....

Ik wil een analoge ingang (0-255) meteen omzetten naar 8 uitgangsbits.
Dus... als ik 10 lees, wil ik m'n LED's op 0000 1010 zien branden... LLLL HLHL dus...

Kan dit, als ik een matrix maak met 8 uitgangen, en het decimale of hexadecimale getal "vertaal" in die matrix?

Graag een beetje hulp, alvast bedankt!

Marc

Je hebt geen matrix nodig hoor. Het is eigenlijk veel eenvoudiger:

lees de analoge poort (die geeft een waarde terug tussen 0-1023 voor een spanning van 0-5V.
Map de analoge waarde met de map() functie. De mapping gaat van 0-1023 naar 0-255 . 255 is alle bits aan in binair in 8 bits.
Daarna schuif je de bits naar links een voor een en zet je het desbetreffende ledje aan.

Ik had het voor je kunnen schrijven maar dan is de "lol" er vanaf.

Als je nog helemaal nieuw bent zou ik eerst een wat tutorials doen om het Arduino gebeuren in de vingers te krijgen.

Bedankt, Nico,

Ik weet het... Ik wil héél snel kunnen lopen.
Het scheelt toch al dat ik begrijp wat je bedoelt, en ik zie de code al een beetje voor me :slight_smile:

Er is een massa info te vinden over de Arduino's, zoveel dat ik niet meteen weet waar te beginnen.

Als je daar nog tips voor me hebt?

Marc

Beginnen met de tutorials die bij de IDE zitten. en niet alleen ff compileren en draaien maar ook begrijpen.
Ontwerp van je programma kun je het beste voorbereiden op gewoon een vel papier. dus eerst nadenken en dan doen. We zien er al zoveel die eerst gaan tikken..... dan proberen..... dan gokken.... dan opgeven......
Kan het niet vaak genoeg zeggen..... eerst denken dan doen.
Door de tutorials te begrijpen krijg je een basis. Door over het ontwerp na te denken krijg je richting.... coderen is daarna een appeltje eitje....
En als je iets niet begrijpt ..... hier gewoon vragen. Het valt mij altijd op dat er zoveel mensen zijn die net beginnen..... maar ik heb nog nooit een vraag over de tutorials gezien..... toch wel vreemd. En een slechte gewoonte afleren is moeilijker dan gelijk een goede gewoonte aanleren.

Nico heeft helemaal gelijk.
ik vraag hier ook al een tijd niks meer.
red me nu aardig vind ik :wink:

Ja dat zeg je nou wel, maar waar is het bewijs ??

:smiling_imp:

Marecdl:
Ik weet het… Ik wil héél snel kunnen lopen.

<knip … knip>

Als je daar nog tips voor me hebt?

Het bekende probleem van iemand die nog nauwelijks uit de kruipfase is en die een hardloper wil worden.

Mijn tips:
gewoon veel havermout eten :grin:

En als je dan eenmaal gaat lopen, van tevoren vooral niet vergeten je veters goed vast te maken, je zou niet de eerste zijn die tijdens het hardlopen op zijn gezicht valt door over zijn eigen veters te struikelen.

Dank je; allemaal... Ik ga zeker m'n veteres goed strikken...

Ik worstel soms met de syntax... Het probleem van alweer 'n programmeertaal erbij...

Maar ik ga hier zeker goed opletten in deze groep!

Marc

de ingang is inderdaad 10 bits, kies dan de hoge bits natuurlijk

dus if (ingang.10) {uit10=HIGH;} else {uit10=LOW;}
if ingang.9 etc.

en ja je kunt ze ook in een matrix zetten, je kunt zelfs direct naar een Poort schrijven.

of je maakt een tabelletje met alle poortnummers die je gebruikt in volgorde van significantie. Vervolgens schuif je die 8 bits eruit en verhoog je de index bij elk bit.
Bijvoorbeeld zoiets:

#include "Arduino.h"

//
// Pin definitions
//
#define BIT_0 6
#define BIT_1 7
#define BIT_2 8
#define BIT_3 9
#define BIT_4 10
#define BIT_5 11
#define BIT_6 12
#define BIT_7 13

#define ANALOG_PORT A0
//
// global variables
//
uint8_t     portArray[8] = { BIT_0, BIT_1, BIT_2, BIT_3, BIT_4, BIT_5, BIT_6, BIT_7 };

/**
 * @name setup()
 */
void setup(){
    //
    // build port array
    //
    for (uint8_t i = 0; i < sizeof(portArray); i++) {
        pinMode(portArray[i], OUTPUT);
        digitalWrite(portArray[i], LOW);
    }
}
/**
 * @name loop()
 */
void loop(){
    boolean portBit;
    //
    // read 10 bits analog value
    //
    uint16_t analogValue = analogRead(ANALOG_PORT);
    //
    // convert to 8 bits digital
    //
    uint8_t digitalValue = map(analogValue, 0,1023, 0, 255);
    //
    // output digital value
    //
    for (uint8_t i = 0; i < sizeof(portArray); i++) {
        //
        // get lowest bit value
        //
        portBit = digitalValue & 0x01;
        //
        // output to port
        //
        digitalWrite(portArray[i], portBit);
        //
        // right shift bit out
        //
        portBit = portBit >> 1;
    }
}