Testprogramm lauflicht

Dependencies:   mbed

Committer:
haunsi
Date:
Mon Jan 13 17:44:48 2020 +0000
Revision:
4:a0cc5eebc75e
Parent:
3:e46730634660
funktion modifyBit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
haunsi 0:24004f9fab36 1 #include "mbed.h"
haunsi 0:24004f9fab36 2 #define BUTTON1 p14
haunsi 0:24004f9fab36 3
haunsi 1:8a46df02eb40 4 void nibbleLeds(int value);
haunsi 2:f2a2e427327e 5 void printb(uint8_t x);
haunsi 3:e46730634660 6 int lauflicht(bool richtung, int time, int &anz);
haunsi 4:a0cc5eebc75e 7 int modifyBit(int x, unsigned char position, bool State);
haunsi 1:8a46df02eb40 8
haunsi 0:24004f9fab36 9 BusOut myleds(LED1, LED2, LED3, LED4);
haunsi 0:24004f9fab36 10 DigitalIn button(BUTTON1);
haunsi 0:24004f9fab36 11
haunsi 0:24004f9fab36 12 const int INIT = 0x03;
haunsi 0:24004f9fab36 13
haunsi 0:24004f9fab36 14 int main() {
haunsi 1:8a46df02eb40 15 int anzahl, anz;
haunsi 1:8a46df02eb40 16 uint8_t value = INIT;
haunsi 1:8a46df02eb40 17
haunsi 3:e46730634660 18 anzahl = lauflicht(true , 400, anz=0);
haunsi 3:e46730634660 19 printf("anzahl= %d\n", anzahl);
haunsi 3:e46730634660 20
haunsi 1:8a46df02eb40 21 nibbleLeds(value);
haunsi 2:f2a2e427327e 22 printb(value);
haunsi 4:a0cc5eebc75e 23 value = modifyBit(value, 2, 1);
haunsi 4:a0cc5eebc75e 24 printb(myleds);
haunsi 4:a0cc5eebc75e 25 printb(modifyBit(INIT, 3, 1));
haunsi 1:8a46df02eb40 26 wait(0.1);
haunsi 0:24004f9fab36 27 }
haunsi 1:8a46df02eb40 28
haunsi 4:a0cc5eebc75e 29 int modifyBit(int x, uint8_t position, bool State)
haunsi 4:a0cc5eebc75e 30 {
haunsi 4:a0cc5eebc75e 31 int mask = 1 << position;
haunsi 4:a0cc5eebc75e 32 int state = int(State);
haunsi 4:a0cc5eebc75e 33 return (x & ~mask) | ((State << position) & mask);
haunsi 4:a0cc5eebc75e 34 }
haunsi 4:a0cc5eebc75e 35
haunsi 3:e46730634660 36 int lauflicht(bool richtung, int time, int &anz)
haunsi 3:e46730634660 37 {
haunsi 3:e46730634660 38 int i;
haunsi 3:e46730634660 39 uint8_t lauf = 0x01;
haunsi 3:e46730634660 40
haunsi 3:e46730634660 41 if(!richtung)
haunsi 3:e46730634660 42 lauf = 0x08;
haunsi 3:e46730634660 43 while(1)
haunsi 3:e46730634660 44 {
haunsi 3:e46730634660 45 nibbleLeds(lauf&0x0F);
haunsi 3:e46730634660 46 if(richtung)
haunsi 3:e46730634660 47 {
haunsi 3:e46730634660 48 lauf = lauf << 1;
haunsi 3:e46730634660 49 if(lauf > 8)
haunsi 3:e46730634660 50 lauf = 0x01;
haunsi 3:e46730634660 51 }
haunsi 3:e46730634660 52 else
haunsi 3:e46730634660 53 {
haunsi 3:e46730634660 54 lauf = lauf >> 1;
haunsi 3:e46730634660 55 if(lauf == 0);
haunsi 3:e46730634660 56 lauf = 0x08;
haunsi 3:e46730634660 57 }
haunsi 3:e46730634660 58 if(button)
haunsi 3:e46730634660 59 break;
haunsi 3:e46730634660 60 wait_ms(time);
haunsi 3:e46730634660 61 anz++;
haunsi 3:e46730634660 62 }
haunsi 3:e46730634660 63 return anz;
haunsi 3:e46730634660 64 }
haunsi 2:f2a2e427327e 65 void printb(uint8_t x)
haunsi 2:f2a2e427327e 66 {
haunsi 2:f2a2e427327e 67 for(int i=sizeof(x)<<3; i; i--)
haunsi 2:f2a2e427327e 68 putchar('0' + ((x>>(i-1))&1));
haunsi 2:f2a2e427327e 69 printf("\n");
haunsi 2:f2a2e427327e 70 }
haunsi 1:8a46df02eb40 71 void nibbleLeds(int value)
haunsi 1:8a46df02eb40 72 {
haunsi 1:8a46df02eb40 73 myleds = value%16;
haunsi 1:8a46df02eb40 74 }