Ejemplo n.º 1
0
        const int NotOutEnabledPin = 26;                // !OE

        private static void     SchieberegisterSingle() //Shifting Register
        {
            Console.Write("Setup ");

            WiringPiWrapperDirect.WiringPiSetupGpio();

            WiringPiWrapperDirect.pinMode(SerialDataPin, PinType.OUTPUT);
            WiringPiWrapperDirect.pinMode(StorageClockPin, PinType.OUTPUT);
            WiringPiWrapperDirect.pinMode(ShiftClockPin, PinType.OUTPUT);

            WiringPiWrapperDirect.digitalWrite(SerialDataPin, 0);
            WiringPiWrapperDirect.digitalWrite(ShiftClockPin, 0);

            Console.WriteLine("completed.");

            for (int i = 0; i < 8; i++)
            {
                WiringPiWrapperDirect.digitalWrite(StorageClockPin, 0);
                Thread.Sleep(1);

                WriteByte(1 << i);

                WiringPiWrapperDirect.digitalWrite(StorageClockPin, 1);

                Thread.Sleep(1000);
            }
        }
Ejemplo n.º 2
0
        public static void RotaryPoller()
        {
            Console.WriteLine("Polling");

            while (true)
            {
                int binaryRotaryValue = 0;

                if (WiringPiWrapperDirect.digitalRead(DataPin) == 0)
                {
                    binaryRotaryValue += DataPinValue;
                }
                if (WiringPiWrapperDirect.digitalRead(ClockPin) == 0)
                {
                    binaryRotaryValue += ClockPinValue;
                }
                if (WiringPiWrapperDirect.digitalRead(ClickPin) == 0)                   //Pull Up/Down Vertauschung
                {
                    binaryRotaryValue += ClickPinValue;
                }

                if (binaryRotaryValue != BinaryRotaryValue)
                {
                    BinaryRotaryValue = binaryRotaryValue;
                    RotaryChanged.Set();
                }
                Thread.Sleep(1);                        //Nachdem Prellen ist doof
            }
        }
Ejemplo n.º 3
0
        private static void     SevenSegmentChained()
        {
            Console.Write("Setup ");

            WiringPiWrapperDirect.WiringPiSetupGpio();

            WiringPiWrapperDirect.pinMode(SerialDataPin, PinType.OUTPUT);
            WiringPiWrapperDirect.pinMode(StorageClockPin, PinType.OUTPUT);
            WiringPiWrapperDirect.pinMode(ShiftClockPin, PinType.OUTPUT);

            WiringPiWrapperDirect.digitalWrite(SerialDataPin, 0);
            WiringPiWrapperDirect.digitalWrite(ShiftClockPin, 0);

            Console.WriteLine("completed.");

            const int chainCount = 2;

            Clear(chainCount);
            Thread.Sleep(1000);

            for (int i = 0; i < 16; i++)
            {
                WiringPiWrapperDirect.digitalWrite(StorageClockPin, 0);

                WriteByte(SegmentCode [i] + i % 2);

                WiringPiWrapperDirect.digitalWrite(StorageClockPin, 1);

                Thread.Sleep(1000);
            }

            Clear(chainCount);
        }
Ejemplo n.º 4
0
        private static void DigitalWriteByte()
        {
            WiringPiWrapperDirect.WiringPiSetupGpio();
            //Schreibt auch bei 0xffff nur in diese 8 Pins!

            WiringPiWrapperDirect.pinMode(4, PinType.OUTPUT);
            WiringPiWrapperDirect.pinMode(17, PinType.OUTPUT);
            WiringPiWrapperDirect.pinMode(18, PinType.OUTPUT);
            WiringPiWrapperDirect.pinMode(22, PinType.OUTPUT);
            WiringPiWrapperDirect.pinMode(23, PinType.OUTPUT);
            WiringPiWrapperDirect.pinMode(24, PinType.OUTPUT);
            WiringPiWrapperDirect.pinMode(25, PinType.OUTPUT);

            while (true)
            {
                WiringPiWrapperDirect.digitalWriteByte(0);

                WiringPiWrapperDirect.digitalWriteByte(1);                  //17
                WiringPiWrapperDirect.digitalWriteByte(2);                  //18
                WiringPiWrapperDirect.digitalWriteByte(4);                  //27
                WiringPiWrapperDirect.digitalWriteByte(8);                  //22
                WiringPiWrapperDirect.digitalWriteByte(16);                 //23
                WiringPiWrapperDirect.digitalWriteByte(32);                 //24
                WiringPiWrapperDirect.digitalWriteByte(64);                 //25
                WiringPiWrapperDirect.digitalWriteByte(128);                //4

                //WiringPiWrapperDirect.digitalWriteByte(0xff);
            }
        }
Ejemplo n.º 5
0
        //Das zuletzt geschriebene Bit liegt an Ausgang 0 an
        //Returnwert ist der hinausgeschobene Teil
        private static int WriteByteReturn(int state)
        {
            int shiftout = 0;
            int soll;

            WiringPiWrapperDirect.digitalWrite(StorageClockPin, 0);

            for (int i = 1; i < 0x100; i = i << 1)
            {
                if (WiringPiWrapperDirect.digitalRead(ShiftOutPin) > 0)
                {
                    shiftout |= i;
                }

                soll = (state & i) > 0 ? 1 : 0;
                WiringPiWrapperDirect.digitalWrite(SerialDataPin, soll);

                Pulse(ShiftClockPin);

                for (int sleep = 0; sleep < 40; sleep++)                 // Verzögerung von In zu Out
                {
                    ;
                }
            }

            WiringPiWrapperDirect.digitalWrite(StorageClockPin, 1);
            return(shiftout);
        }
Ejemplo n.º 6
0
        static void Pulse(int pin)
        {
            WiringPiWrapperDirect.digitalWrite(pin, 0);

            //Thread.Sleep (100);

            WiringPiWrapperDirect.digitalWrite(pin, 1);
        }
Ejemplo n.º 7
0
 static void Clear(int chainCount)
 {
     WiringPiWrapperDirect.digitalWrite(StorageClockPin, 0);
     for (int i = 0; i < chainCount; i++)
     {
         WriteByte(0);
     }
     WiringPiWrapperDirect.digitalWrite(StorageClockPin, 1);
 }
Ejemplo n.º 8
0
        public static void HardwarePwmAndISR()
        {
            const int isrPin = 4;
            const int pwmPin = 18;

            Console.Write("Setup ");

            WiringPiWrapperDirect.WiringPiSetupGpio();

            WiringPiWrapperDirect.pinMode(isrPin, PinType.INPUT);
            WiringPiWrapperDirect.pullUpDnControl(isrPin, PullUpType.PUD_DOWN);
            //WirinPiWrapper.wiringPiISR (isrPin, EdgeType.INT_EDGE_RISING, IsrCounter);

            WiringPiWrapperDirect.pwmSetMode(PwmType.PWM_MODE_MS);
            WiringPiWrapperDirect.pinMode(pwmPin, PinType.PWM_OUTPUT);

            Console.WriteLine("completed.");

            int  loopCount = 1000;
            int  clock     = 2;                                         //Teile den max Prozessortakt in Count Teile
            uint range     = 2;                                         //Mach jedes dieser Teile durch 2 Teilbar

            WiringPiWrapperDirect.pwmSetClock(clock);
            WiringPiWrapperDirect.pwmSetRange(range);

            DateTime start = DateTime.Now;

            m_isrCounter = 0;

            WiringPiWrapperDirect.pwmWrite(pwmPin, 1);                  //Schreibe 1 von 2 Teilen Plus, dann 1/2 0
            while (m_isrCounter < loopCount)
            {
                ;
            }

            DateTime end         = DateTime.Now;
            float    frequenzKhz = (float)(loopCount / (new TimeSpan(end.Ticks - start.Ticks).TotalMilliseconds));

            Console.WriteLine(string.Format("Clock: {0}, Range: {1} Frequenz in KHz: {2}", clock, range, frequenzKhz));
            Console.WriteLine(string.Format("Resultierende PWI Grundfrequez: {0} KHz", clock * frequenzKhz));

            //Hier ist ein Oszi nötig: schreibe ich falsch oder Messe ich falsch?
            //Angeblich ist die interne Clock 19.2MHz
            //Ich komme bei einer Teilung von 64 auf 4,5KHz --> interne Clock 64 * 4,5 = 288KHz?
            //Bei kleinerer Teilung bleibt er stehen (32), danach (ab 16) freeze, der nur mit kaltem reboot zu beenden ist.

            //Vermute, da läuft am ISR ein Stack voll?
            //Stimmt wohl: Ohne ISR schreibt er auch mit clock 2 range 2 data 1: Das sollten dann 10MHZ sein: Oszi??

            //Fazit ISR ist eine feine Sache aber nicht für Hochfrequenz, 3-4 KHz hält das aus, dahinter dann wohl nur primitive Methoden
            //ledoder volle Threadpools etc


            //Console.WriteLine ("completed.");
        }
Ejemplo n.º 9
0
        public static void RotaryEncoder()
        {
            Console.Write("Setup ");

            WiringPiWrapperDirect.WiringPiSetupGpio();
            WiringPiWrapperDirect.pinMode(ClickPin, PinType.INPUT);
            WiringPiWrapperDirect.pinMode(DataPin, PinType.INPUT);
            WiringPiWrapperDirect.pinMode(ClockPin, PinType.INPUT);

            WiringPiWrapperDirect.pullUpDnControl(ClickPin, PullUpType.PUD_UP);                 //!!
            WiringPiWrapperDirect.pullUpDnControl(DataPin, PullUpType.PUD_DOWN);
            WiringPiWrapperDirect.pullUpDnControl(ClockPin, PullUpType.PUD_DOWN);

            Console.WriteLine("completed.");

            Thread rotaryPoller = new Thread(RotaryPoller);

            rotaryPoller.Start();
            bool mouseDown = false;

            Int32 last4Positions = 0;

            do
            {
                Console.WriteLine(BinaryRotaryValue);

                if (BinaryRotaryValue == 4)
                {
                    Console.WriteLine("MouseDown");
                    mouseDown = true;
                    continue;
                }
                if (mouseDown)
                {
                    Console.WriteLine("MouseUp");
                    mouseDown = false;
                }

                //Links = 1320
                //Rechts = 2310
                last4Positions  = last4Positions << 8;
                last4Positions += BinaryRotaryValue;

                if (last4Positions == 0x01030200)
                {
                    Console.WriteLine("LeftRotation");
                }

                if (last4Positions == 0x02030100)
                {
                    Console.WriteLine("RightRotation");
                }
            } while(RotaryChanged.WaitOne());
        }
Ejemplo n.º 10
0
        public UART()
        {
            //Pi3 Path
            int fd = WiringPiWrapperDirect.serialOpen("/dev/ttyS0", 9600);

            if (fd < 0)
            {
                throw new ExecutionEngineException("Serial Open fails.");
            }

            WiringPiWrapperDirect.WiringPiSetupGpio();
        }
Ejemplo n.º 11
0
        private static void ToggleDirect()
        {
            //1.26 MHZ, laut benchmarks wiringpi direct = 4MHZ, beste c lib bis 22MHz
            WiringPiWrapperDirect.WiringPiSetupGpio();
            WiringPiWrapperDirect.pinMode(18, PinType.OUTPUT);

            while (true)
            {
                WiringPiWrapperDirect.digitalWrite(18, 0);
                WiringPiWrapperDirect.digitalWrite(18, 1);
            }
        }
