Проблема с funktion в loop
- Войдите на сайт для отправки комментариев
Пнд, 21/07/2014 - 13:17
Работаю над одной программой и все вроде бы хорошо, но вот наткнулся на одну проблему и с места сдвинутся не могу.
В общем, моя проблема в том, что когда я в loop начинаю функ. она делает не все что должна.
Код функции:
gang_s umschaltfkt( gang_s j[], gang_s n[], gang_s w[], int t, int tol ) //Funktion zum Umschalten zwischen den Gängen { lcd.clear(); int pwma; //Wert für Ua Ausgabe int pwmw; //Wert für Uw Ausgabe int time; //Wert für Delay int tabs; //Wert für Delayberechnung gang_s soll; int a; //Wert für Umschaltung zwischen jetzt.gUa und neutral.gUa int d; int b; //Werte zum Erkennen im welchen Uw sich der jetztige und gewünschte Gang befinden int c; int e; int f; int x; int y; soll.gUw = (w[20].gUw + ((w[20].gUw * tol)/100)); soll.gUa = (w[20].gUa + ((w[20].gUa * tol)/100)); for( b = 0; b < 20; b++ ){ // Es wird erkannt im welchen Uw bereich der jetzige Gang ist for(x = 0; x < 20; x++){ c++; if(j[b].gUw == n[x].gUw){ break; } } } for( d = 0; d < 20; d++ ){ // Es wird erkannt im welchen Uw bereich der gewünschte Gang ist for(y = 0; y <20; y++){ if(w[d].gUw == n[y].gUw){ e++; break; } } } tabs = c - e; // Es wird berechnet wieviele Schritte zwischen Uwjetzt und Uwsoll sind time = ( t/(abs(tabs)+42)); // Es wird berechnet wie lang das Delay sein muss if (j[20].gUa != n[20].gUa){ // Wenn Uajetzt größer als Uaneutral ist: for( a = 20; a > 0; a--) { pwma = (((j[a].gUa)>>4)-(j[a].gUa>>7)-(j[a].gUa>>8)); // PWM Signal für Ua wird berechnet pwma = (pwma + ((pwma * tol)/100)); // Die Toleranz wird dazugerechnet pwmw = (((j[a].gUw)>>4)-(j[a].gUw>>7)-(j[a].gUw>>8)); // PWM Signal für Uw wird berechnet pwmw = (pwmw + ((pwmw * tol)/100)); // Die Toleranz wird dazugerechnet lcd.setCursor(0, 0); lcd.print((j[a].gUw + ((j[a].gUw*tol)/100))); // Uw auf dem Display angezeigt lcd.setCursor(0,1); lcd.print((j[a].gUa + ((j[a].gUa*tol)/100))); // Ua auf dem Display angezeigt analogWrite(uaPinPWM, pwma); // PWM Signal ausgegeben analogWrite(uwPinPWM, pwmw); delay(time); } } if( c > e){ // Wenn das Uwjetzt > Uwsoll ist do{ // Wird pwmw = (((n[c].gUw)>>4)-(n[c].gUw>>7)-(n[c].gUw>>8)); // PWM Signal für Uw wird berechnet pwmw = (pwmw + ((pwmw * tol)/100)); // Die Toleranz wird dazugerechnet pwma = (((n[c].gUa)>>4)-(n[c].gUa>>7)-(n[c].gUa>>8)); // PWM Signal für Ua wird berechnet pwma = (pwma + ((pwma * tol)/100)); // Die Toleranz wird dazugerechnet lcd.setCursor(0, 0); lcd.print((n[c].gUw + ((n[c].gUw*tol)/100))); // Uw auf dem Display angezeigt lcd.setCursor(0, 1); lcd.print((n[c].gUa + ((n[c].gUa*tol)/100))); // Uw auf dem Display angezeigt analogWrite(uwPinPWM, pwmw); // PWM Signal ausgegeben analogWrite(uaPinPWM, pwma); c--; // Der nächste Wert ausgewählt } while(n[c].gUw > n[e].gUw) ; // Solange Uwsoll nicht erreicht wird } else if (e > c){ // Wenn das Uwjetzt < Uwsoll ist do{ // Wird pwmw = (((n[c].gUw)>>4)-(n[c].gUw>>7)-(n[c].gUw>>8)); // PWM Signal für Uw berechnet pwmw = (pwmw + ((pwmw * tol)/100)); // Die Toleranz wird dazugerechnet pwma = (((n[c].gUa)>>4)-(n[c].gUa>>7)-(n[c].gUa>>8)); // PWM Signal für Uw berechnet pwma = (pwma + ((pwma * tol)/100)); // Die Toleranz wird dazugerechnet lcd.setCursor(0, 0); lcd.print((n[c].gUw + ((n[c].gUw*tol)/100))); // Uw auf dem Display angezeigt lcd.setCursor(0,1); lcd.print((n[c].gUa + ((n[c].gUa*tol)/100))); // Ua auf dem Display angezeigt analogWrite(uwPinPWM, pwmw); // PWM Signal ausgegeben analogWrite(uaPinPWM, pwma); c++; // Der nächste Wert ausgewählt } while(n[e].gUw > n[c].gUw) ; // Solange Uwsoll nicht erreicht wird } for( d = 0; d < 20; d++){ pwma = (((w[d].gUa)>>4)-(w[d].gUa>>7)-(w[d].gUa>>8)); // Der PWM Signal für Ua wird berechnet pwma = (pwma + ((pwma * tol)/100)); // Die Toleranz wird dazugerechnet pwmw = (((w[d].gUw)>>4)-(w[d].gUw>>7)-(w[d].gUw>>8)); // Der PWM Signal für Uw wird berechnet pwmw = (pwmw + ((pwmw * tol)/100)); // Die Toleranz wird dazugerechnet lcd.setCursor(0, 0); lcd.print(w[d].gUw); // Uw auf dem Display anzeigen lcd.setCursor(0,1); lcd.print(w[d].gUa); // Ua auf dem Display anzeigen analogWrite(uaPinPWM, pwma); // PWM Signal wird ausgeben analogWrite(uwPinPWM, pwmw); delay(time); } A=0; return soll; // Der gewünschte Wert ist die Rückgabe }
По плану тут на LCD должно было показывать как меняются числа, но в итоге на LCD появляется только последнее число. Знатоки, внимание вопрос: почему это так???
Уже замучился с этой тупостю и не могу никак продвинутся. помогите пожалуйста
Вот полный код:
#include <LiquidCrystal.h> /* * LCD RS mit Pin 12 verbinden * LCD Enable mit Pin 11 verbinden * LCD D4 Pin mit 5 verbinden * LCD D5 Pin mit 4 verbinden * LCD D6 Pin mit 3 verbinden * LCD D7 Pin mit 2 verbinden */ LiquidCrystal lcd(12, 11, 5, 4, 3, 2); const int buttonPinLeft = 13; // Up button const int buttonPinRight = 8; // Down button const int buttonPinEsc = 7; // Esc button const int buttonPinEnter = 6; // Enter button int uwPinPWM = 10; // Pin für PWM ausgabe int uaPinPWM = 9; // Pin für PWM ausgabe int lastButtonPushed = 0; // Für debounce int lastButtonEnterState = LOW; // Für Tastensteuerung int lastButtonEscState = LOW; // Für Tastensteuerung int lastButtonLeftState = LOW; // Für Tastensteuerung int lastButtonRightState = LOW; // Für Tastensteuerung long lastEnterDebounceTime = 0; // Für debounce long lastEscDebounceTime = 0; // Für debounce long lastLeftDebounceTime = 0; // Für debounce long lastRightDebounceTime = 0; // Für debounce long debounceDelay = 150; // Für debounce int A = 0; // Wert für Menü int reading; // Für debounce int toleranz = 0; // Wert für Toleranz int schaltzeit = 100; // Wert für die Zeit int gang = 0; // Wert für den Gang int pwmUa; // Wert für Ua Signal int pwmUw; // Wert für Uw Signal #define MAXSIZE 21 typedef struct // Struktur von einem Messwert { // Uw und Ua sind gespeichert unsigned int gUw; unsigned int gUa; } gang_s; gang_s jetzt = { //Werte für den Gang am Anfang 2475,2500 }; gang_s erster[MAXSIZE]= { //Messwerte des 1. Gangs { 2125,2500 } ,{ 2125,2575 } ,{ 2125,2650 } ,{ 2125,2725 } ,{ 2125,2800 } ,{ 2125,2875 } ,{ 2125,2950 } ,{ 2125,3025 } ,{ 2125,3100 } ,{ 2125,3175 } ,{ 2125,3250 } ,{ 2125,3325 } ,{ 2125,3400 } ,{ 2125,3475 } ,{ 2125,3550 } ,{ 2125,3625 } ,{ 2125,3700 } ,{ 2125,3775 } ,{ 2125,3850 } ,{ 2125,3925 } ,{ 2125,4000 } }; gang_s zweiter[MAXSIZE]= { //Messwerte des 2. Gangs { 2125,2500 } ,{ 2125,2425 } ,{ 2125,2350 } ,{ 2125,2275 } ,{ 2125,2200 } ,{ 2125,2125 } ,{ 2125,2050 } ,{ 2125,1975 } ,{ 2125,1900 } ,{ 2125,1825 } ,{ 2125,1750 } ,{ 2125,1675 } ,{ 2125,1600 } ,{ 2125,1525 } ,{ 2125,1450 } ,{ 2125,1375 } ,{ 2125,1300 } ,{ 2125,1225 } ,{ 2125,1150 } ,{ 2125,1075 } ,{ 2125,1000 } }; gang_s dritter[MAXSIZE]= { //Messwerte des 3. Gangs { 3250,2500 } ,{ 3250,2575 } ,{ 3250,2650 } ,{ 3250,2725 } ,{ 3250,2800 } ,{ 3250,2875 } ,{ 3250,2950 } ,{ 3250,3025 } ,{ 3250,3100 } ,{ 3250,3175 } ,{ 3250,3250 } ,{ 3250,3325 } ,{ 3250,3400 } ,{ 3250,3475 } ,{ 3250,3550 } ,{ 3250,3625 } ,{ 3250,3700 } ,{ 3250,3775 } ,{ 3250,3850 } ,{ 3250,3925 } ,{ 3250,4000 } }; gang_s vierter[MAXSIZE]= { //Messwerte des 4. Gangs { 3250,2500 } ,{ 3250,2425 } ,{ 3250,2350 } ,{ 3250,2275 } ,{ 3250,2200 } ,{ 3250,2125 } ,{ 3250,2050 } ,{ 3250,1975 } ,{ 3250,1900 } ,{ 3250,1825 } ,{ 3250,1750 } ,{ 3250,1675 } ,{ 3250,1600 } ,{ 3250,1525 } ,{ 3250,1450 } ,{ 3250,1375 } ,{ 3250,1300 } ,{ 3250,1225 } ,{ 3250,1150 } ,{ 3250,1075 } ,{ 3250,1000 } }; gang_s fuenfter[MAXSIZE]={ //Messwerte des 5. Gangs { 4125,2500 } ,{ 4125,2575 } ,{ 4125,2650 } ,{ 4125,2725 } ,{ 4125,2800 } ,{ 4125,2875 } ,{ 4125,2950 } ,{ 4125,3025 } ,{ 4125,3100 } ,{ 4125,3175 } ,{ 4125,3250 } ,{ 4125,3325 } ,{ 4125,3400 } ,{ 4125,3475 } ,{ 4125,3550 } ,{ 4125,3625 } ,{ 4125,3700 } ,{ 4125,3775 } ,{ 4125,3850 } ,{ 4125,3925 } ,{ 4125,4000 } }; gang_s sechster[MAXSIZE]={ //Messwerte des 6. Gangs { 4125,2500 } ,{ 4125,2425 } ,{ 4125,2350 } ,{ 4125,2275 } ,{ 4125,2200 } ,{ 4125,2125 } ,{ 4125,2050 } ,{ 4125,1975 } ,{ 4125,1900 } ,{ 4125,1825 } ,{ 4125,1750 } ,{ 4125,1675 } ,{ 4125,1600 } ,{ 4125,1525 } ,{ 4125,1450 } ,{ 4125,1375 } ,{ 4125,1300 } ,{ 4125,1225 } ,{ 4125,1150 } ,{ 4125,1075 } ,{ 4125,1000 } }; gang_s rueck[MAXSIZE]= { //Messwerte des R Gangs { 875,2500 } ,{ 875,2575 } ,{ 875,2650 } ,{ 875,2725 } ,{ 875,2800 } ,{ 875,2875 } ,{ 875,2950 } ,{ 875,3025 } ,{ 875,3100 } ,{ 875,3175 } ,{ 875,3250 } ,{ 875,3325 } ,{ 875,3400 } ,{ 875,3475 } ,{ 875,3550 } ,{ 875,3625 } ,{ 875,3700 } ,{ 875,3775 } ,{ 875,3850 } ,{ 875,3925 } ,{ 875,4000 } }; gang_s neutral[MAXSIZE]= { //Messwerte des N Gangs { 875,2500 } ,{ 1025,2500 } ,{ 1175,2500 } ,{ 1350,2500 } ,{ 1500,2500 } ,{ 1650,2500 } ,{ 1825,2500 } ,{ 1975,2500 } ,{ 2125,2500 } ,{ 2300,2500 } ,{ 2475,2500 } ,{ 2625,2500 } ,{ 2775,2500 } ,{ 2925,2500 } ,{ 3100,2500 } ,{ 3250,2500 } ,{ 3400,2500 } ,{ 3575,2500 } ,{ 3725,2500 } ,{ 3875,2500 } ,{ 4125,2500 } }; gang_s umschaltfkt( gang_s j[], gang_s n[], gang_s w[], int t, int tol ); // Funktion zum Umschalten zwischen Gängen gang_s umschaltN(gang_s j[],int t,int tol); // Funktion zum Umschalten auf N void setup() { pinMode(buttonPinLeft, INPUT); //Buttons pinMode(buttonPinRight, INPUT); //werden pinMode(buttonPinEnter, INPUT); //als Input pinMode(buttonPinEsc, INPUT); // definiert lcd.begin(16, 4); //Eigenschaften des LCDs lcd.clear(); } void loop() { pwmUa = (((jetzt.gUa)>>4)-(jetzt.gUa>>7)-(jetzt.gUa>>8)); // Ua wird berechnet pwmUw = (((jetzt.gUw)>>4)-(jetzt.gUw>>7)-(jetzt.gUw>>8)); // Ua wird berechnet analogWrite(uwPinPWM, pwmUw); //Der Pin uwPinPWM hat immer eine Ausgabe analogWrite(uaPinPWM, pwmUa); //Der Pin uaPinPWM hat immer eine Ausgabe switch(A){ //Der Wert von A wird zur Steurung des Menüs verwendet case 0: //Wenn A = 0: lcd.setCursor(0, 0); lcd.print(jetzt.gUw); //Der Uw Wert wird in der ersten Zeile angezeigt lcd.setCursor(0,1); lcd.print(jetzt.gUa); //Der Ua Wert wird in der zweiten Zeile angezeigt lcd.setCursor(0,2); if ((jetzt.gUw >= 2018) && (jetzt.gUw <= 2231) && (jetzt.gUa>=3000)) { //Je nach dem welchen Wert wir haben Schreibt LCD, im welchen Gang wir sind lcd.print("Gang: 1"); } else if((jetzt.gUw >= 2018) && (jetzt.gUw <= 2231) && (jetzt.gUa<=2000)) { lcd.print("Gang: 2"); } else if((jetzt.gUw >= 3087) && (jetzt.gUw <= 3412) && (jetzt.gUa>=3000)) { lcd.print("Gang: 3"); } else if((jetzt.gUw >= 3087) && (jetzt.gUw <= 3412) && (jetzt.gUa<=2000)) { lcd.print("Gang: 4"); } else if((jetzt.gUw >= 3918) && (jetzt.gUw <= 4331) && (jetzt.gUa>=3000)) { lcd.print("Gang: 5"); } else if((jetzt.gUw >= 3918) && (jetzt.gUw <= 4331) && (jetzt.gUa<=2000)) { lcd.print("Gang: 6"); } else if((jetzt.gUw >=831) && (jetzt.gUw <=918) && (jetzt.gUa>=3000)) { lcd.print("Gang: R"); } else{ lcd.print("Gang: N"); } break; case 10: //Wenn A = 10 wird Toleranz: Ideal makiert lcd.setCursor(0, 0); lcd.print("> T: Ideal"); lcd.setCursor(0,1); lcd.print(" T: +5%"); lcd.setCursor(0,2); lcd.print(" T: -5%"); lcd.setCursor(0,3); lcd.print(" T: +10%"); break; case 20: //Wenn A = 20 wird Toleranz: +5% makiert lcd.setCursor(0,0); lcd.print(" T: Ideal"); lcd.setCursor(0,1); lcd.print("> T: +5%"); lcd.setCursor(0,2); lcd.print(" T: -5%"); lcd.setCursor(0,3); lcd.print(" T: +10%"); break; case 30: //Wenn A = 30 wird Toleranz: -5% makiert lcd.setCursor(0,0); lcd.print(" T: Ideal"); lcd.setCursor(0,1); lcd.print(" T: +5%"); lcd.setCursor(0,2); lcd.print("> T: -5%"); lcd.setCursor(0,3); lcd.print(" T: +10%"); break; case 40: //Wenn A = 40 wird Toleranz: +10% makiert lcd.setCursor(0,0); lcd.print(" T: +5%"); lcd.setCursor(0,1); lcd.print(" T: -5%"); lcd.setCursor(0,2); lcd.print("> T: +10%"); lcd.setCursor(0,3); lcd.print(" T: -10%"); break; case 50: //Wenn A = 50 wird Toleranz: -10% makiert lcd.setCursor(0,0); lcd.print(" T: +5%"); lcd.setCursor(0,1); lcd.print(" T: -5%"); lcd.setCursor(0,2); lcd.print(" T: +10%"); lcd.setCursor(0,3); lcd.print("> T: -10%"); break; case 11: //Wenn A = 11 wird 1. Gang makiert lcd.setCursor(0, 0); lcd.print("> auf 1.Gang"); lcd.setCursor(0,1); lcd.print(" auf 2.Gang"); lcd.setCursor(0,2); lcd.print(" auf 3.Gang"); lcd.setCursor(0,3); lcd.print(" auf 4.Gang"); break; case 12: //Wenn A = 12 wird 2. Gang makiert lcd.setCursor(0,0); lcd.print(" auf 1.Gang"); lcd.setCursor(0,1); lcd.print("> auf 2.Gang"); lcd.setCursor(0,2); lcd.print(" auf 3.Gang"); lcd.setCursor(0,3); lcd.print(" auf 4.Gang"); break; case 13: //Wenn A = 13 wird 3. Gang makiert lcd.setCursor(0,0); lcd.print(" auf 1.Gang"); lcd.setCursor(0,1); lcd.print(" auf 2.Gang"); lcd.setCursor(0,2); lcd.print("> auf 3.Gang"); lcd.setCursor(0,3); lcd.print(" auf 4.Gang"); break; case 14: //Wenn A = 14 wird 4. Gang makiert lcd.setCursor(0,0); lcd.print(" auf 2.Gang"); lcd.setCursor(0,1); lcd.print(" auf 3.Gang"); lcd.setCursor(0,2); lcd.print("> auf 4.Gang"); lcd.setCursor(0,3); lcd.print(" auf 5.Gang"); break; case 15: //Wenn A = 15 wird 5. Gang makiert lcd.setCursor(0,0); lcd.print(" auf 3.Gang"); lcd.setCursor(0,1); lcd.print(" auf 4.Gang"); lcd.setCursor(0,2); lcd.print("> auf 5.Gang"); lcd.setCursor(0,3); lcd.print(" auf 6.Gang"); break; case 16: //Wenn A = 16 wird 6. Gang makiert lcd.setCursor(0,0); lcd.print(" auf 4.Gang"); lcd.setCursor(0,1); lcd.print(" auf 5.Gang"); lcd.setCursor(0,2); lcd.print("> auf 6.Gang"); lcd.setCursor(0,3); lcd.print(" auf R"); break; case 17: //Wenn A = 17 wird R Gang makiert lcd.setCursor(0,0); lcd.print(" auf 5.Gang"); lcd.setCursor(0,1); lcd.print(" auf 6.Gang"); lcd.setCursor(0,2); lcd.print("> auf R"); lcd.setCursor(0,3); lcd.print(" auf N"); break; case 18: //Wenn A = 18 wird N Gang makiert lcd.setCursor(0,0); lcd.print(" auf 5.Gang"); lcd.setCursor(0,1); lcd.print(" auf 6.Gang"); lcd.setCursor(0,2); lcd.print(" auf R"); lcd.setCursor(0,3); lcd.print("> auf N"); break; case 110: //Wenn A = 110 wird die Schaltzeit angezeigt lcd.setCursor(0,0); lcd.print(" Schaltzeit:"); lcd.setCursor(0,1); lcd.print(schaltzeit); lcd.setCursor(0,2); break; default: lcd.setCursor(0,0); lcd.print("Glückwunsch!"); lcd.setCursor(0,1); lcd.print("Du hast das Pro-"); lcd.setCursor(0,2); lcd.print("gramm kaputt"); lcd.setCursor(0,3); lcd.print("gemacht! :-D"); break; } int buttonEnterState=LOW; // Der Zustand der Buttons int buttonEscState=LOW; int buttonLeftState=LOW; int buttonRightState=LOW; reading = digitalRead(buttonPinEnter); // Debounce der Buttons if (reading != lastButtonEnterState) { lastEnterDebounceTime = millis(); } if ((millis() - lastEnterDebounceTime) > debounceDelay) { buttonEnterState=reading; lastEnterDebounceTime=millis(); } lastButtonEnterState = reading; reading = digitalRead(buttonPinEsc); if (reading != lastButtonEscState) { lastEscDebounceTime = millis(); } if ((millis() - lastEscDebounceTime) > debounceDelay) { buttonEscState = reading; lastEscDebounceTime=millis(); } lastButtonEscState = reading; reading = digitalRead(buttonPinRight); if (reading != lastButtonRightState) { lastRightDebounceTime = millis(); } if ((millis() - lastRightDebounceTime) > debounceDelay) { buttonRightState = reading; lastRightDebounceTime =millis(); } lastButtonRightState = reading; reading = digitalRead(buttonPinLeft); if (reading != lastButtonLeftState) { lastLeftDebounceTime = millis(); } if ((millis() - lastLeftDebounceTime) > debounceDelay) { buttonLeftState = reading; lastLeftDebounceTime=millis(); } lastButtonLeftState = reading; if (buttonEnterState==HIGH){ lastButtonPushed=buttonPinEnter; } else if(buttonEscState==HIGH){ lastButtonPushed=buttonPinEsc; } else if(buttonRightState==HIGH){ lastButtonPushed=buttonPinRight; } else if(buttonLeftState==HIGH){ lastButtonPushed=buttonPinLeft; } else{ lastButtonPushed=0; } ////////////////////////////// Taster /////////////////////////////////// //menu key down if (buttonRightState==HIGH ) { if((A == 10) || (A == 20) || (A == 30)|| (A == 40)) { //Wenn A zwischen 10 und 40 ist und Button wird gedrückt, wird A um 10 größer A = A + 10; } else if((A == 11) || (A == 12) || (A == 13) || (A == 14) || (A == 15) || (A == 16) || (A == 17)) { //Wenn A zwischen 11 und 17 ist und Button wird gedrückt, wird A um 1 größer A = A + 1; } else if(A == 110){ //Wenn A = 110 und Button wird gedrückt, wird Schaltzeit um 100ms länger schaltzeit = schaltzeit + 100; } } //menu key up if (buttonLeftState==HIGH) { if((A == 20) || (A == 30) || (A == 40)|| (A == 50)) { //Wenn A zwischen 20 und 50 ist und Button wird gedrückt, wird A um 10 kleiner A = A - 10; } else if((A == 12) || (A == 13) || (A == 14) || (A == 15) || (A == 16) || (A == 17) || (A == 18)) { //Wenn A zwischen 12 und 18 ist und Button wird gedrückt, wird A um 1 kleiner A = A - 1; } else if( A == 110 ){ //Wenn A = 110 und Button wird gedrückt, wird Schaltzeit um 100ms kürzer schaltzeit = schaltzeit - 100; } } //menu key ok if (buttonEnterState==HIGH) { switch(A){ case 0: A = 10; break; case 10: //Wenn A=10 und Button wird gedrückt, wird Toleranz 0% und A=11 toleranz=0; A=11; break; case 20: //Wenn A=20 und Button wird gedrückt, wird Toleranz +5% und A=11 toleranz=5; A=11; break; case 30: //Wenn A=30 und Button wird gedrückt, wird Toleranz -5% und A=11 toleranz=-5; A=11; break; case 40: //Wenn A=40 und Button wird gedrückt, wird Toleranz +10% und A=11 toleranz=10; A=11; break; case 50: //Wenn A=50 und Button wird gedrückt, wird Toleranz -10% und A=11 toleranz=-10; A=11; break; case 11: //Wenn A=11 und Button wird gedrückt, wird gespeichert, dass auf den 1. Gang gewechselt werden soll und A=110 gang = 1; A=110; break; case 12: //Wenn A=12 und Button wird gedrückt, wird gespeichert, dass auf den 2. Gang gewechselt werden soll und A=110 gang = 2; A=110; break; case 13: //Wenn A=13 und Button wird gedrückt, wird gespeichert, dass auf den 3. Gang gewechselt werden soll und A=110 gang = 3; A=110; break; case 14: //Wenn A=14 und Button wird gedrückt, wird gespeichert, dass auf den 4. Gang gewechselt werden soll und A=110 gang = 4; A=110; break; case 15: //Wenn A=15 und Button wird gedrückt, wird gespeichert, dass auf den 5. Gang gewechselt werden soll und A=110 gang = 5; A=110; break; case 16: //Wenn A=16 und Button wird gedrückt, wird gespeichert, dass auf den 6. Gang gewechselt werden soll und A=110 gang = 6; A=110; break; case 17: //Wenn A=17 und Button wird gedrückt, wird gespeichert, dass auf den R Gang gewechselt werden soll und A=110 gang = 7; A=110; break; case 18: //Wenn A=18 und Button wird gedrückt, wird gespeichert, dass auf den N Gang gewechselt werden soll und A=110 gang = 8; A=110; break; case 110: switch(gang){ case 1: if((jetzt.gUw >= 2018) && (jetzt.gUw <= 2231) && (jetzt.gUa<=2000)){ //Auf den 1. Gang umschalten, wenn man im 2. ist jetzt = umschaltfkt( zweiter, neutral, erster, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 3087) && (jetzt.gUw <= 3412) && (jetzt.gUa>=3000)){ //Auf den 1. Gang umschalten, wenn man im 3. ist jetzt = umschaltfkt( dritter, neutral, erster, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 3087) && (jetzt.gUw <= 3412) && (jetzt.gUa<=2000)){ //Auf den 1. Gang umschalten, wenn man im 4. ist jetzt = umschaltfkt( vierter, neutral, erster, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 3918) && (jetzt.gUw <= 4331) && (jetzt.gUa>=3000)){ //Auf den 1. Gang umschalten, wenn man im 5. ist jetzt = umschaltfkt( fuenfter, neutral, erster, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 3918) && (jetzt.gUw <= 4331) && (jetzt.gUa<=2000)){ //Auf den 1. Gang umschalten, wenn man im 6. ist jetzt = umschaltfkt( sechster, neutral, erster, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >=831) && (jetzt.gUw <=918) && (jetzt.gUa>=3000)){ //Auf den 1. Gang umschalten, wenn man im R ist jetzt = umschaltfkt( rueck, neutral, erster, schaltzeit, toleranz ); A = 0; } else{ //Auf den 1. Gang umschalten, wenn man im N ist jetzt = umschaltfkt( neutral, neutral, erster, schaltzeit, toleranz ); A = 0; } break; case 2: if((jetzt.gUw >= 2018) && (jetzt.gUw <= 2231) && (jetzt.gUa>=3000)){ //Auf den 2. Gang umschalten, wenn man im 1. ist jetzt = umschaltfkt( erster, neutral, zweiter, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 3087) && (jetzt.gUw <= 3412) && (jetzt.gUa>=3000)){ //Auf den 2. Gang umschalten, wenn man im 3. ist jetzt = umschaltfkt( dritter, neutral, zweiter, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 3087) && (jetzt.gUw <= 3412) && (jetzt.gUa<=2000)){ //Auf den 2. Gang umschalten, wenn man im 4. ist jetzt = umschaltfkt( vierter, neutral, zweiter, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 3918) && (jetzt.gUw <= 4331) && (jetzt.gUa>=3000)){ //Auf den 2. Gang umschalten, wenn man im 5. ist jetzt = umschaltfkt( fuenfter, neutral, zweiter, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 3918) && (jetzt.gUw <= 4331) && (jetzt.gUa<=2000)){ //Auf den 2. Gang umschalten, wenn man im 6. ist jetzt = umschaltfkt( sechster, neutral, zweiter, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >=831) && (jetzt.gUw <=918) && (jetzt.gUa>=3000)){ //Auf den 2. Gang umschalten, wenn man im R ist jetzt = umschaltfkt( rueck, neutral, zweiter, schaltzeit, toleranz ); A = 0; } else{ //Auf den 2. Gang umschalten, wenn man im N ist jetzt = umschaltfkt( neutral, neutral, zweiter, schaltzeit, toleranz ); A = 0; } break; case 3: if((jetzt.gUw >= 2018) && (jetzt.gUw <= 2231) && (jetzt.gUa>=3000)){ //Auf den 3. Gang umschalten, wenn man im 1. ist jetzt = umschaltfkt( erster, neutral, dritter, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 2018) && (jetzt.gUw <= 2231) && (jetzt.gUa<=2000)){ //Auf den 3. Gang umschalten, wenn man im 2. ist jetzt = umschaltfkt( zweiter, neutral, dritter, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 3087) && (jetzt.gUw <= 3412) && (jetzt.gUa<=2000)){ //Auf den 3. Gang umschalten, wenn man im 4. ist jetzt = umschaltfkt( vierter, neutral, dritter, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 3918) && (jetzt.gUw <= 4331) && (jetzt.gUa>=3000)){ //Auf den 3. Gang umschalten, wenn man im 5. ist jetzt = umschaltfkt( fuenfter, neutral, dritter, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 3918) && (jetzt.gUw <= 4331) && (jetzt.gUa<=2000)){ //Auf den 3. Gang umschalten, wenn man im 6. ist jetzt = umschaltfkt( sechster, neutral, dritter, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >=831) && (jetzt.gUw <=918) && (jetzt.gUa>=3000)){ //Auf den 3. Gang umschalten, wenn man im R ist jetzt = umschaltfkt( rueck, neutral, dritter, schaltzeit, toleranz ); A = 0; } else{ //Auf den 3. Gang umschalten, wenn man im N ist jetzt = umschaltfkt( neutral, neutral, dritter, schaltzeit, toleranz ); A = 0; } break; case 4: if((jetzt.gUw >= 2018) && (jetzt.gUw <= 2231) && (jetzt.gUa>=3000)){ //Auf den 4. Gang umschalten, wenn man im 1. ist jetzt = umschaltfkt( erster, neutral, vierter, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 2018) && (jetzt.gUw <= 2231) && (jetzt.gUa<=2000)){ //Auf den 4. Gang umschalten, wenn man im 2. ist jetzt = umschaltfkt( zweiter, neutral, vierter, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 3087) && (jetzt.gUw <= 3412) && (jetzt.gUa>=3000)){ //Auf den 4. Gang umschalten, wenn man im 3. ist jetzt = umschaltfkt( dritter, neutral, vierter, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 3918) && (jetzt.gUw <= 4331) && (jetzt.gUa>=2000)){ //Auf den 4. Gang umschalten, wenn man im 5. ist jetzt = umschaltfkt( fuenfter, neutral, vierter, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 3918) && (jetzt.gUw <= 4331) && (jetzt.gUa<=2000)){ //Auf den 4. Gang umschalten, wenn man im 6. ist jetzt = umschaltfkt( sechster, neutral, vierter, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >=831) && (jetzt.gUw <=918) && (jetzt.gUa>=3000)){ //Auf den 4. Gang umschalten, wenn man im R ist jetzt = umschaltfkt( rueck, neutral, vierter, schaltzeit, toleranz ); A = 0; } else{ //Auf den 4. Gang umschalten, wenn man im N ist jetzt = umschaltfkt( neutral, neutral, vierter, schaltzeit, toleranz ); A = 0; } break; case 5: if((jetzt.gUw >= 2018) && (jetzt.gUw <= 2231) && (jetzt.gUa>=3000)){ //Auf den 5. Gang umschalten, wenn man im 1. ist jetzt = umschaltfkt( erster, neutral, fuenfter, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 2018) && (jetzt.gUw <= 2231) && (jetzt.gUa<=2000)){ //Auf den 5. Gang umschalten, wenn man im 2. ist jetzt = umschaltfkt( zweiter, neutral, fuenfter, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 3087) && (jetzt.gUw <= 3412) && (jetzt.gUa>=3000)){ //Auf den 5. Gang umschalten, wenn man im 3. ist jetzt = umschaltfkt( dritter, neutral, fuenfter, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 3918) && (jetzt.gUw <= 4331) && (jetzt.gUa>=2000)){ //Auf den 5. Gang umschalten, wenn man im 4. ist jetzt = umschaltfkt( vierter, neutral, fuenfter, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 3918) && (jetzt.gUw <= 4331) && (jetzt.gUa<=2000)){ //Auf den 5. Gang umschalten, wenn man im 6. ist jetzt = umschaltfkt( sechster, neutral, fuenfter, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >=831) && (jetzt.gUw <=918) && (jetzt.gUa>=3000)){ //Auf den 5. Gang umschalten, wenn man im R ist jetzt = umschaltfkt( rueck, neutral, fuenfter, schaltzeit, toleranz ); A = 0; } else{ //Auf den 5. Gang umschalten, wenn man im N ist jetzt = umschaltfkt( neutral, neutral, fuenfter, schaltzeit, toleranz ); A = 0; } break; case 6: if((jetzt.gUw >= 2018) && (jetzt.gUw <= 2231) && (jetzt.gUa>=3000)){ //Auf den 6. Gang umschalten, wenn man im 1. ist jetzt = umschaltfkt( erster, neutral, sechster, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 2018) && (jetzt.gUw <= 2231) && (jetzt.gUa<=2000)){ //Auf den 6. Gang umschalten, wenn man im 2. ist jetzt = umschaltfkt( zweiter, neutral, sechster, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 3087) && (jetzt.gUw <= 3412) && (jetzt.gUa>=3000)){ //Auf den 6. Gang umschalten, wenn man im 3. ist jetzt = umschaltfkt( dritter, neutral, sechster, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 3087) && (jetzt.gUw <= 3412) && (jetzt.gUa<=2000)){ //Auf den 6. Gang umschalten, wenn man im 4. ist jetzt = umschaltfkt( vierter, neutral, sechster, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 3918) && (jetzt.gUw <= 4331) && (jetzt.gUa>=3000)){ //Auf den 6. Gang umschalten, wenn man im 5. ist jetzt = umschaltfkt( fuenfter, neutral, sechster, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >=831) && (jetzt.gUw <=918) && (jetzt.gUa>=3000)){ //Auf den 6. Gang umschalten, wenn man im R ist jetzt = umschaltfkt( rueck, neutral, sechster, schaltzeit, toleranz ); A = 0; } else{ //Auf den 6. Gang umschalten, wenn man im N ist jetzt = umschaltfkt( neutral, neutral, sechster, schaltzeit, toleranz ); A = 0; } break; case 7: if((jetzt.gUw >= 2018) && (jetzt.gUw <= 2231) && (jetzt.gUa>=3000)){ //Auf R umschalten, wenn man im 1. ist jetzt = umschaltfkt( erster, neutral, rueck, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 2018) && (jetzt.gUw <= 2231) && (jetzt.gUa<=2000)){ //Auf R umschalten, wenn man im 2. ist jetzt = umschaltfkt( zweiter, neutral, rueck, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 3087) && (jetzt.gUw <= 3412) && (jetzt.gUa>=3000)){ //Auf R umschalten, wenn man im 3. ist jetzt = umschaltfkt( dritter, neutral, rueck, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 3087) && (jetzt.gUw <= 3412) && (jetzt.gUa<=2000)){ //Auf R umschalten, wenn man im 4. ist jetzt = umschaltfkt( vierter, neutral, rueck, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 3918) && (jetzt.gUw <= 4331) && (jetzt.gUa>=3000)){ //Auf R umschalten, wenn man im 5. ist jetzt = umschaltfkt( fuenfter, neutral, rueck, schaltzeit, toleranz ); A = 0; } else if((jetzt.gUw >= 3918) && (jetzt.gUw <= 4331) && (jetzt.gUa<=2000)){ //Auf R umschalten, wenn man im 6. ist jetzt = umschaltfkt( sechster, neutral, rueck, schaltzeit, toleranz ); A = 0; } else{ //Auf R umschalten, wenn man im N ist jetzt = umschaltfkt( neutral, neutral, rueck, schaltzeit, toleranz ); A = 0; } break; case 8: if((jetzt.gUw >= 2018) && (jetzt.gUw <= 2231) && (jetzt.gUa>=3000)){ //Auf N umschalten, wenn man im 1. ist jetzt = umschaltN( erster, schaltzeit, toleranz); } else if((jetzt.gUw >= 2018) && (jetzt.gUw <= 2231) && (jetzt.gUa<=2000)){ //Auf N umschalten, wenn man im 2. ist jetzt = umschaltN(zweiter, schaltzeit, toleranz); } else if((jetzt.gUw >= 3087) && (jetzt.gUw <= 3412) && (jetzt.gUa>=3000)){ //Auf N umschalten, wenn man im 3. ist jetzt = umschaltN(dritter,schaltzeit,toleranz); } else if((jetzt.gUw >= 3087) && (jetzt.gUw <= 3412) && (jetzt.gUa<=2000)){ //Auf N umschalten, wenn man im 4. ist jetzt = umschaltN(vierter,schaltzeit,toleranz); } else if((jetzt.gUw >= 3918) && (jetzt.gUw <= 4331) && (jetzt.gUa>=3000)){ //Auf N umschalten, wenn man im 5. ist jetzt = umschaltN(fuenfter,schaltzeit,toleranz); } else if((jetzt.gUw >= 3918) && (jetzt.gUw <= 4331) && (jetzt.gUa<=2000)){ //Auf N umschalten, wenn man im 6. ist jetzt = umschaltN(sechster,schaltzeit,toleranz); } else{ jetzt = umschaltN(rueck,schaltzeit,toleranz); //Auf N umschalten, wenn man im R ist } break; default: break; } } } //menu key ESC if ( buttonEscState==HIGH) { if((A == 11) || (A == 12) || (A == 13) || (A == 14) || (A == 15) || (A == 16) || (A == 17) || (A == 18)) { //Wenn A zwischen 11 und 18 ist und Button wird gedrückt, wird A = 10 A = 10; } else if(A > 100) { //Wenn A größer 100 ist und Button wird gedrückt, wird A = 11 A = 11; } else if((A == 10) ||(A == 20) || (A == 30) || (A == 40) || (A == 50)) { //Wenn A zwischen 10 und 50 ist und Button wird gedrückt, wird A = 0 A = 0; } else if(A == 110) { //Wenn A=110 und Button wird gedrückt, wird A = 11 A = 11; } } } gang_s umschaltfkt( gang_s j[], gang_s n[], gang_s w[], int t, int tol ) //Funktion zum Umschalten zwischen den Gängen { lcd.clear(); int pwma; //Wert für Ua Ausgabe int pwmw; //Wert für Uw Ausgabe int time; //Wert für Delay int tabs; //Wert für Delayberechnung gang_s soll; int a; //Wert für Umschaltung zwischen jetzt.gUa und neutral.gUa int d; int b; //Werte zum Erkennen im welchen Uw sich der jetztige und gewünschte Gang befinden int c; int e; int f; int x; int y; soll.gUw = (w[20].gUw + ((w[20].gUw * tol)/100)); soll.gUa = (w[20].gUa + ((w[20].gUa * tol)/100)); for( b = 0; b < 20; b++ ){ // Es wird erkannt im welchen Uw bereich der jetzige Gang ist for(x = 0; x < 20; x++){ c++; if(j[b].gUw == n[x].gUw){ break; } } } for( d = 0; d < 20; d++ ){ // Es wird erkannt im welchen Uw bereich der gewünschte Gang ist for(y = 0; y <20; y++){ if(w[d].gUw == n[y].gUw){ e++; break; } } } tabs = c - e; // Es wird berechnet wieviele Schritte zwischen Uwjetzt und Uwsoll sind time = ( t/(abs(tabs)+42)); // Es wird berechnet wie lang das Delay sein muss if (j[20].gUa != n[20].gUa){ // Wenn Uajetzt größer als Uaneutral ist: for( a = 20; a > 0; a--) { pwma = (((j[a].gUa)>>4)-(j[a].gUa>>7)-(j[a].gUa>>8)); // PWM Signal für Ua wird berechnet pwma = (pwma + ((pwma * tol)/100)); // Die Toleranz wird dazugerechnet pwmw = (((j[a].gUw)>>4)-(j[a].gUw>>7)-(j[a].gUw>>8)); // PWM Signal für Uw wird berechnet pwmw = (pwmw + ((pwmw * tol)/100)); // Die Toleranz wird dazugerechnet lcd.setCursor(0, 0); lcd.print((j[a].gUw + ((j[a].gUw*tol)/100))); // Uw auf dem Display angezeigt lcd.setCursor(0,1); lcd.print((j[a].gUa + ((j[a].gUa*tol)/100))); // Ua auf dem Display angezeigt analogWrite(uaPinPWM, pwma); // PWM Signal ausgegeben analogWrite(uwPinPWM, pwmw); delay(time); } } if( c > e){ // Wenn das Uwjetzt > Uwsoll ist do{ // Wird pwmw = (((n[c].gUw)>>4)-(n[c].gUw>>7)-(n[c].gUw>>8)); // PWM Signal für Uw wird berechnet pwmw = (pwmw + ((pwmw * tol)/100)); // Die Toleranz wird dazugerechnet pwma = (((n[c].gUa)>>4)-(n[c].gUa>>7)-(n[c].gUa>>8)); // PWM Signal für Ua wird berechnet pwma = (pwma + ((pwma * tol)/100)); // Die Toleranz wird dazugerechnet lcd.setCursor(0, 0); lcd.print((n[c].gUw + ((n[c].gUw*tol)/100))); // Uw auf dem Display angezeigt lcd.setCursor(0, 1); lcd.print((n[c].gUa + ((n[c].gUa*tol)/100))); // Uw auf dem Display angezeigt analogWrite(uwPinPWM, pwmw); // PWM Signal ausgegeben analogWrite(uaPinPWM, pwma); c--; // Der nächste Wert ausgewählt } while(n[c].gUw > n[e].gUw) ; // Solange Uwsoll nicht erreicht wird } else if (e > c){ // Wenn das Uwjetzt < Uwsoll ist do{ // Wird pwmw = (((n[c].gUw)>>4)-(n[c].gUw>>7)-(n[c].gUw>>8)); // PWM Signal für Uw berechnet pwmw = (pwmw + ((pwmw * tol)/100)); // Die Toleranz wird dazugerechnet pwma = (((n[c].gUa)>>4)-(n[c].gUa>>7)-(n[c].gUa>>8)); // PWM Signal für Uw berechnet pwma = (pwma + ((pwma * tol)/100)); // Die Toleranz wird dazugerechnet lcd.setCursor(0, 0); lcd.print((n[c].gUw + ((n[c].gUw*tol)/100))); // Uw auf dem Display angezeigt lcd.setCursor(0,1); lcd.print((n[c].gUa + ((n[c].gUa*tol)/100))); // Ua auf dem Display angezeigt analogWrite(uwPinPWM, pwmw); // PWM Signal ausgegeben analogWrite(uaPinPWM, pwma); c++; // Der nächste Wert ausgewählt } while(n[e].gUw > n[c].gUw) ; // Solange Uwsoll nicht erreicht wird } for( d = 0; d < 20; d++){ pwma = (((w[d].gUa)>>4)-(w[d].gUa>>7)-(w[d].gUa>>8)); // Der PWM Signal für Ua wird berechnet pwma = (pwma + ((pwma * tol)/100)); // Die Toleranz wird dazugerechnet pwmw = (((w[d].gUw)>>4)-(w[d].gUw>>7)-(w[d].gUw>>8)); // Der PWM Signal für Uw wird berechnet pwmw = (pwmw + ((pwmw * tol)/100)); // Die Toleranz wird dazugerechnet lcd.setCursor(0, 0); lcd.print(w[d].gUw); // Uw auf dem Display anzeigen lcd.setCursor(0,1); lcd.print(w[d].gUa); // Ua auf dem Display anzeigen analogWrite(uaPinPWM, pwma); // PWM Signal wird ausgeben analogWrite(uwPinPWM, pwmw); delay(time); } A=0; return soll; // Der gewünschte Wert ist die Rückgabe } gang_s umschaltN(gang_s j[],int t,int tol){ //Funktion zum Umschalten auf N int pwmw; // Wert für PWM Signal für Uw int pwma; // Wert für PWM Signal für Ua int a; // Wert für die Umschaltung gang_s soll; soll.gUw = (j[0].gUw + ((j[0].gUw * tol)/100)); soll.gUa = (j[0].gUa + ((j[0].gUa * tol)/100)); for( a = 20; a > 0; a--) { pwmw = (((j[a].gUw)>>4)-(j[a].gUw>>7)-(j[a].gUw>>8)); // Der PWM Signal für Uw wird berechnet pwmw = (pwmw + ((pwmw * tol)/100)); // Die Toleranz wird dazugerechnet pwma = (((j[a].gUa)>>4)-(j[a].gUa>>7)-(j[a].gUa>>8)); // Der PWM Signal für Ua wird berechnet pwma = (pwma + ((pwma * tol)/100)); // Die Toleranz wird dazugerechnet lcd.setCursor(0, 0); lcd.print((j[a].gUw + ((j[a].gUw*tol)/100))); // Uw wird auf dem Display angezeigt lcd.setCursor(0,1); lcd.print((j[a].gUa + ((j[a].gUa*tol)/100))); // Ua wird auf dem Display angezeigt analogWrite(uwPinPWM, pwmw); // PWM Signal ausgeben analogWrite(uaPinPWM, pwma); delay(t/21); } return j[0]; // Ein Punkt von N Gang ist die Rückgabe }
Зарание спасибо!
Какое то июльское обострение на почве функций?
Туши свет, они на свет лезут.
А идея что оно рисует, но быстро и глазом не видно, вас не посещала?
Не думаю что кто будет читать вашу 1000 строк фигню с коментами на немецком.
да, об этом я тоже думал, но проблема в том что даже если сделать так, чтоб функция длилась к примеру 20сек, мы все равно поподаем толко на последнее число.
и да, наверно многие(или скорее всего все) не прочитают, но надежда умирает последней)))
Да никто не будет это читать и вникать. Код для постепенной перерисовки цыфр не может быть на 1000+ строк. Это бред а не код.
код не только это делает. проблема появляется толко там где он должен это делать. а так в программе меню и оно занимает так много места. В общем, программа симулирует сенсор переключения скоростей.
Фраза "когда я в loop начинаю функ. она делает не все что должна" как бы и дает ответ.
Вот я Вам отвечаю, но Вы как бы не всё понимаете, что я Вам отвечаю.
то что ошибка скорее всего там я вроде как и сам понял, поэтому в первую очередь ее код и отправил, но вопрос: где?
мои предположение указывают на вот это:
Но если ошибка тут, то как ее исправить?
Ладно, давайте сузим наш область поиска ошибки. Ошибка находится именно в функции с вероятностью 99.9%
Проблема у нас иммено с delay и вероятнее всего в числe в скобках. Значит по логике ошибка должна находится где то тут:
Если вам поможет, я могу перевести вам коменты, но в общем в них не такая трудная или важная инфо. так как вы почти в каждой теме на этом форуме успели появится, я пологаю что вы хорошо разбираетесь в программах и надеюсь на вашу помощь
Мне не нужно переводить. Я не собираюсь сидеть вникать в чужой спагети код. Я злой.
Меня злит человеческая тупость. Попробую аналогии, когда разрабатывают нечто большое и сложное, то сначала делают и отлаживают маленькие модули , по отдельности! И когда каждый модуль сам по себе работает, их начигают собирать в кучку, постепенно.
А не валят все запчамти в кучу с целью поиграть в игру "плпробуй отгадай что тут глючит"
Не понятно? Ну тогда ОЙ.
Хорошо, раз мы злые, то вот вам тупой вопрос, что значит "она делает не все что должна.", мы тут все скучающие телепаты, которые сидят, ничего не делают и только ждут, когда маленькие добренькие дети придут и что то спросят, а мы их сожрем!
"она делает не все что должна."
А что именно именно она не делает?
А если не понятен вопрос, то ответьте на мой вопрос, сколько ступенек на лестничной площадке между первым и вторым этажом?
А что она должна? Как давно? И каковы проценты? Будем пытать паяльником что вернула че должна.
Ну да, мы тут все полиглоты, немецкий знаем в совершенстве, код по 100 строк читаем с листа, а 1200 строке - вообще влет. У нас же времени дофига, мы же спецы, гуру, Эйнштейны и т.п. Хотя мы тупые, каких то сто строк не нашли время разобрать, зато пишем целыми днями всякие какашки и всем должны.
Меня доктор пытал как то спагети кодом на несколько сотен строк. И до сих пор чуть че соазу угрожать начинает, типа будешь с советами лезть, выдам спагети на пару тысяч строк. Он жесток и страшен.
"она делает не все что должна."
А что именно именно она не делает?
А если не понятен вопрос, то ответьте на мой вопрос, сколько ступенек на лестничной площадке между первым и вторым этажом?
давайте я попробую еще раз. Программа должна симулировать сенсор переключения скоростей. Она состоит из: меню(работает) и 2 функций(почти работает). В функции произходит следуйшее: Медленно, программа должна симулировать смену скорости что она и делает, но как я успел понять, ошибку я сделал в разсчете delay и досих пор не могу понять где и как. В общем по логике ошибка должна быть тут:
почему то delay у меня получается 0 и я не понимаю почему, ведь вроде как он должен был его посчитать
Ну так выводите в терминал значения и найдете свою ошибку в расчетах.
как я понял вы из германии, может сможете это на немецкий перевести? "терминал значения" в жизни не слышал.. ок, нет все таки слышал. Я не уверен в том что ошибка в array а скорее в самом подсчете. Но за совет спасибо
Хех :) Это два разных слова: Выводите в терминал полученные программой значения ))))
Перевожу на русский. Для полных танкистов.
Отладочные строчки вставь и смотри в терминале что там насчитывается
Ой, простите)) не правильно из контекста понял) почему то выводит 0.. как такое вообще возможно? В array точно есть одинаковое число, то есть он должен где то сдеалть стоп.
подружитесь с командами Serial.print("xxx"); и Serial.println("xxxx"); Они Вам сэкономят сотни строк кода, бессонные ночи и "ругательства матом громко и внятно когда вся семья уже спит"
Пальцем в небо
time = ((double)t) / (tabs + 42);
Второе, у Вас t всегда больше чем 42?
подружитесь с командами Serial.print("xxx"); и Serial.println("xxxx"); Они Вам сэкономят сотни строк кода, бессонные ночи и "ругательства матом громко и внятно когда вся семья уже спит"
именно этим и восползовался чтоб понять что у меня в 0 выходит))
Пальцем в небо
time = ((double)t) / (tabs + 42);
Второе, у Вас t всегда больше чем 42?
нет об этом не подумал, но даже когда было больше (к примеру 10000) ничего не изменялось
ну спасибо за советы, за разговоры добрые)) настроение уж tочно поднять смогли ну а дальше я наверно сам как нибудь попробую. если опять в тупике окажусь обязательно вам на нервы подействую))
Нам на нервы трудно подействовать. Тут скорее что у вас нервов хватило наши советы понимать.
О це дило, тупиковыми ответами мы завсегда отоварить рады!
Рекомендую:
1. Имена переменных, функций, параметров использовать нормальные, например:
2. Комментарии везде писать не нужно, достаточно описания главного и тонких мест
3. Перед выкладыванием скетча в форум, форматируйте его хотя бы нажимая Ctrl-T в ArduinoIDE, так он (текст скетча) более просто читается. Это сократит время тем, кто "заинтересуется" Вашим вопросом и попробует разобраться.
4. Старайтесь прочитать свой вопрос нашими глазами. Т.е. представьте себя на нашем месте. Подумайте, что Вы видите, что Вы делаете, а мы этого не видим.
Хотя бы учтите эти мелочи и Вам будет намного проще общаться на форуме.
Gelingen
Надеюсь не ошибся с пожеланием, немецкого практически не знаю :)