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); }
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); }
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; }
int main(){ int i,j; LcdInitialise(); LcdClear(); LcdString("Hola"); while (1); }
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; }
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; } }
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; } }
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(¤t_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); } }