Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const uint8_t upIN = 2;
- const uint8_t downIN = 3;
- const uint8_t leftIN = 4;
- const uint8_t rightIN = 5;
- const uint8_t upOUT = 6;
- const uint8_t downOUT = 7;
- const uint8_t leftOUT = 8;
- const uint8_t rightOUT = 9;
- const uint8_t jumpper1Pin = 10;
- const uint8_t jumpper2Pin = 14;
- uint8_t leftRead;
- uint8_t downRead;
- uint8_t upRead;
- uint8_t rightRead;
- uint8_t jumpper1Read;
- uint8_t jumpper2Read;
- unsigned long currentMillis;
- unsigned long upPreviousMillis = 0;
- unsigned long downPreviousMillis = 0;
- unsigned long leftPreviousMillis = 0;
- unsigned long rightPreviousMillis = 0;
- uint8_t upPreviousState = 0;
- uint8_t downPreviousState = 0;
- uint8_t leftPreviousState = 0;
- uint8_t rightPreviousState = 0;
- uint8_t mode;
- void setup() {
- // Serial.begin(9600);
- pinMode(leftIN, INPUT_PULLUP);
- pinMode(rightIN, INPUT_PULLUP);
- pinMode(upIN, INPUT_PULLUP);
- pinMode(downIN, INPUT_PULLUP);
- pinMode(leftOUT, INPUT);
- pinMode(rightOUT, INPUT);
- pinMode(downOUT, INPUT);
- pinMode(upOUT, INPUT);
- pinMode(jumpper1Pin, INPUT_PULLUP);
- pinMode(jumpper2Pin, INPUT_PULLUP);
- jumpper1Read = digitalRead(jumpper1Pin);
- jumpper2Read = digitalRead(jumpper2Pin);
- if (jumpper1Read && jumpper2Read) mode = 3;
- if (!jumpper1Read && jumpper2Read) mode = 1;
- if (jumpper1Read && !jumpper2Read) mode = 2;
- if (!jumpper1Read && !jumpper2Read) mode = 0;
- }
- void loop() {
- currentMillis = millis();
- upRead = digitalRead(upIN);
- downRead = digitalRead(downIN);
- leftRead = digitalRead(leftIN);
- rightRead = digitalRead(rightIN);
- switch (mode)
- {
- case 0:
- outputRAW();
- break;
- case 1:
- outputSODC();
- break;
- case 2:
- outputLASTCOMMAND();
- break;
- case 3:
- outputLASTCOMMANDnSODC();
- break;
- default:
- mode = 0;
- break;
- }
- }
- void outputRAW() {
- if (!upRead) pinMode(upOUT, OUTPUT);
- digitalWrite(upOUT, LOW);
- if (upRead) pinMode(upOUT, INPUT);
- if (!downRead) pinMode(downOUT, OUTPUT);
- digitalWrite(downOUT, LOW);
- if (downRead) pinMode(downOUT, INPUT);
- if (!leftRead) pinMode(leftOUT, OUTPUT);
- digitalWrite(leftOUT, LOW);
- if (leftRead) pinMode(leftOUT, INPUT);
- if (!rightRead) pinMode(rightOUT, OUTPUT);
- digitalWrite(rightOUT, LOW);
- if (rightRead) pinMode(rightOUT, INPUT);
- }
- void outputSODC() {
- if (!leftRead)
- {
- if (rightRead)
- {
- pinMode(rightOUT, INPUT);
- pinMode(leftOUT, OUTPUT);
- digitalWrite(leftOUT, LOW);
- }
- else
- {
- pinMode(rightOUT, INPUT);
- pinMode(leftOUT, INPUT);
- }
- }
- else if (!rightRead)
- {
- pinMode(leftOUT, INPUT);
- pinMode(rightOUT, OUTPUT);
- digitalWrite(rightOUT, LOW);
- }
- else
- {
- pinMode(rightOUT, INPUT);
- pinMode(leftOUT, INPUT);
- }
- if (!upRead)
- {
- pinMode(downOUT, INPUT);
- pinMode(upOUT, OUTPUT);
- digitalWrite(upOUT, LOW);
- }
- else if (!downRead)
- {
- {
- pinMode(downOUT, OUTPUT);
- digitalWrite(downOUT, LOW);
- pinMode(upOUT, INPUT);
- }
- }
- else
- {
- pinMode(upOUT, INPUT);
- pinMode(downOUT, INPUT);
- }
- }
- void outputLASTCOMMAND() {
- if (!upRead) {
- if (!upPreviousState) {
- upPreviousMillis = currentMillis;
- upPreviousState = HIGH;
- }
- if (!downRead) {
- if (upPreviousMillis > downPreviousMillis) {
- pinMode(upOUT, OUTPUT);
- digitalWrite(upOUT, LOW);
- }
- else
- {
- pinMode(upOUT, INPUT);
- }
- }
- else
- {
- pinMode(upOUT, OUTPUT);
- digitalWrite(upOUT, LOW);
- }
- }
- if (upRead) {
- upPreviousState = LOW;
- pinMode(upOUT, INPUT);
- }
- if (!downRead) {
- if (!downPreviousState) {
- downPreviousMillis = currentMillis;
- downPreviousState = HIGH;
- }
- if (!upRead) {
- if (downPreviousMillis > upPreviousMillis) {
- pinMode(downOUT, OUTPUT);
- digitalWrite(downOUT, LOW);
- }
- else
- {
- pinMode(downOUT, INPUT);
- }
- }
- else
- {
- pinMode(downOUT, OUTPUT);
- digitalWrite(downOUT, LOW);
- }
- }
- if (downRead) {
- downPreviousState = LOW;
- pinMode(downOUT, INPUT);
- }
- if (!leftRead) {
- if (!leftPreviousState) {
- leftPreviousMillis = currentMillis;
- leftPreviousState = HIGH;
- }
- if (!rightRead) {
- if (leftPreviousMillis > rightPreviousMillis) {
- pinMode(leftOUT, OUTPUT);
- digitalWrite(leftOUT, LOW);
- }
- else
- {
- pinMode(leftOUT, INPUT);
- }
- }
- else
- {
- pinMode(leftOUT, OUTPUT);
- digitalWrite(leftOUT, LOW);
- }
- }
- if (leftRead) {
- leftPreviousState = LOW;
- pinMode(leftOUT, INPUT);
- }
- if (!rightRead) {
- if (!rightPreviousState) {
- rightPreviousMillis = currentMillis;
- rightPreviousState = HIGH;
- }
- if (!leftRead) {
- if (rightPreviousMillis > leftPreviousMillis) {
- pinMode(rightOUT, OUTPUT);
- digitalWrite(rightOUT, LOW);
- }
- else
- {
- pinMode(rightOUT, INPUT);
- }
- }
- else
- {
- pinMode(rightOUT, OUTPUT);
- digitalWrite(rightOUT, LOW);
- }
- }
- if (rightRead) {
- rightPreviousState = LOW;
- pinMode(rightOUT, INPUT);
- }
- }
- void outputLASTCOMMANDnSODC() {
- if (!upRead)
- {
- pinMode(downOUT, INPUT);
- pinMode(upOUT, OUTPUT);
- digitalWrite(upOUT, LOW);
- }
- else if (!downRead)
- {
- {
- pinMode(downOUT, OUTPUT);
- digitalWrite(downOUT, LOW);
- pinMode(upOUT, INPUT);
- }
- }
- else
- {
- pinMode(upOUT, INPUT);
- pinMode(downOUT, INPUT);
- }
- if (!leftRead) {
- if (!leftPreviousState) {
- leftPreviousMillis = currentMillis;
- leftPreviousState = HIGH;
- }
- if (!rightRead) {
- if (leftPreviousMillis > rightPreviousMillis) {
- pinMode(leftOUT, OUTPUT);
- digitalWrite(leftOUT, LOW);
- }
- else
- {
- pinMode(leftOUT, INPUT);
- }
- }
- else
- {
- pinMode(leftOUT, OUTPUT);
- digitalWrite(leftOUT, LOW);
- }
- }
- if (leftRead) {
- leftPreviousState = LOW;
- pinMode(leftOUT, INPUT);
- }
- if (!rightRead) {
- if (!rightPreviousState) {
- rightPreviousMillis = currentMillis;
- rightPreviousState = HIGH;
- }
- if (!leftRead) {
- if (rightPreviousMillis > leftPreviousMillis) {
- pinMode(rightOUT, OUTPUT);
- digitalWrite(rightOUT, LOW);
- }
- else
- {
- pinMode(rightOUT, INPUT);
- }
- }
- else
- {
- pinMode(rightOUT, OUTPUT);
- digitalWrite(rightOUT, LOW);
- }
- }
- if (rightRead) {
- rightPreviousState = LOW;
- pinMode(rightOUT, INPUT);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement