Advertisement
arduino-uno

ohne Display drehzahlabhängig schalten

Mar 27th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.33 KB | None | 0 0
  1.  
  2. const int Eingang = 2; // Pin 2 ist Eingang für Sensor
  3.  
  4. const int SchalterVor = 13;
  5. const int SchalterRueck = 10 ;
  6. const int RelaisVor = 3;
  7. const int RelaisRueck = 11;
  8.  
  9. int vor;
  10. int rueck;
  11. int rVor;
  12. int rRueck;
  13. int GeschwindigkeitOk;
  14.  
  15. void setup() {
  16. pinMode(Eingang, INPUT); // Eingangspin auf Eingang stellen
  17. digitalWrite(Eingang, HIGH); // und Pullup-Widerstand einschalten
  18.  
  19.  
  20. attachInterrupt(0, readmicros, RISING ); // Interrupt 0 auf Routine readmillis setzen
  21. // reagiert auf steigende Flanken an Pin 2
  22.  
  23. pinMode(RelaisVor, OUTPUT);
  24. pinMode(SchalterVor, INPUT);
  25. pinMode(RelaisRueck, OUTPUT);
  26. pinMode(SchalterRueck, INPUT);
  27.  
  28.  
  29. }
  30. // ein paar variablen definieren
  31. volatile unsigned long dauer=0; // microsekunden seit dem letzten Interrupt
  32. volatile unsigned long last=0; // Zählerwert beim letzten Interrupt
  33. long drehzahl; // selbstredend
  34. char buf[17]; // Pufferstring für sprintf
  35. void loop() { //ist die Geschwindigkeit ok, dann soll wenn entweder der Vorwärts- oder der Rückwärtsgang
  36. //drin ist, das jeweilige Relais anziehen. Fällt der jeweilige Schalter für die Fahrtrichtung
  37. //ab, soll auch da jeweilie Relais abfallen.
  38.  
  39.  
  40. if (drehzahl <= 80) // auf gewünschte drehzahl einstellen,
  41. // bei der noch geschaltet werden darf
  42. {
  43. GeschwindigkeitOk = HIGH;
  44. }
  45. if (drehzahl >= 86)
  46. {
  47. GeschwindigkeitOk = LOW;
  48. }
  49.  
  50. vor = digitalRead(SchalterVor); // Schalter fürs vorwärtsfahren
  51. if (vor == LOW)
  52. {
  53. digitalWrite (RelaisVor, HIGH); // RelaisVor soll aus sein!!
  54.  
  55. }
  56. if (vor==HIGH && GeschwindigkeitOk==HIGH && rueck!=HIGH)
  57. {
  58. rVor = LOW;
  59. digitalWrite(RelaisVor, rVor); // RelaisVor soll an sein!!
  60. }
  61. rueck = digitalRead(SchalterRueck); // Schalter fürs rückwärtsfahren
  62. if (rueck == LOW)
  63. {
  64. digitalWrite (RelaisRueck, HIGH); // RelaisRueck soll aus sein!!
  65.  
  66. }
  67. if (rueck==HIGH && GeschwindigkeitOk==HIGH && vor!=HIGH)
  68. {
  69. rRueck = LOW;
  70. digitalWrite(RelaisRueck, rRueck); //RelaisRueck soll an sein!!
  71. }
  72. drehzahl = 60000000 / 32 / dauer ; // Drehzahl ausrechnen und (32 Zähne)
  73.  
  74. }
  75. void readmicros() { // Interrupt-Routine
  76. detachInterrupt(0); // Interrupt ausschalten damit er uns nicht beißt
  77. unsigned long m = micros(); // Microsekundenzähler auslesen
  78. unsigned long v = m - last; // Differenz zum letzten Durchlauf berechnen
  79. if (v > 5000) { // ignorieren wenn <= 5ms (Kontaktpreller)
  80. dauer = v; // Wert in dauer übernehmen
  81. last = m; // und wieder den letzten Wert merken
  82. }
  83. attachInterrupt(0, readmicros, RISING ); // Interrupt wieder einschalten.
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement