int sys_update_num(void) { int i; argint(0, &i); return update_num(i); }
int main(void) { uint8_t i; #ifdef DEBUG uart_init(); uart_puts ("\r\nreset\r\ninit port 1\r\n"); #endif // /* uart_puts ("a123\n"); uart_puts ("b456\n"); uart_puts ("c789\n"); uart_puts ("d20\n"); */ init_keypad_4x4s (P_PORTC); init_count_switch(); init_timer (); lcd_setup (0, P_PA2, P_PA4, P_PA6, P_PA0, P_PA1, P_PA3, P_PA5, P_PA7); //lcd_setup (uint8_t chip, uint8_t strobe, uint8_t clock, uint8_t io) lcd_setup_info (0, HD44780, 20, 2); lcd_init (0, LCD_DISP_ON); // relays // sh_cp:11 (geel) st_cp:12(paars) ds:14(wit) //void hc595_setup (uint8_t chip, uint8_t clk, uint8_t cs, uint8_t data) DDRD|=P_BIT7 | P_BIT6 | P_BIT5 | P_BIT4; #ifdef DEBUG test_relais(); #endif c=0; prevc=0; num=0; turns_done=0; turns_prog=0; total_turns_done=0; for (i=0; i<80; i++) layer[i]=0; stop_motor(); set_wind_dir_none(); lcd_clrscr(0); lcd_puts (0,"* Winding controller 20140114"); lcd_gotoxy(0,39,0); lcd_puts (0,"*"); lcd_gotoxy(0,0,3); lcd_puts (0,"*"); lcd_gotoxy(0,39,3); lcd_puts (0,"*"); lcd_gotoxy(0,2,2); lcd_printf(0,"Free RAM:%d b",freeRam()); sleep(1); lcd_clrscr(0); update_info (); update_command(); update_num (); update_speed (); update_turns(); for (;;) { c=keypad_w_getch(); if (c!=prevc) { /*a=PINC; uart_printf ("%x %x %d\r\n",a,c,num); */ prevc=c; if ((action==FILL) || (action==WIND_LEFT) || (action==WIND_RIGHT)) { switch (c) { case 0x0c: stop_winding(); action=INACTIVE; //dubbel maar extra voor readability break; } } // if !INACTIVE if (action==HELP) { switch (c) { case 0x0f: if (helppage<MAX_HELPPAGES) helppage++; show_help(); break; case 0x0e: if (helppage>0) helppage--; show_help(); break; case 0x0c: action=INACTIVE; lcd_clrscr(0); break; } } // if HELP if (action==CORR) { switch (c) { //corrmode is wat we de *vorige* keer gedaan hebben char buf[10]; case 0x0c: turns_done=turns_before_corr; total_turns_done=total_turns_done_before_corr; action=INACTIVE; break; case 0x0e: turns_done=turns_before_corr; total_turns_done=total_turns_done_before_corr; if (corrmode==SUB) { turns_done+=corr; total_turns_done+=corr; corrmode=ADD; break; } if (corrmode==ADD) { if (turns_done>=corr) { turns_done-=corr; total_turns_done-=corr; } corrmode=SUB; } break; case 0x0f: turns_done=0; total_turns_done=0; turns_before_corr=0; total_turns_done_before_corr=0; action=INACTIVE; break; case 0xff: case 0xfd: case 0xfe: break; default: num=0; action=INACTIVE; itoa(corr,buf,10); if (corrmode==SUB) strcat(layer,"+"); if (corrmode==ADD) strcat(layer,"+"); strcat (layer,buf); update_layer(); break; } update_command(); update_turns(); } if (action==INACTIVE) { switch (c) { case 0x0a: wind_left(); turns_prog=num; num=0; break; case 0x0b: wind_right (); turns_prog=num; num=0; break; case 0x0d: fill (); turns_prog=num; num=0; break; case 0x0c: num=0; stop_motor(); break; case 0x0e: corr=num; turns_before_corr=turns_done; if (turns_done>=corr) turns_done-=corr; action=CORR; corrmode=SUB; break; case 0x0f: helppage=0; show_help(); action=HELP; break; case 0xff: case 0xfd: case 0xfe: break; default: if (num<1000) { num=num*10 + c; update_num(); update_speed(); } } if (action!=HELP) { update_command(); update_turns(); update_num(); update_speed(); } } // if INACTIVE } // if c==prevc } // mainloop return 0; }