/* Hauptroutine: Wird in der Hauptschleife abgerufen (sobald alle Interrupts und Timer abgearbeitet sind) - as fast as possible */ void rainmaster_mainloop(void) { // Druckabfall in Leitung erkennen und Pumpe bei Bedarf einschalten if(rm_status.PumpenKontakt == true) { setpwm('a', 255); // Pumpe einschalten rm_status.PumpenFlag = true; // Pumpenflag setzen } else { setpwm('a', 0); // Pumpe ausschalten rm_status.PumpenFlag = false; // PumpenFlag setzen rm_offcounter = 0; // Pumpe läuft nicht, also counter auf 0 } uip_ipaddr_t ip_addr; if(my_tanklevel < TANK_MIN) { // TODO: uip_ipaddr(ip_addr, 192, 168, 1, 101); // Kugelhahn umstellen auf Trinkwasserbetrieb PIN_CLEAR(RM_KUGELHAHN); rm_status.Kugelhahn = 0; // Eigenes Magnetventil schließen setpwm('c', 0); rm_status.Magnetventil = 0; // TODO: if(rm_001.request_state == 0) { // Fremdgerät kann Magnetventil öffnen u Pumpe starten, falls kein Eigenbedarf u genügend Wasser bei sich //ecmd_sender_send_command_P(&ip_addr, NULL, PSTR("rainmaster_request 1\n")); rm_001.request_state = 1; //rm_001.busy = 1; } } if(my_tanklevel > TANK_MAX) { if(rm_001.request_state == 1) { // Fremdgerät kann Magnetventil öffnen u Pumpe starten, falls kein Eigenbedarf u genügend Wasser bei sich //ecmd_sender_send_command_P(&ip_addr, NULL, PSTR("rainmaster_request 1\n")); rm_001.request_state = 0; } // Kugelhahn umstellen auf Regenwasserbetrieb PIN_SET(RM_KUGELHAHN); rm_status.Kugelhahn = 1; } } /* End rainmaster_mainloop */
/* * Class: Motor * Method: setpwm * Signature: (II)I */ JNIEXPORT jint JNICALL Java_cbccore_low_Motor_setpwm(JNIEnv* env, jobject obj, jint motor, jint pwm) { #ifdef CBC return setpwm(motor, pwm); #else printf("Java_cbccore_low_Motor_setpwm stub\n"); return -1; #endif }
void pwm_periodic() { #ifdef PWM_GENERAL_FADING_SUPPORT #ifdef CH_A_PWM_GENERAL_SUPPORT if (fadingAspeed!=0){ int16_t chAdiff = getpwm('a')+fadingAspeed; if (chAdiff >= PWM_MIN_VALUE) { fadingAspeed=0; setpwm('a',PWM_MIN_VALUE); } else if (chAdiff<=0) { fadingAspeed=0; setpwm('a',PWM_MAX_VALUE); } else setpwm('a',chAdiff); } #endif /* CH_A_PWM_GENERAL_SUPPORT */ #ifdef CH_B_PWM_GENERAL_SUPPORT if (fadingBspeed!=0){ int16_t chBdiff = getpwm('b')+fadingBspeed; if (chBdiff >= PWM_MIN_VALUE) { fadingBspeed=0; setpwm('b',PWM_MIN_VALUE); } else if (chBdiff<=0) { fadingBspeed=0; setpwm('b',PWM_MAX_VALUE); } else setpwm('b',chBdiff); } #endif /* CH_B_PWM_GENERAL_SUPPORT */ #ifdef CH_C_PWM_GENERAL_SUPPORT if (fadingCspeed!=0){ int16_t chCdiff = getpwm('c')+fadingCspeed; if (chCdiff >= PWM_MIN_VALUE) { fadingCspeed=0; setpwm('c',PWM_MIN_VALUE); } else if (chCdiff<=0) { fadingCspeed=0; setpwm('c',PWM_MAX_VALUE); } else setpwm('c',chCdiff); } #endif /* CH_C_PWM_GENERAL_SUPPORT */ #endif /* PWM_GENERAL_FADING_SUPPORT */ }
// set fading for channel int16_t parse_cmd_pwm_fade_command(char *cmd, char *output, uint16_t len) { uint8_t channel=cmd[1]; int8_t diff=atoi(cmd+3); uint8_t startvalue=atoi(cmd+8); PWMDEBUG ("set ch: %c, diff %i, start %i\n",channel, diff,startvalue); setpwm(channel,startvalue); switch (channel){ #ifdef CH_A_PWM_GENERAL_SUPPORT case 'a': fadingAspeed=diff; break; #endif /* CH_A_PWM_GENERAL_SUPPORT */ #ifdef CH_B_PWM_GENERAL_SUPPORT case 'b': fadingBspeed=diff; break; #endif /* CH_B_PWM_GENERAL_SUPPORT */ #ifdef CH_C_PWM_GENERAL_SUPPORT case 'c': fadingCspeed=diff; break; #endif /* CH_C_PWM_GENERAL_SUPPORT */ } return ECMD_FINAL_OK; }
// set pwm via ecmdA int16_t parse_cmd_pwm_command(char *cmd, char *output, uint16_t len) { uint8_t channel=cmd[1]; uint8_t value=atoi(cmd+3); if (cmd[0]=='\0') { #ifdef CH_A_PWM_GENERAL_SUPPORT PWMDEBUG ("a: %i\n",getpwm('a')); #endif /* CH_A_PWM_GENERAL_SUPPORT */ #ifdef CH_B_PWM_GENERAL_SUPPORT PWMDEBUG ("b: %i\n",getpwm('b')); #endif /* CH_B_PWM_GENERAL_SUPPORT */ #ifdef CH_C_PWM_GENERAL_SUPPORT PWMDEBUG ("c: %i\n",getpwm('c')); #endif /* CH_C_PWM_GENERAL_SUPPORT */ return ECMD_FINAL_OK; } if (cmd[2]=='\0') { return ECMD_FINAL(snprintf_P(output, len, PSTR("%i"), getpwm(channel))); } setpwm(channel,value); return ECMD_FINAL_OK; }