Ejemplo n.º 12
0
        private static void Gordonsleeper()
        {
            DateTime start = DateTime.Now;

            for (int i = 0; i < 1000000; i++)
            {
                WiringPiWrapperDirect.delayMicroseconds(1);
            }

            DateTime end = DateTime.Now;

            Console.WriteLine("Eine Sekunde dauert " + (new TimeSpan(end.Ticks - start.Ticks)).TotalMilliseconds + " Millisekunden");
        }
Ejemplo n.º 13
0
        //Hier wird nicht gechained, sondern nur die Ausgabe gelesen
        //Mit OE wird vermieden, dass die Zwischenzustaände ausgegeben werden und flackern
        private static void     SchieberegisterChained()
        {
            Console.Write("Setup ");

            WiringPiWrapperDirect.WiringPiSetupGpio();

            WiringPiWrapperDirect.pinMode(SerialDataPin, PinType.OUTPUT);
            WiringPiWrapperDirect.pinMode(StorageClockPin, PinType.OUTPUT);
            WiringPiWrapperDirect.pinMode(ShiftClockPin, PinType.OUTPUT);
            WiringPiWrapperDirect.pinMode(NotOutEnabledPin, PinType.OUTPUT);
            WiringPiWrapperDirect.pinMode(ShiftOutPin, PinType.INPUT);
            WiringPiWrapperDirect.pullUpDnControl(ShiftOutPin, PullUpType.PUD_DOWN);

            WiringPiWrapperDirect.digitalWrite(SerialDataPin, 0);
            WiringPiWrapperDirect.digitalWrite(ShiftClockPin, 0);

            Console.WriteLine("completed.");

            WriteByteReturn(0);
            int lastInput = 0;
            int state;
            int output;

            int loopCount = 10000;

            DateTime start = DateTime.Now;

            for (int loop = 0; loop < loopCount; loop++)
            {
                WiringPiWrapperDirect.digitalWrite(NotOutEnabledPin, 1);

                for (int i = 0; i < 8; i++)
                {
                    state  = 1 << i;
                    output = WriteByteReturn(state);

                    if (output != lastInput)
                    {
                        Console.WriteLine("Schätze da hast Du mächtig Scheisse am Hacken.");
                    }
                    lastInput = state;
                }

                WiringPiWrapperDirect.digitalWrite(NotOutEnabledPin, 0);
            }

            DateTime stop = DateTime.Now;

            Console.WriteLine(loopCount + " Loops in " + new TimeSpan(stop.Ticks - start.Ticks).TotalMilliseconds + " ms.");
        }
Ejemplo n.º 14
0
        static void TasterWiringPi()
        {
            Console.WriteLine("Dehre");

            WiringPiWrapperDirect.WiringPiSetupGpio();
            WiringPiWrapperDirect.pinMode(17, PinType.OUTPUT);
            WiringPiWrapperDirect.pinMode(18, PinType.INPUT);

            WiringPiWrapperDirect.digitalWrite(17, 0);

            bool lastButtonPressed = false;
            bool ledBurning        = false;

            //while(WirinPiWrapper.millis() < 30000)
            for (var i = 0; i < 100000000; i++)
            {
                bool buttonPressed = WiringPiWrapperDirect.digitalRead(18) > 0;

                //Draufdrücken
                if (buttonPressed && !lastButtonPressed)
                {
                    Console.WriteLine("Press");
                    if (ledBurning)
                    {
                        WiringPiWrapperDirect.digitalWrite(17, 0);
                    }
                    else
                    {
                        WiringPiWrapperDirect.digitalWrite(17, 1);
                    }

                    ledBurning = !ledBurning;

                    lastButtonPressed = true;
                }
                //Loslassen
                if (!buttonPressed && lastButtonPressed)
                {
                    Console.WriteLine("Release");
                    lastButtonPressed = false;
                    Thread.Sleep(30);                           //Prellschalter
                }
            }

            WiringPiWrapperDirect.digitalWrite(17, 0);
            Console.WriteLine("sers.");
        }
Ejemplo n.º 15
0
        public string WriteRead(string input)
        {
            string output = "";

            for (int i = 0; i < input.Length; i++)
            {
                WiringPiWrapperDirect.serialPutchar(fileDescriptor, input [i]);
                WiringPiWrapperDirect.serialFlush(fileDescriptor);

                while (WiringPiWrapperDirect.serialDataAvail(fileDescriptor) > 0)
                {
                    output += WiringPiWrapperDirect.serialGetchar(fileDescriptor);
                }
            }

            return(output);
        }
Ejemplo n.º 16
0
        //Das zuletzt geschriebene Bit liegt an Ausgang 0 an
        //Nachdem Q7S nicht benötigt wird, reicht ein StorageClockPin am Ende
        private static void WriteByte(int state)
        {
            for (int i = 1; i < 0x100; i = i << 1)
            {
                if ((state & i) > 0)
                {
                    WiringPiWrapperDirect.digitalWrite(SerialDataPin, 1);
                }
                else
                {
                    WiringPiWrapperDirect.digitalWrite(SerialDataPin, 0);
                }

                Pulse(ShiftClockPin);

                Thread.Sleep(1);
            }
        }
Ejemplo n.º 17
0
        static void Pwm()
        {
            Console.WriteLine("Servus Luigi.");
            WiringPiWrapperDirect.WiringPiSetupGpio();
            WiringPiWrapperDirect.pinMode(17, PinType.OUTPUT);

            int testCount = 10000000;

            for (int loopCount = 0; loopCount < testCount; loopCount++)
            {
                WiringPiWrapperDirect.digitalWrite(17, 1);
                WiringPiWrapperDirect.delayMicroseconds(7);
                //Thread.Sleep (7);
                WiringPiWrapperDirect.digitalWrite(17, 0);
                //Thread.Sleep (3);
                WiringPiWrapperDirect.delayMicroseconds(3);
            }

            Console.WriteLine("Scheiss World!");
        }
Ejemplo n.º 18
0
        static void Buzzer()
        {
            //Ungewöhnliches Beispiel, PNP, wir steuern also mit negativ an, d.h. wir beepen, wenn wir kein Signal haben
            //Hier PNP

            Console.WriteLine("Servus Luigi.");
            WiringPiWrapperDirect.WiringPiSetupGpio();
            WiringPiWrapperDirect.pinMode(17, PinType.OUTPUT);

            int testCount = 5
            ;

            for (int loopCount = 0; loopCount < testCount; loopCount++)
            {
                WiringPiWrapperDirect.digitalWrite(17, 1);
                Thread.Sleep(400);
                WiringPiWrapperDirect.digitalWrite(17, 0);
                Thread.Sleep(400);
            }

            Console.WriteLine("Scheiss World!");
        }
Ejemplo n.º 19
0
        //http://www.sunfounder.com/index.php?c=case_incs&a=detail_&id=126&name=Super%20Kit%20For%20Raspberry%20Pi

        public static void GleichstromHBrueckeL293D()
        {
            const int EnablePin = 25;
            const int MotorPin1 = 12;
            const int MotorPin2 = 16;


            Console.WriteLine("Setup.");

            WiringPiWrapperDirect.WiringPiSetupGpio();
            WiringPiWrapperDirect.pinMode(EnablePin, PinType.OUTPUT);
            WiringPiWrapperDirect.pinMode(MotorPin1, PinType.OUTPUT);
            WiringPiWrapperDirect.pinMode(MotorPin2, PinType.OUTPUT);

            WiringPiWrapperDirect.digitalWrite(MotorPin1, 0);
            WiringPiWrapperDirect.digitalWrite(MotorPin2, 0);

            WiringPiWrapperDirect.digitalWrite(EnablePin, 1);
            Console.WriteLine("Enabled");

            WiringPiWrapperDirect.digitalWrite(MotorPin1, 1);
            Console.WriteLine("Pin1 activiert.");
            Thread.Sleep(2000);
            WiringPiWrapperDirect.digitalWrite(MotorPin1, 0);
            Console.WriteLine("Pin1 deactiviert.");

            Thread.Sleep(1000);

            WiringPiWrapperDirect.digitalWrite(MotorPin2, 1);
            Console.WriteLine("Pin2 activiert.");
            Thread.Sleep(2000);
            WiringPiWrapperDirect.digitalWrite(MotorPin2, 0);
            Console.WriteLine("Pin2 deactiviert.");

            Console.WriteLine("Press 2 disable");
            Console.ReadKey();
            WiringPiWrapperDirect.digitalWrite(EnablePin, 0);
            Console.WriteLine("disabled");
        }
