Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* -------------------------------------------
- /* Befehle:
- /* 0-10 --> Länge des HIGH-Signals in ms*10
- /* Langsam nach schnell: 1,2,3,4,5,6,7,8,9
- /* 0 fuer STOP
- ------------------------------------------- */
- // PINs
- #include <LiquidCrystal.h>
- #define PIN_BLAU 6
- #define INTERRUPT_GELB 0 // Interrupt 0 == Pin 2
- #define UPDATE_ZYKLUS 1000 // Jede Sekunde 1 ms Ausgabe der Geschwindigkeit.
- const int ANZAHL_INTERRUPTS = 1; // Anzahl der Interrupts pro Umdrehung (1 oder 2)
- LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
- // Variablen
- int counter_rpm = 0;
- int rpm = 0;
- unsigned long letzte_ausgabe = 0;
- char eingabe;
- int dauer_low = 1;
- int dauer_high = 9;
- int baseTime = 10; // Insgesamt 10 ms
- int userRPM = 10; // Diese Drehzahl wird beim einschalten als Standardwert genutzt
- int highKey = 6; // Taster verbunden mit dem digitalen Pin X
- int lowKey = 7; // Taster verbunden mit dem digitalen Pin Y
- void setup()
- {
- // Initialisieren
- Serial.begin(9600);
- pinMode(PIN_BLAU, OUTPUT);
- attachInterrupt(INTERRUPT_GELB, rpm_fan, FALLING);
- lcd.begin(16, 2);
- pinMode(highKey, INPUT);
- pinMode(lowKey, INPUT);
- }
- void loop(){
- if(dauer_low != 0){
- digitalWrite(PIN_BLAU, LOW);
- delayMicroseconds(dauer_low);
- }
- if(dauer_high != 0){
- digitalWrite(PIN_BLAU, HIGH);
- delayMicroseconds(dauer_high);
- }
- if (Serial.available()){
- eingabe = Serial.read() - 48; // ASCII 0-9 lesen
- if(eingabe == 0)
- eingabe = 10;
- else
- eingabe = 10 - eingabe;
- dauer_low = eingabe;
- dauer_high = baseTime - eingabe;
- Serial.print("Dauer des HIGH: ");
- Serial.println(dauer_high);
- }
- if (millis() - letzte_ausgabe == UPDATE_ZYKLUS){
- // Interrupt deaktivieren um das rechnen nicht zu unterbrechen.
- detachInterrupt(0);
- // RPM errechnen und ausgeben:
- rpm = counter_rpm * (60 / ANZAHL_INTERRUPTS);
- Serial.print("RPM: ");
- Serial.println(rpm);
- lcd.clear();
- lcd.setCursor(0 ,1);
- lcd.write("RPM: ");
- lcd.write(rpm);
- // Counter zuruecksetzen
- counter_rpm = 0;
- // Zeitpunkt setzen
- letzte_ausgabe = millis();
- // Interrupt wieder aktivieren
- attachInterrupt(0, rpm_fan, FALLING);
- }
- }
- {
- if(digitalRead(inPin) == 1){ // Wenn Taste highKey gedrückt wird, Drezahl um 100 erhöhen
- userRPM = userRPM + 100;
- }
- if(digitalRead(lowKey) == 1){ // Wenn Taste lowKey gedrückt wird, Drezahl um 100 verringern
- userRPM = userRPM - 100;
- }
- return userRPM; // gibt einen Rückgabewert über rpm_key() zurück
- }
- // Interrupt zaehlt den RPM-Counter hoch
- void rpm_fan(){
- counter_rpm++;
- int rpm_key()
- }
Advertisement
Add Comment
Please, Sign In to add comment