//use only 4 char titles (should be changed soon)
void generic_dual_display (char title1[ ], long high1, long cur_value1, long peak1, long warn1, char title2[ ], long high2, long cur_value2, long peak2, long warn2){
 LCDSerial.print(0xFE, BYTE);  
 LCDSerial.print(128, BYTE);
  LCDSerial.print(title1);
  LCDSerial.print(" ");
  LCDSerial.print(cur_value1/10);
  LCDSerial.print(".");
  LCDSerial.print(cur_value1%10);
  int ndigits = numberofdigits(cur_value1) + 1;
  if (ndigits <= 2){ ndigits = ndigits + 1;}
  for (int i = 0; i < 5 - ndigits; i++) {
   LCDSerial.print(" "); 
  }
  LCDSerial.print("/");
  ndigits = numberofdigits(peak1) + 1;
  if (ndigits <= 2){ ndigits = ndigits + 1;}
  for (int i = 0; i < 6 - ndigits; i++){
   LCDSerial.print(" "); 
  }
  LCDSerial.print(peak1/10);
  LCDSerial.print(".");
  LCDSerial.print(peak1%10);
  if (cur_value1 > warn1){ //blink if warning threshold is met
    warn_flash();
  }
   LCDSerial.print(0xFE, BYTE);   
   LCDSerial.print(192, BYTE);  
  LCDSerial.print(title2);
  LCDSerial.print(" ");
  LCDSerial.print(cur_value2/10);
  LCDSerial.print(".");
  LCDSerial.print(cur_value2%10);
  ndigits = numberofdigits(cur_value2) + 1;
  if (ndigits <= 2){ ndigits = ndigits + 1;}
  for (int i = 0; i < 5 - ndigits; i++) {
   LCDSerial.print(" "); 
  }
  LCDSerial.print("/");
  ndigits = numberofdigits(peak2) + 1;
  if (ndigits <= 2){ ndigits = ndigits + 1;}
  for (int i = 0; i < 6 - ndigits; i++){
   LCDSerial.print(" "); 
  }
  LCDSerial.print(peak2/10);
  LCDSerial.print(".");
  LCDSerial.print(peak2%10);
  if (cur_value2 > warn2){ //blink if warning threshold is met
     warn_flash();
  }
  delay(60);
}
//positive only value 0 to X
//only 4 char titles (should be changed soon)
//1234567890123456
//TMP 134.5/ 314.5
//psi 14.5 /  14.5 
//oil 1.0  /   1.4
//oil 0.3  /   0.4
void generic_bar_display(char title[ ], long high, long cur_value, long peak, long hiWarn, long loWarn, boolean hiloswitch){
  int ndigits = 0;
  Serial.print(0xFE, BYTE);  
  Serial.print(128, BYTE);
  Serial.print(title);
  if( (hiloswitch == true) && (cur_value == 0) ){
   Serial.print("LOW ");
  } 
  if ( (hiloswitch == true) && (cur_value == 9999) ){
   Serial.print("HIGH "); 
  }
  else {
    Serial.print(" ");
    Serial.print(cur_value/10);
    Serial.print(".");
    Serial.print(cur_value%10);
    ndigits = numberofdigits(cur_value) + 1;
    if (ndigits <= 2){ ndigits = ndigits + 1;}
    for (int i = 0; i < 5 - ndigits; i++) {
     Serial.print(" "); 
    }
  }
  Serial.print("/");
  ndigits = numberofdigits(peak) + 1;
  if (ndigits <= 2){ ndigits = ndigits + 1;}
  for (int i = 0; i < 6 - ndigits; i++){
   Serial.print(" "); 
  }
  Serial.print(peak/10);
  Serial.print(".");
  Serial.print(peak%10);
  if ( (cur_value > hiWarn) || (cur_value < loWarn) ){ //blink if warning threshold is met
    warn_flash();
  }
   Serial.print(0xFE, BYTE);   
   Serial.print(192, BYTE);  
  unsigned long abar = high/16;
  unsigned long n_bars = cur_value/abar;
  if (cur_value <= 0){n_bars=0;}
  for(int i=1; i< n_bars; i++){ 
     Serial.print(0xFF, BYTE);
  }
  for (int i=1; i < (16 - n_bars); i++){
     Serial.print(" "); 
  }
  delay(100); //gauge refresh rate in ms
}
//positive only value 0 to X
//only 4 char titles (should be changed soon)
//1234567890123456
//TMP 134.5/ 314.5
//psi 14.5 /  14.5 
//oil 1.0  /   1.4
//oil 0.3  /   0.4
void generic_bar_display(char title[ ], long high, long cur_value, long peak, long warn){
 LCDSerial.print(0xFE, BYTE);  
 LCDSerial.print(128, BYTE);
  LCDSerial.print(title);
  LCDSerial.print(" ");
  LCDSerial.print(cur_value/10);
  LCDSerial.print(".");
  LCDSerial.print(cur_value%10);
  int ndigits = numberofdigits(cur_value) + 1;
  if (ndigits <= 2){ ndigits = ndigits + 1;}
  for (int i = 0; i < 5 - ndigits; i++) {
   LCDSerial.print(" "); 
  }
  LCDSerial.print("/");
  ndigits = numberofdigits(peak) + 1;
  if (ndigits <= 2){ ndigits = ndigits + 1;}
  for (int i = 0; i < 6 - ndigits; i++){
   LCDSerial.print(" "); 
  }
  LCDSerial.print(peak/10);
  LCDSerial.print(".");
  LCDSerial.print(peak%10);
  if (cur_value > warn){ //blink if warning threshold is met
    warn_flash();
  }
   LCDSerial.print(0xFE, BYTE);   
   LCDSerial.print(192, BYTE);  
  unsigned long abar = high/16;
  unsigned long n_bars = cur_value/abar;
  if (cur_value <= 0){n_bars=0;}
  for(int i=1; i< n_bars; i++){ 
     LCDSerial.print(0xFF, BYTE);
  }
  for (int i=1; i < (16 - n_bars); i++){
     LCDSerial.print(" "); 
  }
  delay(60);
}
Example #4
0
// determine whether Amex, Visa, or Mastercard
const char* cardtype(long long cardnumber)
{
  int digits = numberofdigits(cardnumber);
  int check = (cardnumber / (long long int ) pow(10, digits - 1));
  int check2 = (cardnumber / (long long int ) pow(10, digits - 2));
  const char* valid_card = validate(cardnumber);
  
  if (strcmp(valid_card, "VALID") == 0)
  {
    
    // Visa verification
    if (check == 4 && (digits == 16 || digits == 13))
    {
      return "VISA";
    }
    
    // American Express verification
    else if (check == 3 && digits == 15)
    {
      if ((check2 == 37) || (check2 == 34))
      {
       return "AMEX"; 
      }
      else 
      {
        return "INVALID";
      }
    
    }
    
    // Mastercard verification
    else if (check == 5 && digits == 16)
    {
      if ((check2 == 51) || (check2 == 52) || (check2 == 53) || (check2 == 54) || (check2 == 55))
      {
       return "MASTERCARD"; 
      }
      else 
      {
        return "INVALID";
      }
    }
    else 
    {
     return "INVALID"; 
    }
  }
  return "INVALID";
}
Example #5
0
// based on Luhn's checksum algorithm 
const char* validate(long long cardnumber)
{
  int even_sum = 0, odd_sum = 0, total = 0;
  int digits = numberofdigits(cardnumber);
  
  for (int i = 0; i < digits; i++,cardnumber /= 10) 
  {
    // get last digit of card number
    int thisdigit = cardnumber % 10; 
    
    if (i % 2 == 1)
    {
      int prod_dig_sum = 0;
      
      thisdigit *= 2;
      prod_dig_sum += (thisdigit % 10) + (thisdigit / 10);
      even_sum += prod_dig_sum;
    }
    
    else 
    {
      odd_sum += thisdigit;
    }
  }
  
  total = odd_sum + even_sum;
  
  if (total % 10 == 0)
  {
    return "VALID";
  }
  
  else 
  {
    return "INVALID";
  }
  
  return "INVALID";
}
void usb_logger(){
 while (digitalRead(buttonApin) == LOW){}
   Serial.print(0xFE, BYTE);   
   Serial.print(0x01, BYTE);
   Serial.print(0xFE, BYTE);  
   Serial.print(128, BYTE);
   Serial.print("USB Logging");
   Serial.print(0xFE, BYTE);   
   Serial.print(192, BYTE);  
   Serial.print("Press B"); 
 while (digitalRead(buttonBpin) == HIGH){
   if (digitalRead(buttonApin)==LOW){
     return;
   }
 }
 delay(500);
   Serial.print(0xFE, BYTE);   
   Serial.print(0x01, BYTE);
 Serial.print("Logging");   //command flag
 //Serial.print(0x08, BYTE);   //turn off visual display
 //Serial.print("Data logger: \n");
 //open a new file based on a millis timestamp, give it a header and start writting
 //Serial.print("OPW log");
// Serial.print(logfilecount);
 //Serial.print(".txt");
 //Serial.print(13, BYTE);
 //Serial.print("WRF ");
 //Serial.print(42);
 Serial.print("T1, T2, Oil Temp, Boost, x accel, y accel\n"); 
 Serial.print(13, BYTE);
 
 while (digitalRead(buttonBpin) == LOW){}
 while ( (digitalRead(buttonApin) == HIGH) && (digitalRead(buttonBpin) == HIGH) ){
   //logging output
   Serial.print("WRF ");

   long t1 = ( (lookup_temp(analogRead(t1pin))) );
   long t2 = ( (lookup_temp(analogRead(t2pin))) );
   long oil = ( lookup_oil_temp(analogRead(tempPin))); 
   long press =  lookup_boost(analogRead(boostPin));
   long ax = getAccelerometerData (xval);
   long ay = getAccelerometerData (yval);
   
   //calc the number of characters
   int linelen = 5 + numberofdigits(t1) + numberofdigits(t2) + numberofdigits(oil) + numberofdigits(press) + numberofdigits(ax) + numberofdigits(ay);
   //print the number of characters for this line
   Serial.print(linelen);
   Serial.print(13, BYTE);
   
   Serial.print(t1);
   Serial.print(",");
   //get T2 and convert
   //Serial.print( lookup_temp(analogRead(t2pin)) );
   Serial.print(t2);
   Serial.print(",");
   //get oil temp and convert
   //Serial.print( analogRead(tempPin) );
   Serial.print(oil);
   Serial.print(",");
   //get boost and convert
   Serial.print(press);
   //Serial.print("###");
   Serial.print(",");
   //get x accel
   Serial.print(ax);
   Serial.print(",");
   //get y accel
   Serial.print(ay);
   //Serial.print("\n");
   
   Serial.print(13, BYTE);
 }
 while ( (digitalRead(buttonApin) == LOW) && (digitalRead(buttonBpin) == LOW) ){}
 //close the file
 //Serial.print("CLF log%"); 
 //Serial.print(logfilecount);
 //Serial.print(".txt");
 //Serial.print(13, BYTE);
 //logfilecount++;
 //Serial.print(0xFE, BYTE);   //command flag
 //Serial.print(0x0C, BYTE);   //turn on visual display
 return;
}
//use only 4 char titles (should be changed soon)
void generic_dual_display (char title1[ ], long high1, long cur_value1, long peak1, long hiWarn1, long loWarn1, boolean hilo1, char title2[ ], long high2, long cur_value2, long peak2, long hiWarn2, long loWarn2, boolean hilo2){
  int ndigits = 0;
  Serial.print(0xFE, BYTE);  
  Serial.print(128, BYTE);
  Serial.print(title1);
  Serial.print(" ");
  if ( (hilo1 == true) && (cur_value1 == 0) ){
   Serial.print("LOW  "); 
  }
  else if ( (hilo1 == true) && (cur_value1 == 9999) ){
   Serial.print("HIGH  "); 
  }
  else {
    Serial.print(cur_value1/10);
    Serial.print(".");
    Serial.print(cur_value1%10);
    ndigits = numberofdigits(cur_value1) + 1;
    if (ndigits <= 2){ ndigits = ndigits + 1;}
    for (int i = 0; i < 5 - ndigits; i++) {
     Serial.print(" "); 
    }
  }
  Serial.print("/");
  ndigits = numberofdigits(peak1) + 1;
  if (ndigits <= 2){ ndigits = ndigits + 1;}
  for (int i = 0; i < 6 - ndigits; i++){
   Serial.print(" "); 
  }
  Serial.print(peak1/10);
  Serial.print(".");
  Serial.print(peak1%10);
  if ( (cur_value1 > hiWarn1) || (cur_value1 < loWarn1) ){ //blink if warning threshold is met
    warn_flash();
  }
   Serial.print(0xFE, BYTE);   //select the second line
   Serial.print(192, BYTE);  
  Serial.print(title2);
  Serial.print(" ");
  if ( (hilo2 == true) && (cur_value2 == 0) ){
    Serial.print("LOW  ");
  }
  else if ( (hilo2 == true) && (cur_value2 == 9999) ){
    Serial.print("HIGH ");
  }
  else {
    Serial.print(cur_value2/10);
    Serial.print(".");
    Serial.print(cur_value2%10);
    ndigits = numberofdigits(cur_value2) + 1;
    if (ndigits <= 2){ ndigits = ndigits + 1;}
    for (int i = 0; i < 5 - ndigits; i++) {
     Serial.print(" "); 
    }
  }
  Serial.print("/");
  ndigits = numberofdigits(peak2) + 1;
  if (ndigits <= 2){ ndigits = ndigits + 1;}
  for (int i = 0; i < 6 - ndigits; i++){
   Serial.print(" "); 
  }
  Serial.print(peak2/10);
  Serial.print(".");
  Serial.print(peak2%10);
  if ( (cur_value2 > hiWarn2) || (cur_value2 < loWarn2) ){ //blink if warning threshold is met
     warn_flash();
  }
  delay(100);
}