Variable hat komischen wert

Hi, ich habe ein problem unzwar baue ich gerade ein kleines Auto mit meinem Arduino Uno von AZdelivery. Jetzt habe ich in mein script eingebunden das das auto selber die Volt zahl der batterie misst und dan halt mir diese als % Zahl angibt. Das problem ist nur das jetzt eine Zahl raus kommt die zwar dem akku stand angepasst ist aber halt nicht in dem angegebenen format, z.B. 90% sollen raus kommen er gibt mir aber 290% aus.
PS: bin Anfänger also bitte nicht wundern wenn der code vileicht ein wenig komisch geschriben ist.
Hier mein script:

#include <Servo.h>
Servo lenkung;
Servo esc;
int PWM_MotorPINin = 11;
int PWM_ServoPINin = 10;
int speed = 1;
int speedB = 1;
char data;
char c;
int akku;
int akkku;

void setup() {
Serial.begin(9600);

 pinMode(PWM_MotorPINin, INPUT);
 pinMode(PWM_ServoPINin, INPUT);
 pinMode(0, INPUT);
 
 lenkung.attach(6);
 esc.attach(5);
 
 esc.write(10);
 delay(5000);
 }

void loop() {

 
 if(Serial.available()>0)
   {     
      data= Serial.read(); // reading the data received from the bluetooth module
      analogRead(0);
      switch(data)
      {
        

       //steuerung
       case 'B': //rückwerts
         esc.write(speedB);
        break;

        case 'F': //Vorwehrts
         esc.write(speed);
        break;

        case 'L': //Links
         lenkung.write(150);
        break;

        case 'R': //Rechts
         lenkung.write(70);
        break;

        case 'A':                                     //Hier wird der akku stand gemessen
         akku = analogRead(0);
         Serial.println(akku);

         if(akku > 329.2){
          akkku = "100";
         }
         Serial.print(akkku);
         Serial.println("%");

         if((akku < 329.2) && (akku > 314.4)){
          akkku = "90";                                             //hier wird die komische zahl generirt obwohl da
                                                                             //ganz klar 90 steht
         }
         Serial.print(akkku);
         Serial.println("%");

         if((akku < 314.4) && (akku > 299.6)){
          akkku = "80";
         }
         Serial.print(akkku);
         Serial.println("%");

         if((akku < 299.6) && (akku > 284.8)){
          akkku = "70";
         }
         Serial.print(akkku);
         Serial.println("%");

         if((akku < 284.8) && (akku > 270)){
          akkku = "60";
         }
         Serial.print(akkku);
         Serial.println("%");

         if((akku < 270) && (akku > 255.2)){
          akkku = "50";
         }
         Serial.print(akkku);
         Serial.println("%");

         if((akku < 255.2) && (akku > 240.4)){
          akkku = "40";
         }
         Serial.print(akkku);
         Serial.println("%");

         if((akku < 240.4) && (akku > 225.6)){
          akkku = "30";
         }
         Serial.print(akkku);
         Serial.println("%");

         if((akku < 225.6) && (akku > 210.8)){
          akkku = "20";
         }
         Serial.print(akkku);
         Serial.println("%");

         if((akku < 210.08) && (akku > 196)){
          akkku = "10";
         }
         
         Serial.print(akkku);
         Serial.println("%");
        break;




        //RC
        case 'C': //RC Mode               //FEHLER
         
        while (Serial.available()>0) { 
         do {
          
          lenkung.write(150);

         } while (Serial.read() != "u");
        lenkung.write(95); 
        break;  
        }
        break;
          

        
        
        
        
        //stop
        case 'S': //Motor stop
         esc.write(1496);
        break;

        case 'H': //Lenkung stop
         lenkung.write(100);
        break;






        //speed
        case '0': 
         speed = 1496;
         speedB = 1496;
        break;

        case '1': 
         speed = 1447;
         speedB = 1542;
        break;

       case '2': 
         speed = 1398;
         speedB = 1588;
        break;

        case '3': 
         speed = 1349;
         speedB = 1634;
        break;

        case '4': 
         speed = 1300;
         speedB = 1680;
        break;

        case '5': 
         speed = 1251;
         speedB = 1726;
        break;

        case '6': 
         speed = 1202;
         speedB = 1772;
        break;

        case '7': 
         speed = 1153;
         speedB = 1818;
        break;

       case '8': 
         speed = 1104;
         speedB = 1864;
        break;

        case '9': 
         speed = 1053;
         speedB = 1910;
        break;


        
        default : break;
      }
      Serial.println(data);
   }
   delay(00);


}

Achso danke im voraus :smiley:

akkku ist eine ganze Zahl, keine string

int akku;
int akkku;  // <<=== ganze Zahl

..

        akku = analogRead(0);
        Serial.println(akku);

        if (akku > 329.2) {
          akkku = "100";
        }

akkku = 100;

1 Like

ok danke ich versuch es mal moment

natürlich überall zu modifizieren

Denken Sie auch daran if-else zu verwenden

Hallo,
ich versuche mal es Dir zu erklären. Mit dem Uno kannst Du so wie Du das gemacht hast eine Spannung von 0 bis maximal 5Volt messen. Das entspricht einem digitalen Messwert von 0-1023. Wenn Du aus diesem Messwert jetzt eine Anzeige in Volt machen willst musst Du das erst umrechnen. Das geht mit einem Dreisatz oder mit der map() Funktion. Letztere ist extra für sowas “erfunden” worden. Was die wie macht kannst Du z.B in der Hilfe / Referenz der Aruino IDE nachlesen.
Jetzt kommt es noch darauf an was Dein Akku für eine Spannung hat wenn er voll ist. Das soll dann ja 100% sein. Also 100% sind nicht 5V sonder die Spannung deines vollen Akkus. Das kannst Du dann gleich mit in die map() Funktion mit einfließen lassen und den ganzen Kram mit den if… Abfragen sein lassen.
Heinz

vielen dank es hat so funktionirt :smiley:

Das mit dem 3satz habe ich alles ausgerechnet habe das mit einem adapter gemacht da der akku mehr als 5V hat, so wie du schon gesagt hast das man die if abfragen weg lassen kann geht bestimmt auch, so reicht es mir aber auch ( auch wenns schlechter ist so wie ich es gemacht habe)

das hatte ich mir vorgestellt

akku = analogRead(0);
Serial.println(akku);

if (akku > 329)       akkku = 100;
else if (akku > 314)  akkku = 90;
else if (akku > 299)  akkku = 80;
else if ...

Serial.print(akkku); Serial.println("%");
1 Like

ok, habe es jetzt erstmal so gelassen halt ohne die “” werde aber später mal drauf zurück greifen vielen dank :wink:

Wenn Sie es so lassen, wie Sie es geschrieben haben, erhalten Sie viele “print()”. (Sie Wollen nur einen ‘print’)

1 Like

Achso ja das war nur zum test damit ich herausfinde wo es nicht geht habe das schon raus ( war nur ne hilfestellung) :wink:

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.