- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 12

Thema: Ein Drehregler und ein Arduino Nano

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    Leider tut es das nicht Siro .

    Ich nehme aber mal an, es liegt an dem Rest von meinem Sketch. Diese Variante funktioniert zum Beispiel, auch wenn sie immer gleich 2 Schritte hochzählt:

    Code:
    int c = 0;
    int State;
    
    void setup() 
    {
      Serial.begin(9600);
    
      pinMode(3, INPUT);
      pinMode(4, INPUT);
    }
    
    void loop() 
    {
      int aState = digitalRead(3);
    
      if(State != aState)
      {  
         if(digitalRead(4) != aState)
         {
          c++;
         }
         else c--;
      }
    
      State = aState;
      
      Serial.println(c);
    }
    Da zählt er problemlos hoch und runter. Benutze ich aber folgenden Sketch, wobei ich an dem Aufbau der Hardware nichts ändere, funktioniert es manchmal abwärts, fast gar nicht aufwärts und gelegentlich zählt er auch wieder hoch, wenn er runtergezählt hat. Vielleicht kannst du darin ja ein Problem erkennen.

    Code:
    #include <Arduino.h>
    #include <U8g2lib.h>
    
    #ifdef U8X8_HAVE_HW_SPI
    #include <SPI.h>
    #endif
    #ifdef U8X8_HAVE_HW_I2C
    #include <Wire.h>
    #endif
    
    U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
    
    #define A 3
    #define B 4
    #define FIRE 2
    
    float volt = 7.4;
    float maximum = 8.4;
    float aktuell = 8.4;
    
    int Flag;
    int toInterval = 5000;
    
    long timeout = toInterval;
    long time = 0;
    
    void setup(void) 
    {
      u8g2.begin();
    
      pinMode(A, INPUT);
      pinMode(B, INPUT);
      pinMode(FIRE, INPUT);
    }
    
    void loop(void) 
    {
      time = millis();
      ui();  
    
      u8g2.clearBuffer();
    
      //  akkustand();
    
      if(time < timeout)
      {
        u8g2.setFont(u8g2_font_crox3h_tf);
        u8g2.setFontRefHeightExtendedText();
        u8g2.setDrawColor(1);
        u8g2.setFontPosTop();
        u8g2.setFontDirection(0);
      
        u8g2.drawStr(18, 0, "K2-Box V 0.3");
        u8g2.drawLine(0, 18, 128, 18);
        u8g2.drawLine(0, 50, 128, 50);
      
        power();
      
      //  debug();
      }
    
      u8g2.sendBuffer();
    }
    
    void power()
    {
      String p = String(volt) + "V";
    
      u8g2.setFont(u8g2_font_ncenR18_tr);
    
      u8g2.drawStr(30, 25, p.c_str());
    }
    
    void akkustand()
    {
      float proz = aktuell * 100 / maximum;
    
      int stand = 128 - round(128 * proz / 100);
    
      u8g2.drawBox(stand, 50, 128, 64);
    }
      
    void debug()
    {
      u8g2.setFont(u8g2_font_t0_11_tf);
    
      String ausgabe;
    
      ausgabe = String(digitalRead(A)) + " " + String(digitalRead(FIRE)) + " " + String(digitalRead(B));
    
      u8g2.drawStr(0, 52, ausgabe.c_str());
    
      String check;
    
      if(digitalRead(A) == LOW) check = "-";
      if(digitalRead(B) == LOW) check = "+";
     
      u8g2.drawStr(50, 52, check.c_str());
    }
    
    void ui()
    {
      if(digitalRead(A) == HIGH)
      {
        Flag = LOW;
        return;
      }
    
      if(Flag == HIGH) return;
    
      Flag= HIGH;
    
      if(digitalRead(B)) volt += 0.05;
      else volt -= 0.05;
    }
    Das Schlimme daran ist, das komplette Projekt steht und fällt mit diesem Regler...

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Das große Problem ist, dass Dir vermutich Signale abhanden kommen, da in deinem Programm doch noch "reichlich" anderer Code ausgeführt wird.
    Alleine die Floating Point Berechnungen auf dem kleinen 8 Bit Controller fressen schon viel Zeit.
    dann sehe ich da Grafikfunktionen. Das schafft der Controller nicht mit dieser Programmiertechnik,
    da kommt man eigentlich nicht drumherum mit Interrupts für den Impulsgeber zu arbeiten.
    Du könntest Dir eventuell noch behelfen indem Du so oft wie möglich deine ui Funktion aufrufst,
    quasi nach jeder anderen Softwarezeile, sieht kacke aus und das macht man eigentlich auch nicht, aber Versuchs mal.

    Code:
    void loop(void) 
    {
      time = millis();
      ui();  
    
      u8g2.clearBuffer();
      ui();  
    
      //  akkustand();
    
      if(time < timeout)
      {
        u8g2.setFont(u8g2_font_crox3h_tf);
      ui();  
        u8g2.setFontRefHeightExtendedText();
      ui();  
        u8g2.setDrawColor(1);
      ui();  
        u8g2.setFontPosTop();
      ui();  
        u8g2.setFontDirection(0);
      ui();    
        u8g2.drawStr(18, 0, "K2-Box V 0.3");
      ui();  
        u8g2.drawLine(0, 18, 128, 18);
      ui();  
        u8g2.drawLine(0, 50, 128, 50);
      ui();    
        power();
        ui();  
      //  debug();
      }

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    Irgendwie habe ich mir das schon gedacht. Nun, dann sollte ich mir das mit den Interrupts mal genauer anschauen. Kann ja nicht schaden wenn man das versteht. Wenn nicht, mit den vielen ui() würde es mit Sicherheit funktionieren. Sieht aber tatsächlich sehr unschön aus. Wenn das alles nicht hilft, werde ich wohl abspecken müssen. Gibt noch andere, harmloserer Libs, um das Display anzusteuern. Sieht dann aber nicht mehr so schön aus, also die Anzeige. Aber besser als wenn es gar nicht funktioniert.

    - - - Aktualisiert - - -

    Jetzt bin ich etwas erschüttert! Nach 5 Minuten lesen musste ich feststellen, die Interrupts sind ja gar keine Herausforderung! Jetzt habe ich meinen Sketch auf Interrupt umgestellt und man glaubt es kaum, es funktioniert perfekt!

    Vielen, vielen Dank für deine Hilfe!

Ähnliche Themen

  1. Antworten: 9
    Letzter Beitrag: 08.01.2018, 16:30
  2. Verkaufe Arduino Nano V3.0 mit Atmega328
    Von razer6 im Forum Kaufen, Verkaufen, Tauschen, Suchen
    Antworten: 0
    Letzter Beitrag: 08.05.2017, 15:25
  3. Arduino Nano mit ESP-201
    Von hirnfrei im Forum Arduino -Plattform
    Antworten: 23
    Letzter Beitrag: 21.11.2016, 20:05
  4. Roboter mit ARDUINO NANO
    Von stochri im Forum Arduino -Plattform
    Antworten: 13
    Letzter Beitrag: 23.10.2015, 20:47
  5. Arduino Nano mit Uno aus/einschalten
    Von SoulRaiZor im Forum Arduino -Plattform
    Antworten: 8
    Letzter Beitrag: 24.05.2015, 09:45

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests