Lukas4186

Untitled

Jun 28th, 2014
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.69 KB | None | 0 0
  1.  
  2. /* -------------------------------------------
  3. /* Befehle:
  4. /* 0-10 --> Länge des HIGH-Signals in ms*10
  5. /* Langsam nach schnell: 1,2,3,4,5,6,7,8,9
  6. /* 0 fuer STOP
  7.  ------------------------------------------- */
  8.  
  9. // PINs
  10. #include <LiquidCrystal.h>
  11. #define PIN_BLAU 6
  12. #define INTERRUPT_GELB 0  // Interrupt 0 == Pin 2
  13. #define UPDATE_ZYKLUS 1000 // Jede Sekunde 1 ms Ausgabe der Geschwindigkeit.
  14. const int ANZAHL_INTERRUPTS = 1; // Anzahl der Interrupts pro Umdrehung (1 oder 2)
  15. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
  16.  
  17. // Variablen
  18. int counter_rpm = 0;
  19. int rpm = 0;
  20. unsigned long letzte_ausgabe = 0;
  21. char eingabe;
  22. int dauer_low = 1;
  23. int dauer_high = 9;
  24. int baseTime = 10; // Insgesamt 10 ms
  25. int userRPM = 10; // Diese Drehzahl wird beim einschalten als Standardwert genutzt
  26. int highKey = 6;   // Taster verbunden mit dem digitalen Pin X
  27. int lowKey = 7;   // Taster verbunden mit dem digitalen Pin Y
  28.  
  29.  
  30. void setup()
  31. {
  32.   // Initialisieren
  33.   Serial.begin(9600);
  34.   pinMode(PIN_BLAU, OUTPUT);
  35.   attachInterrupt(INTERRUPT_GELB, rpm_fan, FALLING);
  36.   lcd.begin(16, 2);
  37.   pinMode(highKey, INPUT);
  38.   pinMode(lowKey, INPUT);
  39. }
  40.  
  41. void loop(){
  42.  
  43.   if(dauer_low != 0){
  44.     digitalWrite(PIN_BLAU, LOW);
  45.     delayMicroseconds(dauer_low);
  46.   }
  47.  
  48.   if(dauer_high != 0){
  49.     digitalWrite(PIN_BLAU, HIGH);
  50.     delayMicroseconds(dauer_high);
  51.   }
  52.  
  53.   if (Serial.available()){
  54.     eingabe = Serial.read() - 48; // ASCII 0-9 lesen
  55.     if(eingabe == 0)
  56.       eingabe = 10;
  57.     else
  58.       eingabe = 10 - eingabe;
  59.  
  60.     dauer_low = eingabe;
  61.     dauer_high = baseTime - eingabe;
  62.     Serial.print("Dauer des HIGH: ");
  63.     Serial.println(dauer_high);
  64.   }
  65.  
  66.   if (millis() - letzte_ausgabe == UPDATE_ZYKLUS){
  67.     // Interrupt deaktivieren um das rechnen nicht zu unterbrechen.
  68.     detachInterrupt(0);
  69.  
  70.     // RPM errechnen und ausgeben:
  71.     rpm = counter_rpm * (60 / ANZAHL_INTERRUPTS);
  72.     Serial.print("RPM: ");
  73.     Serial.println(rpm);
  74.     lcd.clear();
  75.     lcd.setCursor(0 ,1);
  76.     lcd.write("RPM: ");
  77.     lcd.write(rpm);
  78.  
  79.     // Counter zuruecksetzen
  80.     counter_rpm = 0;
  81.  
  82.     // Zeitpunkt setzen
  83.     letzte_ausgabe = millis();
  84.  
  85.     // Interrupt wieder aktivieren
  86.     attachInterrupt(0, rpm_fan, FALLING);
  87.   }
  88. }
  89.  
  90. {
  91.   if(digitalRead(inPin) == 1){          // Wenn Taste highKey gedrückt wird, Drezahl um 100 erhöhen
  92.         userRPM = userRPM + 100;
  93.   }
  94.   if(digitalRead(lowKey) == 1){         // Wenn Taste lowKey gedrückt wird, Drezahl um 100 verringern
  95.         userRPM = userRPM - 100;
  96.   }
  97.  
  98.   return userRPM;       // gibt einen Rückgabewert über rpm_key() zurück
  99. }  
  100.  
  101. // Interrupt zaehlt den RPM-Counter hoch
  102. void rpm_fan(){
  103.   counter_rpm++;
  104. int rpm_key()
  105.  
  106. }
Advertisement
Add Comment
Please, Sign In to add comment