void setup() {
	// set up the encoder interrupt to detect falling edge on digital pin 2
	attachInterrupt(0, encoder_interrupt, FALLING);
	Serial.begin(115200);
	Serial.write("<h>time\tspeed\tcurrent\tcurrent_sense\tvoltage\tvoltage_sense</h>\n");
	Serial.write("<u>ms\trpm\tmA\tcounts\tvolts\tcts</u>\n");
  pinMode(LED_PWM_PIN, OUTPUT);
  pinMode(VOLT_PIN, INPUT);
  pinMode(INTERRUPTER_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);
  pinMode(BTN_PIN, INPUT);

  LcdInitialize();
  gotoXY(0,0);
  LcdClear();
  LcdString((char*)"Current:");

  gotoXY(0,2);
  LcdString((char*)"Speed:");

  gotoXY(0,4);
  LcdString((char*)"Voltage:");

  blink_clock = millis();

  tach_enc.min_hertz = 5;
  tach_enc.max_period = 5000;
  tach_enc.pin_num = INTERRUPTER_PIN;
  tach_enc.debounce_min = 5;
  tach_enc.alpha = 800;
  tach_enc.cts_per_rev = 1;
  tach_enc.hertz = 0;

  button.button_pin = BTN_PIN;
  button.button_state = btnDown;

//  pulser.carrier_clock = 0;
//  pulser.carrier_period = 5000;
//  pulser.step_clock = 0;
//  pulser.pulse_up_period = 1000;
//  pulser.pulse_down_period = 3500;
//  pulser.step_period_up = pulser.pulse_up_period / impulse_num_samples;
//  pulser.step_period_down = pulser.pulse_down_period / impulse_num_samples;
//  pulser.index = 0;
//  pulser.offset_time = 0; // start pulse at beginning of each carrier period

  volt_sensor.max_volts = 68000; // mV at sensor saturation (depends on pot adj)

//  init_impulse(impulse_array, impulse_num_samples, 255);


}
Пример #2
0
void baseTemplate(unsigned int TankLevel, int EngineTemperature)
{
    float TemperatureProcent, TankProcent;

    if (EngineTemperature > MaxEngineTemperature)   EngineTemperature =  MaxEngineTemperature;
    if (EngineTemperature < MinEngineTemperature)   EngineTemperature =  MinEngineTemperature;
    sprintf (lcd_buf, "%3u", EngineTemperature);
    LcdString(12,1);
    sprintf (lcd_buf, "%u", TankLevel);
    LcdString(1,1);
    TemperatureProcent = (long)EngineTemperature*100/MaxEngineTemperature; 
    LcdBar(78, 10, 79, 39, TemperatureProcent);       
    TankProcent = (long)TankLevel*100/TankCapacity;
    LcdBar(2, 10, 4, 37, TankProcent);
}
Пример #3
0
void setDisplay(){
  if (modechanged){
    gotoXY(0,0);
    sprintf(cha, " Ustaw. wysw.");LcdString(cha, true);
    gotoXY(0,1);
    sprintf(cha, EMPTY_LINE);LcdString(cha, false);
  }
  gotoXY(0,1);
  sprintf(cha, "kontrast:");LcdString(cha,false);
  gotoXY(60,1);
  sprintf(cha, "%02i", contrast_val);LcdString(cha, (pos_setDisp==0));
  gotoXY(0,2);
  sprintf(cha, "jasnosc:");LcdString(cha,false);
  gotoXY(60,2);
  sprintf(cha, "%02i", jasnosc_val);LcdString(cha, (pos_setDisp==1));
  gotoXY(0,3);
  sprintf(cha, "OK");LcdString(cha,(pos_setDisp==2));  
  if (modechanged){
    gotoXY(0,4);
    sprintf(cha, "<> poprz/nast");LcdString(cha);
    gotoXY(0,5);
    sprintf(cha, "^v wart +/-");LcdString(cha);

    modechanged=false;
  }
  
  if (pos_setDisp==0){
    if (isUp())  { contrast_val=obetnij(contrast_val+1, 10, true); LcdInitialise(); }
    if (isDown()) { contrast_val=obetnij(contrast_val-1, 10, true); LcdInitialise(); }
  }
  else if (pos_setDisp==1){
    if (isUp())   { jasnosc_val=obetnij(jasnosc_val+1, 50); analogWrite(11, jasnosc_val); }
    if (isDown()) { jasnosc_val=obetnij(jasnosc_val-1, 50); analogWrite(11, jasnosc_val); }
  }
  if (pos_setDisp==2){
    if (isPressed()) {
      mode=1;
      modechanged=true;
      LcdClear();
      return;
    }
  }
  
  if (isRight())  pos_setDisp++;
  if (isLeft()) pos_setDisp--;
  if (pos_setDisp>2) pos_setDisp=0;
  if (pos_setDisp<0) pos_setDisp=2;
}
Пример #4
0
int main(){

	int i,j;

	LcdInitialise();
	LcdClear();
	LcdString("Hola");
while (1);

}
Пример #5
0
void showMenu(){
  if (isPressed()) {
    mode=pos_menu+2;
    modechanged=true;
    if (mode==5) mode=0; 
    LcdClear();
    return;  
  }

  gotoXY(0,0);
  sprintf(cha, " Menu glowne ");LcdString(cha, true);
  gotoXY(0,1);
  sprintf(cha, "    "); LcdString(cha, false);
  gotoXY(20,1);
  sprintf(cha, "budzik"); LcdString(cha, (pos_menu==0));
  gotoXY(0,2);
  sprintf(cha, "ust."); LcdString(cha, (pos_menu==1));
  gotoXY(30,2);
  sprintf(cha, " ^  "); LcdString(cha, false);
  gotoXY(50,2);
  sprintf(cha, "ust."); LcdString(cha, (pos_menu==2));
  gotoXY(0,3);
  sprintf(cha, "czas"); LcdString(cha, (pos_menu==1));
  gotoXY(30,3);
  sprintf(cha, "< > "); LcdString(cha, false);
  gotoXY(50,3);
  sprintf(cha, "wysw"); LcdString(cha, (pos_menu==2));
  gotoXY(0,4);
  sprintf(cha, "     v"); LcdString(cha, false);
  gotoXY(0,5);
  sprintf(cha, "    "); LcdString(cha, false);
  gotoXY(20,5);
  sprintf(cha, "powrot"); LcdString(cha, (pos_menu==3));
  
  if (isUp()) pos_menu=0;
  if (isDown()) pos_menu=3;
  if (isRight()) pos_menu=2;
  if (isLeft()) pos_menu=1;
}
Пример #6
0
void displayClock(){
  PAR = not PAR;
  
  char* clock = rtc.formatTime(); int p=-14/*+7*/;
  LcdCharacterBig(p+=14,0,clock[0],false);
  LcdCharacterBig(p+=14,0,clock[1],false);
  LcdCharacterBig(p+=14,0,'-',false);
  LcdCharacterBig(p+=14,0,clock[3],false);
  LcdCharacterBig(p+=14,0,clock[4],false);
  
  gotoXY(70,2); sprintf (cha, "%02i", rtc.getSecond());LcdString(cha,true);
  
  gotoXY(0,4);
  sprintf (cha, "%02i/%02i/2016", rtc.getDay(), rtc.getMonth());LcdString(cha);

  gotoXY(0,5);
  sprintf (cha, "%02i'C | %02i%%", (int)(dht.readTemperature()), (int)(dht.readHumidity()));LcdString(cha);
  
  if (alarmENABLED){
   sprintf(cha, "#");
   gotoXY(77,4); LcdString(cha,true); 
   gotoXY(77,5); LcdString(cha,true);  
  }
  else{
   sprintf(cha, " ");
   gotoXY(77,4); LcdString(cha,false); 
   gotoXY(77,5); LcdString(cha,false);  
  }
  
  if (alarmACTIVE){
    sprintf(cha, "   budzik   ");
    gotoXY(0,3);LcdString(cha, PAR);
  }
  else if (alarmSNOOZE){
    sprintf(cha, "   drzemka  ");
    gotoXY(0,3);LcdString(cha, PAR);
  }
  else{
    sprintf(cha, EMPTY_LINE);
    gotoXY(0,3);LcdString(cha);
  }

  if (alarmINT){
    if(b){
      alarmCOMPLETED=true;
      alarmACTIVE=false;
      alarmINT=false;
      alarmSNOOZE=true;
      alarmTmp.addMinutes(SNOOZE_TIME);
    }
  }
  else{
    if (b){mode=1;modechanged=true;LcdClear();return;}
    if (isRight()&&isUp()){
      enableAlarm();
    }
  }
  if (isLeft()&&isDown()){
    if (alarmACTIVE) alarmCOMPLETED=true;
    else disableAlarm();
    alarmSNOOZE=false;
    alarmTmp=alarm;
    alarmINT=false;
    alarmACTIVE=false;
    alarmENABLED=false;
  }
}
Пример #7
0
void setClock(bool isClock){
  char hh[3];
  if (isClock)
    sprintf(hh, "%02i", rtc.getHour());
  else
    sprintf(hh, "%02i", alarm.h);
  char mm[3];
  if (isClock)
    sprintf(mm, "%02i", rtc.getMinute());
  else
    sprintf(mm, "%02i", alarm.m);
  char day[3]; char month[3];
  if (isClock){
    sprintf(day,   "%02i", rtc.getDay());
    sprintf(month, "%02i", rtc.getMonth());   
  }

  if (modechanged){
    if (isClock){ sprintf(cha, " Ustaw czas ");}
    else        { sprintf(cha, "Ustaw budzik");}
    gotoXY(0,0);
    LcdString(cha, true);
    gotoXY(0,1);
    sprintf(cha, EMPTY_LINE);LcdString(cha, false);
  }
  
  gotoXY(0,1);
  LcdString(hh,(pos_setClock==0));
  gotoXY(15,1);
  sprintf(cha, ":"); LcdString(cha, false);
  gotoXY(20,1);
  LcdString(mm,(pos_setClock==1));
  gotoXY(70,1);
  sprintf(cha, "OK");LcdString(cha,(pos_setClock==2));  

  if (isClock){
    gotoXY(0,2);
    LcdString(day,(pos_setClock==3));
    gotoXY(15,2);
    sprintf(cha, "/"); LcdString(cha, false);
    gotoXY(20,2);
    LcdString(month,(pos_setClock==4));
    gotoXY(35,2);
    sprintf(cha, "/2016");LcdString(cha);  
  }

  if (modechanged){
    gotoXY(0,3);
    sprintf(cha, EMPTY_LINE);LcdString(cha, false);
    gotoXY(0,4);
    sprintf(cha, "<> poprz/nast");LcdString(cha);
    gotoXY(0,5);
    sprintf(cha, "^v wart +/-");LcdString(cha);
    
    modechanged=false;
  }
  
  if (isClock){
    if (pos_setClock==0){
      if (isUp())   rtc.setTime(obetnij(rtc.getHour()+1, 23), rtc.getMinute(), rtc.getSecond());
      if (isDown()) rtc.setTime(obetnij(rtc.getHour()-1, 23), rtc.getMinute(), rtc.getSecond());
    }
    if (pos_setClock==1){
      if (isUp())   rtc.setTime(rtc.getHour(), obetnij(rtc.getMinute()+1,59), rtc.getSecond());
      if (isDown()) rtc.setTime(rtc.getHour(), obetnij(rtc.getMinute()-1,59), rtc.getSecond());   
    }
    if (pos_setClock==3){
      if (isUp())   rtc.setDate(obetnij(rtc.getDay()+1,31), 1, rtc.getMonth(), 21, 16);
      if (isDown()) rtc.setDate(obetnij(rtc.getDay()-1,31), 1, rtc.getMonth(), 21, 16);
    }
    if (pos_setClock==4){
      if (isUp())   rtc.setDate(rtc.getDay(), 1, obetnij(rtc.getMonth()+1,12), 21, 16);   
      if (isDown()) rtc.setDate(rtc.getDay(), 1, obetnij(rtc.getMonth()-1,12), 21, 16);   
    }
  }
  else{
    if (pos_setClock==0){
      if (isUp())   alarm.h = obetnij(alarm.h+1, 23);
      if (isDown()) alarm.h = obetnij(alarm.h-1, 23);
    }
    if (pos_setClock==1){
      if (isUp())   alarm.m = obetnij(alarm.m+1,59);
      if (isDown()) alarm.m = obetnij(alarm.m-1,59);
    }    
  }
  
  if (pos_setClock==2){
    if (isPressed()) {
      mode=1;
      modechanged=true;
      LcdClear();
      return;
    }
  }

  alarmTmp = alarm;
  
  if (isRight())  pos_setClock++;
  if (isLeft())   pos_setClock--;
  if (isClock){
    if (pos_setClock>4) pos_setClock=0;
    if (pos_setClock<0) pos_setClock=4;
  }
  else {
    if (pos_setClock>2) pos_setClock=0;
    if (pos_setClock<0) pos_setClock=2;
  }
}
Пример #8
0
void LcdClear(void) {
  for (int i=0;i<6;i++){
    gotoXY(0,i);
    sprintf(cha, EMPTY_LINE);LcdString(cha, false);
  }  
}
void loop() {
	long unsigned int current_time = millis();
  if(current_time >= sample_clock){
  	// reset sampling clock
  	sample_clock += SAMPLE_PERIOD;

  	// poll the potentiometer once each sample period
//  	poll_potentiometer();

  	// dim the LED string using potentiometer as a reference
//    analogWrite(LED_PWM_PIN, map(dimmer_cts, 0, 1025, 0, 255));

    // step through impulse routine
//    step_pulser(current_time, &pulser);

    // poll the tachometer encoder
    //poll_encoder(current_time, &tach_enc);

    if (pollButton(&button) >= shortPress){
    	backlight_clock = current_time + backlight_period;
    }

    if(current_time >= update_tach_clock){
    	update_tach_clock = current_time + update_tach_period;
    	// check if tachometer interrupt has been fired
    	if(tach_enc.pin_state){
    		tach_enc.pin_state = 0;
    		tach_enc.last_period = (current_time - tach_enc.startTime);
    		tach_enc.startTime = current_time;
    	}
    	digitalWrite(LED_PIN, digitalRead(tach_enc.pin_num));
    }

		if(current_time >= calc_tach_clock){
			calc_tach_clock = current_time + calc_tach_period;
			calculate_tach(current_time, &tach_enc);
		}

		if(current_time >= calc_current_clock){
			calc_current_clock = current_time + calc_current_period;
			calculate_current(&current_sensor);
			calculate_voltage(&volt_sensor);
		}

//  if(current_time >= blink_clock){
//  	led_state = !led_state;
//  	digitalWrite(LED_PIN, led_state);
//  	blink_clock = current_time + blink_period;
//  }

		if(current_time >= toggle_display_clock){
			toggle_display_clock = current_time + toggle_display_period;
			toggle_display = !toggle_display;
		  gotoXY(0,2);
		  if(toggle_display == SHOW_RPM)
		  	LcdString((char*)"Speed:");
		  else if(toggle_display == SHOW_WATTS)
		  	LcdString((char*)"Power:");
		}

		if(current_time >= update_display_clock){

			update_display_clock = current_time + update_display_period;
		  snprintf(outputbuffer, 11,"%d.%02d Amps", (current_sensor.current)/1000,
		  		((abs(current_sensor.current) % 1000) / 10));

		  gotoXY(6,1);
		  LcdString((char*)"           ");
		  gotoXY(6,1);
		  LcdString(outputbuffer);


		  if(toggle_display == SHOW_RPM){
			  snprintf(outputbuffer,11,"%ld.%01ld RPM", (60*tach_enc.hertz)/1000, ((60*tach_enc.hertz)%1000) / 100);
		  }

		  else if(toggle_display == SHOW_WATTS){
		  	watts = abs(current_sensor.current * volt_sensor.voltage) / 1000;
			  snprintf(outputbuffer,11,"%ld.%01ld Watts", watts/1000, (watts%1000) / 100);
		  }

		  gotoXY(6,3);
		  LcdString((char*)"           ");
		  gotoXY(6,3);
		  LcdString(outputbuffer);

		  snprintf(outputbuffer,12,"%ld.%02ld Volts", volt_sensor.voltage/1000, ((volt_sensor.voltage)%1000) / 10);
		  gotoXY(6,5);
		  LcdString((char*)"           ");
		  gotoXY(6,5);
		  LcdString(outputbuffer);
		}
//		if(current_time >= post_to_serial_clock){
//			post_to_serial_clock = current_time + post_to_serial_period;
////			Serial.write("<r>");
////			Serial.write(tach_enc.hertz / 1000);
////			Serial.write(".");
////			Serial.write(tach_enc.hertz % 1000);
//			sprintf(outputbuffer, "<r>%lu.%03lu\t%ld.%03ld\t%d\t%ld\t%ld.%03ld\t%ld</r>\n", current_time/1000,
//					current_time % 1000, (60*tach_enc.hertz)/1000, ((60*tach_enc.hertz) % 1000)/10,current_sensor.current, current_sensor.sense_cts,
//					volt_sensor.voltage / 1000, volt_sensor.voltage % 1000, volt_sensor.sense_cts);
//			Serial.write(outputbuffer);
//		}

		if(current_time <= backlight_clock){
			analogWrite(BACKLIGHT_PIN, 35);
		}
		else
			analogWrite(BACKLIGHT_PIN, 0);
  }
}