Ejemplo n.º 20
0
        public static void WiringPiBenchmarkDelegates()
        {
            Console.WriteLine("Servus Luigi.");

            WiringPiWrapperDirect.WiringPiSetupGpio();

            WiringPiWrapperDirect.pinMode(17, PinType.OUTPUT);
            WiringPiWrapperDirect.pinMode(18, PinType.INPUT);

            DateTime  start     = DateTime.Now;
            const int testCount = 100000000;

            for (int i = 0; i < testCount; i++)
            {
                WiringPiWrapperDirect.digitalWrite(17, i & 1);
            }

            TimeSpan duration = new TimeSpan(DateTime.Now.Ticks - start.Ticks);

            Console.WriteLine("WiringPi WriteTime  = " + (duration.TotalMilliseconds / testCount) + "ms,  " + testCount / (duration.TotalMilliseconds * 1000) + " MHz");

            WiringPiWrapperDirect.digitalWrite(17, 0);

//			start = DateTime.Now;
//			int soll;
//			for (int i = 0; i < testCount; i++) {
//				soll = i & 1;
//				WirinPiWrapper.digitalWrite (17, soll);
//				//WirinPiWrapper.delayMicroseconds (1);	//Seltener Fehler, delay drückt von 2 MHz auf 0,2 MHz fehlerlos
//				for (int y = 0; y < 30; y++)			//0,55 MHz fehlerfrei!
//					;
//				if (WirinPiWrapper.digitalRead(18)  != soll)
//					Console.WriteLine ("Scheisndregg " + i);
//			}
//
//			duration = new TimeSpan (DateTime.Now.Ticks - start.Ticks);
//			Console.WriteLine ("WiringPi WriteReadTime  = " + (duration.TotalMilliseconds / testCount) + "ms,  " + testCount / (duration.TotalMilliseconds * 1000)  + " MHz");
        }
Ejemplo n.º 21
0
        private static void     SevenSegment()
        {
            Console.Write("Setup ");

            WiringPiWrapperDirect.WiringPiSetupGpio();

            WiringPiWrapperDirect.pinMode(SerialDataPin, PinType.OUTPUT);
            WiringPiWrapperDirect.pinMode(StorageClockPin, PinType.OUTPUT);
            WiringPiWrapperDirect.pinMode(ShiftClockPin, PinType.OUTPUT);

            WiringPiWrapperDirect.digitalWrite(SerialDataPin, 0);
            WiringPiWrapperDirect.digitalWrite(ShiftClockPin, 0);

            Console.WriteLine("completed.");

            for (int i = 0; i < 16; i++)
            {
                WiringPiWrapperDirect.digitalWrite(StorageClockPin, 0);
                //Thread.Sleep (1);

                WriteByte(SegmentCode [i]);

                WiringPiWrapperDirect.digitalWrite(StorageClockPin, 1);

                Thread.Sleep(1000);
            }

            for (int i = 0; i < 16; i++)
            {
                WiringPiWrapperDirect.digitalWrite(StorageClockPin, 0);

                WriteByte(SegmentCode [i] + 1);                         //Der Punkt

                WiringPiWrapperDirect.digitalWrite(StorageClockPin, 1);

                Thread.Sleep(1000);
            }
        }