Lukas4186

Untitled

Jun 28th, 2014
196
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.  
  42. void loop(){
  43.  
  44.   if(dauer_low != 0){
  45.     digitalWrite(PIN_BLAU, LOW);
  46.     delayMicroseconds(dauer_low);
  47.   }
  48.  
  49.   if(dauer_high != 0){
  50.     digitalWrite(PIN_BLAU, HIGH);
  51.     delayMicroseconds(dauer_high);
  52.   }
  53.  
  54.   if (Serial.available()){
  55.     eingabe = Serial.read() - 48; // ASCII 0-9 lesen
  56.     if(eingabe == 0)
  57.       eingabe = 10;
  58.     else
  59.       eingabe = 10 - eingabe;
  60.  
  61.     dauer_low = eingabe;
  62.     dauer_high = baseTime - eingabe;
  63.     Serial.print("Dauer des HIGH: ");
  64.     Serial.println(dauer_high);
  65.   }
  66.  
  67.   if (millis() - letzte_ausgabe == UPDATE_ZYKLUS){
  68.     // Interrupt deaktivieren um das rechnen nicht zu unterbrechen.
  69.     detachInterrupt(0);
  70.  
  71.     // RPM errechnen und ausgeben:
  72.     rpm = counter_rpm * (60 / ANZAHL_INTERRUPTS);
  73.     Serial.print("RPM: ");
  74.     Serial.println(rpm);
  75.     lcd.clear();
  76.     lcd.setCursor(0 ,1);
  77.     lcd.write("RPM: ");
  78.     lcd.write(rpm);
  79.  
  80.     // Counter zuruecksetzen
  81.     counter_rpm = 0;
  82.  
  83.     // Zeitpunkt setzen
  84.     letzte_ausgabe = millis();
  85.  
  86.     // Interrupt wieder aktivieren
  87.     attachInterrupt(0, rpm_fan, FALLING);
  88.   }
  89. }
  90.  
  91. {
  92.   if(digitalRead(inPin) == 1){          // Wenn Taste highKey gedrückt wird, Drezahl um 100 erhöhen
  93.         userRPM = userRPM + 100;
  94.   }
  95.   if(digitalRead(lowKey) == 1){         // Wenn Taste lowKey gedrückt wird, Drezahl um 100 verringern
  96.         userRPM = userRPM - 100;
  97.   }
  98.  
  99.   return userRPM;       // gibt einen Rückgabewert über rpm_key() zurück
  100. }  
  101.  
  102. // Interrupt zaehlt den RPM-Counter hoch
  103. void rpm_fan(){
  104.   counter_rpm++;
  105. int rpm_key()
  106.  
  107. }
Advertisement
Add Comment
Please, Sign In to add comment