• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Obrotomierz z limitem
#4
Kod:
if (rpm > 7000)
{
digitalWrite(7, HIGH);
}
else
{
digitalWrite(7, LOW);

tak ma wyglądać wielkosc liter ma znaczenie pyzatym umieść to w jakieś fukci a nie poza pętlami

po drugie warunek if ma postać w przypadku tylko równości:
if(a==b){}


Kod:
#include<ShiftLCD.h>

ShiftLCD lcd(8 ,10 , 9);    // DEFINE LCD PINS

volatile byte REV;       //  VOLATILE DATA TYPE TO STORE REVOLUTIONS

unsigned long int rpm, maxRPM;  //  DEFINE RPM AND MAXIMUM RPM

unsigned long time;         //  DEFINE TIME TAKEN TO COVER ONE REVOLUTION

int ledPin = 12;           //   STATUS LED

int led = 0,RPMlen , prevRPM;  //  INTEGERS TO STORE LED VALUE AND CURRENT RPM AND PREVIOUS RPM

int flag = 0;             //  A VARIABLE TO DETERMINE WHETHER THE LCD NEEDS TO BE CLEARED OR NOT

long prevtime = 0;       //  STORE IDLE TIME TO TOGGLE MENU
    
void setup()
{
     Serial.begin(9600);   // GET VALUES USING SERIAL MONITOR
    
     lcd.begin(16, 2);     // INITIATE LCD
    
     attachInterrupt(0, RPMCount, RISING);     //  ADD A HIGH PRIORITY ACTION ( AN INTERRUPT)  WHEN THE SENSOR GOES FROM LOW TO HIGH
    
     REV = 0;      //  START ALL THE VARIABLES FROM 0
    
     rpm = 0;
    
     time = 0;

     pinMode(7, OUTPUT);
    
     pinMode(ledPin, OUTPUT);
    
     pinMode(3, OUTPUT);          
    
     pinMode(4, OUTPUT);
    
     digitalWrite(3, HIGH);             //  VCC PIN FOR SENSOR
    
     digitalWrite(4, LOW);              // GND PIN FOR SENSOR
    
     lcd.print("TACHOMETER");           //   STARTUP TEXT
     lcd.setCursor(0, 1);
     lcd.print("- ELECTRO18");          //  THAT'S ME
     delay(2000);
     lcd.clear();
    
}

void loop()
{
  long currtime = millis();                 // GET CURRENT TIME
  
  long idletime = currtime - prevtime;        //  CALCULATE IDLE TIME
    
    if(REV >= 5 )                  //  IT WILL UPDATE AFETR EVERY 5 READINGS
   {
    
            
     if(flag==0)                     //  CLEAR THE LCD TO AVOID ANY GARBAGE TEXT
     {
       lcd.clear();
       lcd.print("SENSOR MEASURING");
       flag=1;                          //   AFTER FLAG = 1 , THE LOOP WILL NOT EXECUTE AGAIN
     }
    
     rpm = 30*1000/(millis() - time)*REV;       //  CALCULATE  RPM USING REVOLUTIONS AND ELAPSED TIME
    
     if(rpm > maxRPM)
     maxRPM = rpm;                             //  GET THE MAX RPM THROUGHOUT THE RUN
    
     time = millis();                            
    
     REV = 0;
    
     int x= rpm;                                //  CALCULATE NUMBER OF DIGITS IN RPM
     while(x!=0)
     {
       x = x/10;
       RPMlen++;
     }      
          
    
    
     if(RPMlen!=prevRPM)                             // IF THE RPM FALLS TO A LOWER NUMBER WITH LESS DIGITS , THE LCD WILL GET CLEARED
     {
       lcd.clear();
       prevRPM = RPMlen;
       flag=0;
       lcd.print("SENSOR MEASURING");
     }
    
     lcd.setCursor(0, 1);
     lcd.print(rpm,DEC);                        //  PRINT RPM IN DECIMAL SYSTEM
    
     lcd.setCursor(6,1);
     lcd.print("RPM");
     delay(500);
    
     prevtime = currtime;                        // RESET IDLETIME
    
   }
  
   if(idletime > 5000 )                      //  IF THERE ARE NO READING FOR 5 SEC , THE SCREEN WILL SHOW MAX RPM
   {
    
     if(flag==1)                            // CLEAR THE LCD
     {
       lcd.clear();
       flag=0;
     }
    
     lcd.clear();
     lcd.print("MAXIMUM RPM");
     lcd.setCursor(0, 1);
     lcd.print(maxRPM,DEC);                     // DISPLAY MAX RPM
     lcd.print("   RPM");
     delay(2000);
     lcd.clear();
     lcd.print("IDLE STATE");
     lcd.setCursor(0, 1);
     lcd.print("READY TO MEASURE");
     delay(2000);
     prevtime = currtime;
   }
    
}

void RPMCount()                                // EVERYTIME WHEN THE SENSOR GOES FROM LOW TO HIGH , THIS FUNCTION WILL BE INVOKED
{
   REV++;                                         // INCREASE REVOLUTIONS
  
   if (led == LOW)
   {
    
     led = HIGH;                                 //  TOGGLE STATUS LED
   }
  
   else
   {
     led = LOW;
   }
   digitalWrite(ledPin, led);


if (rpm > 7000)
{
digitalWrite(7, HIGH);
}
else
{
digitalWrite(7, LOW);
}}
//////////////////////////////////////////////////////////////  END OF THE PROGRAM  ///////////////////////////////////////////////////////////////////////
po umieszczeniu tego kodu myślę ze oto ci chodziło spróbuj teraz to skompilować
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
  


Wiadomości w tym wątku
Obrotomierz z limitem - przez bullseye - 28-03-2016, 01:02
RE: Obrotomierz z limitem - przez adix - 28-03-2016, 10:56
RE: Obrotomierz z limitem - przez bullseye - 28-03-2016, 11:32
RE: Obrotomierz z limitem - przez adix - 28-03-2016, 14:25
RE: Obrotomierz z limitem - przez bullseye - 28-03-2016, 15:13
RE: Obrotomierz z limitem - przez adix - 28-03-2016, 16:34
RE: Obrotomierz z limitem - przez bullseye - 28-03-2016, 17:16
RE: Obrotomierz z limitem - przez rocky59 - 08-01-2017, 12:12
RE: Obrotomierz z limitem - przez Lata - 08-01-2017, 21:56
RE: Obrotomierz z limitem - przez rocky59 - 11-01-2017, 20:55
RE: Obrotomierz z limitem - przez Lata - 12-01-2017, 21:35
RE: Obrotomierz z limitem - przez rocky59 - 16-01-2017, 12:33
RE: Obrotomierz z limitem - przez Lata - 16-01-2017, 13:06
RE: Obrotomierz z limitem - przez rocky59 - 18-01-2017, 00:18

Skocz do:


Przeglądający: 3 gości