Guest User

Untitled

a guest
Jan 9th, 2016
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.   Arduino Analoge Modelbaan Sturing Nieuwe versie
  3.   Copyright Paul Smits, 2016
  4.  
  5.   This sketch use the AT Mega 2650 processorboard
  6.  
  7.   Warning!!! This sketch work only on the AT Mega 2650
  8.  
  9.   This Programm use the AAMS Library
  10.  
  11.   This code is public domain, enjoy!
  12. */
  13.  
  14. #include <AAMS.h>
  15. #include <Wire.h>
  16. #include <LCD.h>               // library voor een standaard LCD display.
  17. #include <LiquidCrystal_I2C.h> // library voor 12c LCD display
  18.  
  19. /***** Global vars ***********************************************/
  20. // Define I2C Address where the PCF8574A is
  21.  
  22. #define BACKLIGHT_PIN     3 // zet de backlight pen op 3
  23.  
  24. LiquidCrystal_I2C   lcd(0x27, 2, 1, 0, 4, 5, 6, 7); // adressering lcd display
  25.  
  26. AAMS set_Motor_1(1, MOTOR12_64KHZ);
  27. AAMS set_Motor_2(2, MOTOR12_64KHZ);
  28. AAMS set_Motor_3(3, MOTOR34_64KHZ);
  29. AAMS set_Motor_4(4, MOTOR34_64KHZ);
  30.  
  31. // Digitale pinnen benoemen.
  32. byte BlokPins[] = {22, 23, 24, 25, 26, 27 , 28, 29};// Acht blokken
  33. byte WisselPins[] = {30, 31, 32, 33, 34, 35, 36, 37};// Vier wissels
  34. byte SeinPins [] = { 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53};// Acht seinen.
  35.  
  36. // Analoge pinnen benoemen
  37. byte SensorPins[] = {A8, A9, A10, A11, A12, A13, A14, A15};//Acht sensoren
  38.  
  39. // Blok toestand
  40. byte Vrij = LOW;
  41. byte Bezet = HIGH;
  42.  
  43. //Wisselstand
  44. byte Rechtdoor = LOW;
  45. byte Afbuigen = HIGH;
  46.  
  47. // Adresering Seinen
  48. byte Sein1g = 40;
  49. byte Sein1r = 41;
  50. byte Sein2r = 42;
  51. byte Sein2g = 43;
  52. byte Sein3g = 44;
  53. byte Sein3r = 45;
  54. byte Sein4r = 46;
  55. byte Sein4g = 47;
  56.  
  57. // Adresering Sensoren
  58. byte Sensor1 = A8;
  59. byte Sensor2 = A9;
  60. byte Sensor3 = A10;
  61. byte Sensor4 = A11;
  62.  
  63. boolean IgnoreSensor1 = false;
  64. boolean IgnoreSensor2 = false;
  65.  
  66. //-----------------------------------------------------------------------------
  67. void setup() {
  68.  
  69.   // put your setup code here, to run once:
  70.  
  71.   lcd.begin (16, 2);  // stelt de lcd driver in op 16 characters en twee regels.
  72.   // lcd.begin(20,4); // Stelt de lcd driver in op 20 characters en vier regels.
  73.  
  74.   // set de backlight van het lcd display aan.
  75.  
  76.   lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
  77.   lcd.setBacklight(HIGH);
  78.   lcd.home (); // Ga naar de boventse regel en het eerste character.
  79.  
  80.   // Zet het onderstaande tekst op het lcd display
  81.  
  82.   lcd.setCursor(0, 0); // zet de cursor op het eerste character op de eerste regel
  83.   lcd.print("ArduinoMega 2650");
  84.   lcd.setCursor(1, 1);
  85.   lcd.print("L293 AAMS V1.0"); // Max Ampere is 600 mA per output.
  86.  
  87.   //**************************************************************
  88.   // Stelt alle pins in die gebruikt worden als input of output.
  89.   // BlokPins instellen en de toestand instellen.
  90.  
  91.   for (byte i = 0; i < sizeof(BlokPins); i++) {
  92.     pinMode(BlokPins[i], OUTPUT);
  93.   }
  94.   for (byte i = 0; i < sizeof(BlokPins); i++) {
  95.     digitalWrite(BlokPins[i], HIGH);
  96.   }
  97.  
  98.   // WisselPins instellen.
  99.  
  100.   for (byte i = 0; i < sizeof(WisselPins); i++) {
  101.     pinMode(WisselPins[i], OUTPUT);
  102.   }
  103.  
  104.   // SeinPins instellen.
  105.  
  106.   for (byte i = 0; i < sizeof(SeinPins); i++) {
  107.     pinMode(SeinPins[i], OUTPUT);
  108.   }
  109.   for (byte i = 0; i < sizeof(SeinPins); i++) {
  110.     digitalWrite(SeinPins[i], LOW);
  111.   }
  112.  
  113.   // Sensor pins instellen.
  114.  
  115.   for (byte i = 0; i < sizeof(SensorPins); i++) {
  116.     pinMode(SensorPins[i], INPUT);
  117.   }
  118.  
  119.   // Einde instellingen poorten
  120.   //*****************************************************************
  121.   Serial.begin(9600); // open een serial verbinding op 9600 baud.
  122.   Serial.println("Arduino analoge modelbaan sturing: Motorsturingen en blok sturingen");
  123.  
  124.   // turn on motor
  125.  
  126.   set_Motor_1.setSpeed(250);
  127.   set_Motor_2.setSpeed(250);
  128.   set_Motor_3.setSpeed(200);
  129.   set_Motor_4.setSpeed(250);
  130.  
  131.   set_Motor_1.run(RELEASE);
  132.   set_Motor_2.run(RELEASE);
  133.   set_Motor_3.run(RELEASE);
  134.   set_Motor_4.run(RELEASE);
  135.  
  136.   digitalWrite(Sein1g, 0);
  137.   digitalWrite(Sein1r, 1);
  138.   digitalWrite(Sein2r, 1);
  139.   digitalWrite(Sein2g, 0);
  140. }
  141.  
  142. //------------------------------------------------------------
  143. void loop() {
  144.  
  145.   // put your main code here, to run repeatedly:
  146.  
  147.   checkIngekomenSerial();
  148.  
  149.   blok1Bezet();
  150.   //blok2Bezet();
  151.  
  152. }
  153.  
  154. //------------------------------------------------------------
  155. void blok1Bezet()
  156. {
  157.  
  158.   byte Sensor1Waarde = analogRead(Sensor1);
  159.   byte Sensor2Waarde = analogRead(Sensor2);
  160.  
  161.   if ((Sensor1Waarde <= 60) && (Sensor2Waarde <= 60)) {
  162.  
  163.     Motor3Stop();
  164.  
  165.   }
  166. }
  167.  
  168. //-----------------------------------------------------------
  169. void blok2Bezet()
  170. {
  171.  
  172.   byte Sensor1Waarde = analogRead(Sensor1);
  173.   byte Sensor2Waarde = analogRead(Sensor2);
  174.  
  175.   if ((Sensor2Waarde <= 60) && (Sensor1Waarde <= 60)) {
  176.  
  177.     Motor3Stop();
  178.  
  179.   }
  180. }
  181.  
  182. //-------------------------------------------------------------
  183. void Motor1_BACKWARD()
  184. {
  185.  
  186.   uint8_t i;
  187.  
  188.   Serial.println("Achteruit met de trein");
  189.  
  190.   set_Motor_1.run(BACKWARD);
  191.  
  192.   for (i = 0; i < 200; i++) {
  193.     set_Motor_1.setSpeed(i);
  194.     delay(10);
  195.   }
  196. }
  197. //----------------------------------------------------
  198. void Motor1_FORWARD()
  199. {
  200.  
  201.   uint8_t i;
  202.  
  203.   Serial.println("Vooruit met de trein");
  204.  
  205.   set_Motor_1.run(FORWARD);
  206.  
  207.  
  208.   for (i = 0; i < 200; i++) {
  209.     set_Motor_1.setSpeed(i);
  210.     delay(10);
  211.   }
  212. }
  213.  
  214. //----------------------------------------------------------
  215. void Motor2_BACKWARD()
  216. {
  217.  
  218.   uint8_t i;
  219.  
  220.   Serial.println("Achteruit met de trein");
  221.  
  222.   set_Motor_2.run(BACKWARD);
  223.  
  224.   for (i = 0; i < 200; i++) {
  225.     set_Motor_2.setSpeed(i);
  226.     delay(10);
  227.   }
  228. }
  229.  
  230. //-----------------------------------------------------------
  231. void Motor2_FORWARD()
  232. {
  233.  
  234.   uint8_t i;
  235.  
  236.   Serial.println("Vooruit met de trein");
  237.  
  238.   lcd.setCursor(1, 1);
  239.   lcd.print("Vooruit trein_1");
  240.  
  241.   set_Motor_2.run(FORWARD);
  242.  
  243.  
  244.   for (i = 0; i < 200; i++) {
  245.     set_Motor_2.setSpeed(i);
  246.     delay(20);
  247.   }
  248. }
  249.  
  250. //-------------------------------------------------------------
  251. void Motor3_BACKWARD()
  252. {
  253.  
  254.   uint8_t i;
  255.  
  256.   Serial.println("Achteruit met de trein");
  257.  
  258.   lcd.setCursor(0, 1);
  259.   lcd.print(" Trein 3 >>   ");
  260.  
  261.   set_Motor_3.run(FORWARD);
  262.  
  263.   for (i = 0; i < 200; i++) {
  264.     set_Motor_3.setSpeed(i);
  265.     delay(20);
  266.  
  267.     lcd.setCursor(13, 1);
  268.     lcd.print(i);
  269.  
  270.   }
  271. }
  272.  
  273. //-------------------------------------------------------------
  274. void Motor3_FORWARD()
  275. {
  276.  
  277.   uint8_t i;
  278.  
  279.   Serial.println("Vooruit met de trein");
  280.  
  281.   lcd.setCursor(0, 1);
  282.   lcd.print(" Trein 3 <<   ");
  283.  
  284.   set_Motor_3.run(BACKWARD);
  285.  
  286.  
  287.   for (i = 0; i < 200; i++) {
  288.     set_Motor_3.setSpeed(i);
  289.     delay(15);
  290.  
  291.     lcd.setCursor(13, 1);
  292.     lcd.print(i);
  293.  
  294.   }
  295. }
  296.  
  297. //-------------------------------------------------
  298. void Motor3_Stop()
  299. {
  300.   uint8_t i;
  301.  
  302.   Serial.println("Stoppen met de trein");
  303.  
  304.   lcd.setCursor(0, 1);
  305.   lcd.print(" Trein 3 ||  ");
  306.  
  307.   for (i = 200; i != 0; i--) {
  308.     set_Motor_3.setSpeed(i);
  309.     delay(5);
  310.  
  311.     lcd.setCursor(13, 1);
  312.     lcd.print(i);
  313.  
  314.   }
  315.   set_Motor_3.run(RELEASE);
  316. }
  317. //--------------------------------------------------
  318.  
  319. void Motor4_BACKWARD()
  320. {
  321.   uint8_t i;
  322.  
  323.   Serial.println("Achteruit met de trein");
  324.  
  325.   set_Motor_4.run(BACKWARD);
  326.  
  327.   for (i = 0; i < 200; i++) {
  328.     set_Motor_4.setSpeed(i);
  329.     delay(10);
  330.   }
  331. }
  332. //----------------------------------------------------
  333. void Motor4_FORWARD()
  334. {
  335.  
  336.   uint8_t i;
  337.  
  338.   Serial.println("Vooruit met de trein");
  339.  
  340.   set_Motor_4.run(FORWARD);
  341.  
  342.   for (i = 0; i < 200; i++) {
  343.     set_Motor_4.setSpeed(i);
  344.     delay(10);
  345.   }
  346. }
  347.  
  348. //-------------------------------------------------
  349. void Motor4_Stop()
  350. {
  351.   uint8_t i;
  352.  
  353.   Serial.println("Stoppen met de trein");
  354.  
  355.   lcd.setCursor(0, 1);
  356.   lcd.print(" Trein 4 ||  ");
  357.  
  358.   for (i = 250; i != 0; i--) {
  359.     set_Motor_4.setSpeed(i);
  360.     delay(10);
  361.  
  362.     lcd.setCursor(13, 1);
  363.     lcd.print(i);
  364.  
  365.   }
  366.   set_Motor_4.run(RELEASE);
  367. }
  368. //-----------------------------------------------------
  369. void Motor3Stop()
  370. {
  371.  
  372.   digitalWrite(Sein1g, 0);
  373.   digitalWrite(Sein1r, 1);
  374.   digitalWrite(Sein2r, 1);
  375.   digitalWrite(Sein2g, 0);
  376.  
  377.   Motor3_Stop();
  378.  
  379.   setBlok(1, 1);
  380.  
  381.   lcd.setCursor(13, 1);
  382.   lcd.print("   ");
  383. }
  384.  
  385. //-------------------------------------------------------
  386. void Motor4Stop()
  387. {
  388.  
  389.   digitalWrite(Sein1g, 1);
  390.   digitalWrite(Sein1r, 0);
  391.   digitalWrite(Sein2r, 0);
  392.   digitalWrite(Sein2g, 1);
  393.  
  394.   Motor4_Stop();
  395.  
  396.   setBlok(1, 1);
  397.  
  398.   lcd.setCursor(13, 1);
  399.   lcd.print("   ");
  400. }
  401. //---------------------------------------------------------------
  402. void checkIngekomenSerial() {
  403.   // Ga dan uit dat de serial commando's eruit zien als
  404.   // [commando letter] [adres]
  405.   // Waarbij ieder [] één byte is. Dus geen adressen in ASCII zenden ;)
  406.   if (Serial.available() >= 2) {
  407.  
  408.     switch (Serial.read()) {
  409.  
  410.       case 'W':
  411.         //Schakel een wissel recht
  412.         //Ga even uit dat de functie schakeWissel(wisselnummer, richting) bestaat
  413.         //schakelWissel(Serial.read(), RECHT);
  414.         setWissel(1, 0);
  415.         break;
  416.  
  417.       //schakel een wissel afbuigend
  418.       case 'w':
  419.         //schakelWissel(Serial.read(), AFBUIGEN);
  420.         setWissel (1, 1);
  421.         break;
  422.  
  423.       //Zet de richting van de motor
  424.       case '.':
  425.  
  426.         digitalWrite(Sein1g, 1);
  427.         digitalWrite(Sein1r, 0);
  428.         digitalWrite(Sein2r, 1);
  429.         digitalWrite(Sein2g, 0);
  430.  
  431.         setBlok(1, 0);
  432.  
  433.         Motor3_BACKWARD();
  434.         break;
  435.  
  436.       case ',':
  437.  
  438.         digitalWrite(Sein1g, 0);
  439.         digitalWrite(Sein1r, 1);
  440.         digitalWrite(Sein2r, 0);
  441.         digitalWrite(Sein2g, 1);
  442.  
  443.         setBlok(1, 0);
  444.  
  445.         Motor3_FORWARD();
  446.  
  447.         break;
  448.  
  449.       case 's':
  450.  
  451.         Motor3Stop();
  452.  
  453.         break;
  454.  
  455.  
  456.     }
  457.   }
  458. }
  459. //---------------------------------------------------------------
  460. void setWissel(byte wisnr, byte wisstand)
  461. { // Begin subroutine setWissel
  462.  
  463.   if (wisnr == 1) {
  464.     if (wisstand == 0) {
  465.  
  466.       lcd.setCursor(0, 1);
  467.       lcd.print("  | Wissel 1 |  ");
  468.     }
  469.   }
  470.  
  471.   if (wisnr == 1) {
  472.     if (wisstand == 1) {
  473.       lcd.setCursor(0, 1);
  474.       lcd.print("  / Wissel 1  /  ");
  475.     }
  476.   }
  477. } // Einde sunroutine setWissel
  478.  
  479. void setBlok(byte blknr, byte blkstatus)
  480. { // Begin subroutine setBlok.
  481.  
  482.   if (blknr == 1) {
  483.     if (blkstatus == 0) {
  484.  
  485.       lcd.setCursor(0, 0);
  486.       lcd.print("  Blok 1 Vrij   ");
  487.  
  488.       digitalWrite(22, 0); // Blok 1 Vrij
  489.       digitalWrite(23, 1); // Blok 2 Bezet
  490.       digitalWrite(24, 0); // Blok 3 Vrij
  491.       digitalWrite(25, 0); // Blok 4 Vrij
  492.       digitalWrite(26, 0); // Blok 5 Vrij
  493.       digitalWrite(27, 0); // Blok 6 Vrij
  494.       digitalWrite(28, 0); // Blok 7 Vrij
  495.       digitalWrite(29, 1); // Blok 8 Bezet
  496.     }
  497.   }
  498.   if (blknr == 1) {
  499.     if (blkstatus == 1) {
  500.  
  501.       lcd.setCursor(0, 0);
  502.       lcd.print("  Blok 1 Bezet  ");
  503.  
  504.       digitalWrite(22, 1); // Blok 1 Bezet
  505.       digitalWrite(23, 0); // Blok 2 Vrij
  506.       digitalWrite(24, 0); // Blok 3 Vrij
  507.       digitalWrite(25, 0); // Blok 4 Vrij
  508.       digitalWrite(26, 0); // Blok 5 Vrij
  509.       digitalWrite(27, 0); // Blok 6 Vrij
  510.       digitalWrite(28, 0); // Blok 7 Vrij
  511.       digitalWrite(29, 1); // Blok 8 Bezet
  512.  
  513.     }
  514.   }
  515. } // Einde routine setBlok
Advertisement
Add Comment
Please, Sign In to add comment