Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <curses.h>
- #include <string.h>
- #include <time.h>
- #include <unistd.h>
- #include <wiringPi.h>
- #include <errno.h>
- #define DEBOUNCING 100
- #define LEFT_BUTTON_PIN 17
- #define MIDDLE_BUTTON_PIN 4
- #define RIGHT_BUTTON_PIN 22
- #define RED_DIODE_PIN 6
- #define GREEN_DIODE_PIN 26
- bool checkDebouncing(unsigned int* time);
- int setupPi();
- void rightButtonInterrupt();
- void leftButtonInterrupt();
- void middleButtonInterrupt();
- unsigned int leftButtonTime = 0;
- unsigned int middleButtonTime = 0;
- unsigned int rightButtonTime = 0;
- int* order = { 0, 1, 0, 2, 0 };
- int currentIndex = 0;
- int exitFlag = 1;
- int currentlyPressed = -1;
- int main()
- {
- int orderSize = sizeof(order) / sizeof(order[0]);
- if (setupPi() != 0) {
- return -1;
- }
- printf("Let's begin\n\n");
- while (exitFlag) {
- if (currentlyPressed >= 0) {
- printf("\t1\n");
- if (currentlyPressed == order[currentIndex]) {
- printf("\t1\n");
- currentIndex++;
- if (currentIndex == orderSize) {
- printf("\t1\n");
- break;
- }
- printf("Dobry przycisk! Pozostalo: %d\n", orderSize - currentIndex);
- }
- else {
- printf("Niestety, zaczynasz od poczatku\n");
- }
- currentlyPressed = -1;
- }
- }
- printf("*************success******************");
- return 0;
- }
- bool checkDebouncing(unsigned int* time)
- {
- unsigned int currentTime = millis();
- if (currentTime < *time) {
- return true;
- }
- *time = currentTime + DEBOUNCING;
- return false;
- }
- int setupPi()
- {
- if (wiringPiSetupGpio() < 0) {
- fprintf(stderr, "Unable to setup wiringPi: %s\n", strerror(errno));
- return -1;
- }
- pinMode(LEFT_BUTTON_PIN, INPUT);
- pinMode(RIGHT_BUTTON_PIN, INPUT);
- pinMode(MIDDLE_BUTTON_PIN, INPUT);
- pinMode(RED_DIODE_PIN, OUTPUT);
- pinMode(GREEN_DIODE_PIN, OUTPUT);
- if (wiringPiISR(LEFT_BUTTON_PIN, INT_EDGE_BOTH, &leftButtonInterrupt) < 0) {
- fprintf(stderr, "Unable to setup ISR: %s\n", strerror(errno));
- return -1;
- }
- if (wiringPiISR(RIGHT_BUTTON_PIN, INT_EDGE_BOTH, &rightButtonInterrupt) < 0) {
- fprintf(stderr, "Unable to setup ISR: %s\n", strerror(errno));
- return -1;
- }
- if (wiringPiISR(MIDDLE_BUTTON_PIN, INT_EDGE_BOTH, &middleButtonInterrupt) < 0) {
- fprintf(stderr, "Unable to setup ISR: %s\n", strerror(errno));
- return -1;
- }
- digitalWrite(GREEN_DIODE_PIN, LOW);
- digitalWrite(RED_DIODE_PIN, LOW);
- return 0;
- }
- void leftButtonInterrupt()
- {
- if (digitalRead(LEFT_BUTTON_PIN) == 0) {
- if (checkDebouncing(&leftButtonTime)) {
- return;
- }
- currentlyPressed++;
- }
- else {
- return;
- }
- }
- void middleButtonInterrupt()
- {
- if (digitalRead(MIDDLE_BUTTON_PIN) == 0) {
- }
- else {
- return;
- }
- }
- void rightButtonInterrupt()
- {
- if (digitalRead(RIGHT_BUTTON_PIN) == 0) {
- }
- else {
- return;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement