Advertisement
Guest User

Untitled

a guest
Sep 9th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. int he_lvl[];
  2. int exp_lvl[];
  3. int s_lvl[];
  4. int door_state[];
  5.  
  6. s_lvl = {1, 5};
  7. he_lvl = { 2, 3, 4};
  8.  
  9. void setup() {
  10.   // put your setup code here, to run once:
  11.   // when floor button is selected, push that
  12. }
  13.  
  14. void loop() {
  15.   // put your main code here, to run repeatedly:
  16.   state_stop_closed () {
  17.     //you want to have a door closed and door open
  18.     //door closed will be negated in this state  
  19.   }
  20.   state_stope_open () {
  21.     //door closed and open state
  22.     //door open will be negated
  23.    
  24.   }
  25. }
  26.  
  27. #define SWITCH1 11
  28. #define SWITCH2 12
  29. #define SWITCH3 3
  30. #define SWITCH4 4
  31. #define SWITCH5 5
  32. #define LED1 6
  33. #define LED2 7
  34. #define LED3 8
  35. #define LED4 9
  36. #define LED5 10
  37. #define TOPFLOOR 5
  38. #define IDLELIMIT 10
  39. #define INTERVAL 2000L
  40.  
  41. enum direction { UP, DOWN, STOPPED }; // this is our main STATE enumeration
  42.  
  43. unsigned long previousMillis = 0;
  44. short currentFloor=0; // computers start counting at zero, unlike humans
  45. short floorSelected[TOPFLOOR]={0,0,0,0,0}; // array of buttons, initalized to not pressed
  46. enum direction elevatorDirection=STOPPED; // this is our STATE variable
  47. short moved;
  48. unsigned int idleCount=0;
  49.  
  50. void setup(){
  51. Serial.begin(115200);
  52. pinMode(SWITCH1, INPUT); // set pin to input
  53. digitalWrite(SWITCH1, HIGH); // turn on pullup resistor
  54. pinMode(SWITCH2, INPUT); // set pin to input
  55. digitalWrite(SWITCH2, HIGH); // turn on pullup resistor
  56. pinMode(SWITCH3, INPUT); // set pin to input
  57. digitalWrite(SWITCH3, HIGH); // turn on pullup resistor
  58. pinMode(SWITCH4, INPUT); // set pin to input
  59. digitalWrite(SWITCH4, HIGH); // turn on pullup resistor
  60. pinMode(SWITCH5, INPUT); // set pin to input
  61. digitalWrite(SWITCH5, HIGH); // turn on pullup resistor
  62.  
  63. pinMode(LED1, OUTPUT); // set pin to output
  64. digitalWrite(LED1, LOW); // turn LED off
  65. pinMode(LED2, OUTPUT); // set pin to output
  66. digitalWrite(LED2, LOW); // turn LED off
  67. pinMode(LED3, OUTPUT); // set pin to output
  68. digitalWrite(LED3, LOW); // turn LED off
  69. pinMode(LED4, OUTPUT); // set pin to output
  70. digitalWrite(LED4, LOW); // turn LED off
  71. pinMode(LED5, OUTPUT); // set pin to output
  72. digitalWrite(LED5, LOW); // turn LED off
  73. setLED(0);
  74. }
  75.  
  76. void printEnum(enum direction elevatorDirection){
  77. switch(elevatorDirection){
  78. case UP :
  79. Serial.print(“UP”);
  80. break;
  81. case DOWN :
  82. Serial.print(“DOWN”);
  83. break;
  84. case STOPPED :
  85. Serial.print(“STOPPED”);
  86. break;
  87. default :
  88. Serial.print(“Out of range!);
  89. }
  90. }
  91.  
  92. void setLED(short currentFloor){
  93. Serial.print(3 setting LED:);
  94. Serial.println(itoa(currentFloor+1,(char*)” “,10));
  95. digitalWrite(LED1,(currentFloor==0)?HIGH:LOW); // set LED on or off if currentFloor
  96. digitalWrite(LED2,(currentFloor==1)?HIGH:LOW); // set LED on or off if currentFloor
  97. digitalWrite(LED3,(currentFloor==2)?HIGH:LOW); // set LED on or off if currentFloor
  98. digitalWrite(LED4,(currentFloor==3)?HIGH:LOW); // set LED on or off if currentFloor
  99. digitalWrite(LED5,(currentFloor==4)?HIGH:LOW); // set LED on or off if currentFloor
  100. }
  101.  
  102. void openDoors(short currentFloor){
  103. unsigned long currentMillis;
  104. Serial.print(5 Open doors at floor:);
  105. Serial.println(itoa(currentFloor+1,(char*)” “,10));
  106. do {
  107. currentMillis = millis();
  108. delay(INTERVAL/10);
  109. setLED(-1);
  110. delay(INTERVAL/10);
  111. setLED(currentFloor);
  112. } while(currentMillis – previousMillis = INTERVAL) { // is it time to move?
  113. previousMillis = currentMillis; // save the time to have it for the next cycle
  114. moved=0; // we haven’t moved during this cycle yet
  115. switch(elevatorDirection){
  116. case UP : // we’re moving upwards
  117. if(currentFloor=0; i–){ // for each floor below us
  118. if(floorSelected[i]){ // check if selected
  119. setLED(–currentFloor); // move down one and set led for that floor
  120. moved=1; // we’ve not stopped yet
  121. break; // only move one floor per cycle
  122. }
  123. }
  124. if(floorSelected[currentFloor]){
  125. openDoors(currentFloor);
  126. floorSelected[currentFloor]=0; // we’ve arrived, clear the button
  127. }
  128. }
  129. break;
  130. case STOPPED :
  131. for(short i=0; icurrentFloor?UP:DOWN); //head towards that floor
  132. moved=1; // avoid stopping before we even moved
  133. break;
  134. }
  135. }
  136. }
  137. break;
  138. }
  139. if(!moved) elevatorDirection=STOPPED;
  140. else idleCount=0;
  141. if((elevatorDirection==STOPPED) && (currentFloor != 0)) idleCount++; // if stopped, count seconds
  142. if(idleCount>IDLELIMIT) { // once over the preset limit
  143. floorSelected[0]=1; // return to the ground floor
  144. idleCount=0;
  145. }
  146. Serial.print(2 elevatorDirection:);
  147. printEnum(elevatorDirection);
  148. Serial.print(” currentFloor:);
  149. Serial.print(itoa(currentFloor+1,(char*)” “,10));
  150. Serial.print(” buttons:);
  151. Serial.print(itoa(floorSelected[0],(char*)” “,10));
  152. Serial.print(itoa(floorSelected[1],(char*)” “,10));
  153. Serial.print(itoa(floorSelected[2],(char*)” “,10));
  154. Serial.print(itoa(floorSelected[3],(char*)” “,10));
  155. Serial.print(itoa(floorSelected[4],(char*)” “,10));
  156. Serial.print(” idleCount:);
  157. Serial.println(idleCount);
  158. }
  159. if(!digitalRead(SWITCH1)){ if(floorSelected[0]==0) Serial.println(“SWITCH1 pressed”); floorSelected[0]=1; } // read the buttons and adjust the floor if needed
  160. if(!digitalRead(SWITCH2)){ if(floorSelected[1]==0) Serial.println(“SWITCH2 pressed”); floorSelected[1]=1; }
  161. if(!digitalRead(SWITCH3)){ if(floorSelected[2]==0) Serial.println(“SWITCH3 pressed”); floorSelected[2]=1; }
  162. if(!digitalRead(SWITCH4)){ if(floorSelected[3]==0) Serial.println(“SWITCH4 pressed”); floorSelected[3]=1; }
  163. if(!digitalRead(SWITCH5)){ if(floorSelected[4]==0) Serial.println(“SWITCH5 pressed”); floorSelected[4]=1; }
  164. }
  165.  
  166. enum State_enum {STOP, FORWARD, ROTATE_RIGHT, ROTATE_LEFT};
  167. enum Sensors_enum {NONE, SENSOR_RIGHT, SENSOR_LEFT, BOTH};
  168.  
  169. void state_machine_run(uint8_t sensors);
  170. void motors_stop();
  171. void motors_forward();
  172. void motors_right();
  173. void motors_left();
  174. uint8_t read_IR();
  175.  
  176. uint8_t state = STOP;
  177.  
  178. void setup(){
  179. }
  180.  
  181. void loop(){
  182.   state_machine_run(read_IR());
  183.  
  184.   delay(10);
  185. }
  186.  
  187. void state_machine_run(uint8_t sensors)
  188. {
  189.   switch(state)
  190.   {
  191.     case STOP:
  192.       if(sensors == NONE){
  193.         motors_forward();
  194.         state = FORWARD;
  195.       }
  196.       else if(sensors == SENSOR_RIGHT){
  197.         motors_left();
  198.         state = ROTATE_LEFT;
  199.       }
  200.       else{
  201.         motors_right();
  202.         state = ROTATE_RIGHT;
  203.       }
  204.       break;
  205.        
  206.     case FORWARD:
  207.       if(sensors != NONE){
  208.         motors_stop();
  209.         state = STOP;
  210.       }
  211.       break;
  212.  
  213.     case ROTATE_RIGHT:
  214.       if(sensors == NONE || sensors == SENSOR_RIGHT){
  215.         motors_stop();
  216.         state = STOP;
  217.       }
  218.       break;
  219.  
  220.     case ROTATE_LEFT:
  221.       if(sensors != SENSOR_RIGHT)
  222.       {
  223.         motors_stop();
  224.         state = STOP;
  225.       }
  226.       break;
  227.   }
  228. }
  229.  
  230. void motors_stop()
  231. {
  232.   //code for stopping motors
  233. }
  234.  
  235. void motors_forward()
  236. {
  237.   //code for driving forward  
  238. }
  239.  
  240. void motors_right()
  241. {
  242.   //code for turning right
  243. }
  244.  
  245. void motors_left()
  246. {
  247.   //code for turning left
  248. }
  249.  
  250. uint8_t read_IR()
  251. {
  252.   //code for reading both sensors
  253. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement