Advertisement
Guest User

Arduino SOCD Multimode noHigh

a guest
Sep 30th, 2021
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const uint8_t upIN = 2;
  2. const uint8_t downIN = 3;
  3. const uint8_t leftIN = 4;
  4. const uint8_t rightIN = 5;
  5.  
  6.  
  7. const uint8_t upOUT = 6;
  8. const uint8_t downOUT = 7;
  9. const uint8_t leftOUT = 8;
  10. const uint8_t rightOUT = 9;
  11.  
  12. const uint8_t jumpper1Pin = 10;
  13. const uint8_t jumpper2Pin = 14;
  14.  
  15.  
  16. uint8_t leftRead;
  17. uint8_t downRead;
  18. uint8_t upRead;
  19. uint8_t rightRead;
  20.  
  21. uint8_t jumpper1Read;
  22. uint8_t jumpper2Read;
  23.  
  24. unsigned long currentMillis;
  25. unsigned long upPreviousMillis = 0;
  26. unsigned long downPreviousMillis = 0;
  27. unsigned long leftPreviousMillis = 0;
  28. unsigned long rightPreviousMillis = 0;
  29.  
  30. uint8_t upPreviousState = 0;
  31. uint8_t downPreviousState = 0;
  32. uint8_t leftPreviousState = 0;
  33. uint8_t rightPreviousState = 0;
  34.  
  35. uint8_t mode;
  36.  
  37. void setup() {
  38.  
  39.   // Serial.begin(9600);
  40.   pinMode(leftIN, INPUT_PULLUP);
  41.   pinMode(rightIN, INPUT_PULLUP);
  42.   pinMode(upIN, INPUT_PULLUP);
  43.   pinMode(downIN, INPUT_PULLUP);
  44.  
  45.   pinMode(leftOUT, INPUT);
  46.   pinMode(rightOUT, INPUT);
  47.   pinMode(downOUT, INPUT);
  48.   pinMode(upOUT, INPUT);
  49.  
  50.   pinMode(jumpper1Pin, INPUT_PULLUP);
  51.   pinMode(jumpper2Pin, INPUT_PULLUP);
  52.  
  53.  
  54.   jumpper1Read = digitalRead(jumpper1Pin);
  55.   jumpper2Read = digitalRead(jumpper2Pin);
  56.  
  57.   if (jumpper1Read && jumpper2Read)  mode = 3;
  58.   if (!jumpper1Read && jumpper2Read) mode = 1;
  59.   if (jumpper1Read && !jumpper2Read) mode = 2;
  60.   if (!jumpper1Read && !jumpper2Read) mode = 0;
  61.  
  62.  
  63.  
  64. }
  65.  
  66. void loop() {
  67.  
  68.  
  69.   currentMillis = millis();
  70.  
  71.   upRead = digitalRead(upIN);
  72.   downRead = digitalRead(downIN);
  73.   leftRead = digitalRead(leftIN);
  74.   rightRead = digitalRead(rightIN);
  75.  
  76.   switch (mode)
  77.   {
  78.     case 0:
  79.       outputRAW();
  80.       break;
  81.  
  82.     case 1:
  83.       outputSODC();
  84.       break;
  85.  
  86.     case 2:
  87.       outputLASTCOMMAND();
  88.       break;
  89.  
  90.     case 3:
  91.       outputLASTCOMMANDnSODC();
  92.       break;
  93.  
  94.     default:
  95.       mode = 0;
  96.       break;
  97.   }
  98.  
  99.  
  100. }
  101.  
  102. void outputRAW() {
  103.   if (!upRead)    pinMode(upOUT, OUTPUT);
  104.   digitalWrite(upOUT, LOW);
  105.   if (upRead)     pinMode(upOUT, INPUT);
  106.  
  107.   if (!downRead)  pinMode(downOUT, OUTPUT);
  108.   digitalWrite(downOUT, LOW);
  109.   if (downRead)   pinMode(downOUT, INPUT);
  110.  
  111.   if (!leftRead)  pinMode(leftOUT, OUTPUT);
  112.   digitalWrite(leftOUT, LOW);
  113.   if (leftRead)   pinMode(leftOUT, INPUT);
  114.  
  115.   if (!rightRead) pinMode(rightOUT, OUTPUT);
  116.   digitalWrite(rightOUT, LOW);
  117.   if (rightRead)  pinMode(rightOUT, INPUT);
  118.  
  119. }
  120.  
  121. void outputSODC() {
  122.   if (!leftRead)
  123.   {
  124.     if (rightRead)
  125.     {
  126.       pinMode(rightOUT, INPUT);
  127.       pinMode(leftOUT, OUTPUT);
  128.       digitalWrite(leftOUT, LOW);
  129.     }
  130.     else
  131.     {
  132.       pinMode(rightOUT, INPUT);
  133.       pinMode(leftOUT, INPUT);
  134.     }
  135.   }
  136.   else if (!rightRead)
  137.   {
  138.     pinMode(leftOUT, INPUT);
  139.     pinMode(rightOUT, OUTPUT);
  140.     digitalWrite(rightOUT, LOW);
  141.   }
  142.   else
  143.   {
  144.     pinMode(rightOUT, INPUT);
  145.     pinMode(leftOUT, INPUT);
  146.   }
  147.  
  148.  
  149.   if (!upRead)
  150.   {
  151.     pinMode(downOUT, INPUT);
  152.     pinMode(upOUT, OUTPUT);
  153.     digitalWrite(upOUT, LOW);
  154.   }
  155.   else if (!downRead)
  156.   {
  157.     {
  158.       pinMode(downOUT, OUTPUT);
  159.       digitalWrite(downOUT, LOW);
  160.       pinMode(upOUT, INPUT);
  161.     }
  162.   }
  163.   else
  164.   {
  165.     pinMode(upOUT, INPUT);
  166.     pinMode(downOUT, INPUT);
  167.   }
  168.  
  169. }
  170.  
  171. void outputLASTCOMMAND() {
  172.  
  173.   if (!upRead) {
  174.     if (!upPreviousState) {
  175.       upPreviousMillis = currentMillis;
  176.       upPreviousState = HIGH;
  177.     }
  178.     if (!downRead) {
  179.       if (upPreviousMillis > downPreviousMillis) {
  180.         pinMode(upOUT, OUTPUT);
  181.         digitalWrite(upOUT, LOW);
  182.       }
  183.       else
  184.       {
  185.         pinMode(upOUT, INPUT);
  186.       }
  187.  
  188.     }
  189.     else
  190.     {
  191.       pinMode(upOUT, OUTPUT);
  192.       digitalWrite(upOUT, LOW);
  193.     }
  194.   }
  195.  
  196.  
  197.   if (upRead) {
  198.     upPreviousState = LOW;
  199.     pinMode(upOUT, INPUT);
  200.  
  201.   }
  202.  
  203.   if (!downRead) {
  204.     if (!downPreviousState) {
  205.       downPreviousMillis = currentMillis;
  206.       downPreviousState = HIGH;
  207.     }
  208.     if (!upRead) {
  209.       if (downPreviousMillis > upPreviousMillis) {
  210.         pinMode(downOUT, OUTPUT);
  211.         digitalWrite(downOUT, LOW);
  212.       }
  213.       else
  214.       {
  215.         pinMode(downOUT, INPUT);
  216.       }
  217.  
  218.     }
  219.     else
  220.     {
  221.       pinMode(downOUT, OUTPUT);
  222.       digitalWrite(downOUT, LOW);
  223.     }
  224.   }
  225.  
  226.  
  227.   if (downRead) {
  228.     downPreviousState = LOW;
  229.     pinMode(downOUT, INPUT);
  230.  
  231.   }
  232.  
  233.   if (!leftRead) {
  234.     if (!leftPreviousState) {
  235.       leftPreviousMillis = currentMillis;
  236.       leftPreviousState = HIGH;
  237.     }
  238.     if (!rightRead) {
  239.       if (leftPreviousMillis > rightPreviousMillis) {
  240.        
  241.         pinMode(leftOUT, OUTPUT);
  242.         digitalWrite(leftOUT, LOW);
  243.       }
  244.       else
  245.       {
  246.         pinMode(leftOUT, INPUT);
  247.       }
  248.  
  249.     }
  250.     else
  251.     {
  252.      pinMode(leftOUT, OUTPUT);
  253.         digitalWrite(leftOUT, LOW);
  254.       }
  255.   }
  256.  
  257.  
  258.   if (leftRead) {
  259.     leftPreviousState = LOW;
  260.     pinMode(leftOUT, INPUT);
  261.    
  262.  
  263.   }
  264.   if (!rightRead) {
  265.     if (!rightPreviousState) {
  266.       rightPreviousMillis = currentMillis;
  267.       rightPreviousState = HIGH;
  268.     }
  269.     if (!leftRead) {
  270.       if (rightPreviousMillis > leftPreviousMillis) {
  271.        pinMode(rightOUT, OUTPUT);
  272.         digitalWrite(rightOUT, LOW);
  273.       }
  274.       else
  275.       {
  276.         pinMode(rightOUT, INPUT);
  277.       }
  278.  
  279.     }
  280.     else
  281.     {
  282.       pinMode(rightOUT, OUTPUT);
  283.       digitalWrite(rightOUT, LOW);
  284.     }
  285.   }
  286.  
  287.  
  288.   if (rightRead) {
  289.     rightPreviousState = LOW;
  290.     pinMode(rightOUT, INPUT);
  291.  
  292.   }
  293.  
  294. }
  295.  
  296. void outputLASTCOMMANDnSODC() {
  297.  
  298.   if (!upRead)
  299.   {
  300.     pinMode(downOUT, INPUT);
  301.     pinMode(upOUT, OUTPUT);
  302.     digitalWrite(upOUT, LOW);
  303.   }
  304.   else if (!downRead)
  305.   {
  306.     {
  307.       pinMode(downOUT, OUTPUT);
  308.       digitalWrite(downOUT, LOW);
  309.       pinMode(upOUT, INPUT);
  310.     }
  311.   }
  312.   else
  313.   {
  314.     pinMode(upOUT, INPUT);
  315.     pinMode(downOUT, INPUT);
  316.   }
  317.  
  318.  
  319.  if (!leftRead) {
  320.     if (!leftPreviousState) {
  321.       leftPreviousMillis = currentMillis;
  322.       leftPreviousState = HIGH;
  323.     }
  324.     if (!rightRead) {
  325.       if (leftPreviousMillis > rightPreviousMillis) {
  326.        
  327.         pinMode(leftOUT, OUTPUT);
  328.         digitalWrite(leftOUT, LOW);
  329.       }
  330.       else
  331.       {
  332.         pinMode(leftOUT, INPUT);
  333.       }
  334.  
  335.     }
  336.     else
  337.     {
  338.      pinMode(leftOUT, OUTPUT);
  339.         digitalWrite(leftOUT, LOW);
  340.       }
  341.   }
  342.  
  343.  
  344.   if (leftRead) {
  345.     leftPreviousState = LOW;
  346.     pinMode(leftOUT, INPUT);
  347.    
  348.  
  349.   }
  350.   if (!rightRead) {
  351.     if (!rightPreviousState) {
  352.       rightPreviousMillis = currentMillis;
  353.       rightPreviousState = HIGH;
  354.     }
  355.     if (!leftRead) {
  356.       if (rightPreviousMillis > leftPreviousMillis) {
  357.        pinMode(rightOUT, OUTPUT);
  358.         digitalWrite(rightOUT, LOW);
  359.       }
  360.       else
  361.       {
  362.         pinMode(rightOUT, INPUT);
  363.       }
  364.  
  365.     }
  366.     else
  367.     {
  368.       pinMode(rightOUT, OUTPUT);
  369.       digitalWrite(rightOUT, LOW);
  370.     }
  371.   }
  372.  
  373.  
  374.   if (rightRead) {
  375.     rightPreviousState = LOW;
  376.     pinMode(rightOUT, INPUT);
  377.  
  378.   }
  379.  
  380.  
  381. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement