-         

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 34

Thema: Pogramierschierigkeiten

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    05.03.2008
    Beiträge
    17

    Pogramierschierigkeiten

    Anzeige

    Hi ich habe zu Weihnachten den Robby Rp6gekriegt
    aber hatte in letzter Zeit nicht soviel Zeit dafür sodass ich letzte Woche mal angefangen habe ein kleines Programm zu schreiben und zwar will ich ein bischen mit dem Robby über die serielle Schnittstelle reden.
    So an einer Stelle hake ich jetzt. Und zwar will ich, dass wenn der Lichtsensor 1000oder höher ist soll er sagen, dass es ihm zu hell ist. Bei unter 400 soll er mir sagen, dass ich das Licht anmachen soll.
    Ich hatte das auch hingekriegt, allerding hat er mir alle 100ms gesagt wie das Licht gerade ist.Ich will aber, dass er sich nur meldet wenn sich das Licht verändert...
    Ich habe es nochmal neu versucht aber so eine richtige Idee habe ich nicht.


    Code:
    include "RP6RobotBaseLib.h" 
    
    
     void outputTextStuff(void)
     {
       writeString_P("\nGuten Tach, ich bin der Robby");
       light();
     
       
     }
    
    
     void light(void)
     {
     if(adcLSR<400)
      {
        writeString_P("\nMach das Licht an!\n");
      }
      else if((adcLSR<1000)&&(adcLSR>400))
      {
      writeString_P("\nDie Lichtverhältnisse hier sind wirklich gut. So lässt es sich Leben:)!\n");
      }
      else
      {
      writeString_P("\nMir ist es hier zu hell!\n");
      }
     }
    	
    
     
     int main (void)
     {
        initRobotBase();
    	outputTextStuff();
    
        
    	while(true)
    	{
    	task_ADC();
    	}
        
    	return 0;
     }

    Soweit bin ich jetzt allerdings sagt der mir jetzt nur einmal ob ich das Licht anmachen soll.
    Vielleicht kann mir ja jemand helfen...
    mfg efbrgn

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    10.08.2007
    Beiträge
    47
    Hi,

    die light() methode gehoert in die while(true){} Schleife.
    Zusaetzlich musst Du den Wert des ADC in eine Variable speichern. Dann mit letztem Speicherwert vergleichen. Wenn sich der Zustand geaendert hat, Meldung ausgeben und den Wert neu speichern, andernfalls nichts tun ...

    hth
    Kay

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    05.03.2008
    Beiträge
    17
    da gibt es aber noch ein Problem und zwar soll dass ja nicht geschrieben werden, wenn der Wert sich ändert, sondern nur wann er die 100 bzw. 400er Marke überschreitet.Ist das auch möglich??

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.11.2003
    Beiträge
    1.111
    Kay hat schon recht. Wenn Du den Aufruf der Funktion richtigerweise in die while-Schleife schreibst, würde er unentwegt seinen Text senden. Das willst Du ja nicht, oder? Es reicht ja, wenn er es einmal bei jeder Über- bzw. Unterschreitung tut.
    Anderenfalls müsstest Du den Aufruf mit einem Timer auslösen.
    Gruß

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    05.03.2008
    Beiträge
    17
    Zitat Zitat von Gock
    Kay hat schon recht. Wenn Du den Aufruf der Funktion richtigerweise in die while-Schleife schreibst, würde er unentwegt seinen Text senden. Das willst Du ja nicht, oder? Es reicht ja, wenn er es einmal bei jeder Über- bzw. Unterschreitung tut.
    genauso will ich das machen, aber wie mache ich das???
    nach der Art und Weise von Kay würde er ja bei jeder Abweichung das Lichtsensor etwas melden, und das wäre ja alle paar Selunden. Aber er soll es nur bei ganz besimmten Punkte medlen(400,100). Und habe ich keine Idee wie man das machen könnte.
    mfg efbrgn

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.10.2007
    Ort
    Solingen
    Alter
    25
    Beiträge
    177
    hi,

    Code:
    include "RP6RobotBaseLib.h"
    
    
     void outputTextStuff(last)
     {
       writeString_P("\nGuten Tach, ich bin der Robby");
       light(last);
     
       
     }
    
    
     void light(last)
     {
    
     if(adcLSR<400 && last > 400)
      {
        writeString_P("\nMach das Licht an!\n");
      }
      else if(((adcLSR<1000)&&(adcLSR>400)) && ((last <400) && last > 1000)))
      {
      writeString_P("\nDie Lichtverhältnisse hier sind wirklich gut. So lässt es sich Leben:)!\n");
      }
      if (adcLSR>1000 && last < 1000)
      {
      writeString_P("\nMir ist es hier zu hell!\n");
      }
    last = adcLSR;
     }
       
    
     
     int main (void)
     {
        initRobotBase();
       uint16_t last;
       outputTextStuff(last);
    
       startStopwatch1();
       while(true)
       {
    
       task_ADC();
       if (getStopwatch() > 100)
        {
         outputTextStuff(last);
         setStopwatch(0);
         }
       }
    
       return 0;
     }

    So in etwa müsste es funktionieren, habe den Code aber nicht getestet.
    Ich habe eine Stopwatch verwendet, damit, wenn sie auf 100 ist die abfrage erfolgt, jetzt wird getestet ob "last" anders ist als adcLSR und den rest habe ich von dir übernommen.


    MfG blenderkid[/code]

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.10.2007
    Ort
    Solingen
    Alter
    25
    Beiträge
    177
    uups jetzt habe ich ne neue Frage gfunden, habe das mit dem (100,400 ) nicht gesehen, also du möchtest ,dass er nur neu misst wenn es dunkler wird?
    Nicht wenn es sich ins helle verwandelt?

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    05.03.2008
    Beiträge
    17
    ne nicht ganz, er soll schon messen, die ganze Zeit immer. Aber er soll mir dass nua sagen wenn seine Werte 400unterschreiten oder 1000überschreiten... und dann auch nua einmal und ich 10mal in der Sekunde

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.10.2007
    Ort
    Solingen
    Alter
    25
    Beiträge
    177
    ok dann is mein code eig richtig.

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.11.2004
    Ort
    Aachen
    Alter
    32
    Beiträge
    246
    Wen du einfach den Zustand speicherst (also genau richtig, zu hell, zu dunkel), kannst du einfach überprüfen, ob dieser sich geändert hat. Wenn dies der Fall ist, gibst du die entsprechende Meldung aus.

    Beispiel:

    Code:
    unsigned char brightOld = 0;
    void light(void){
    
     unsigned char bright;
    
     if(adcLSR<400){
        bright = 1;
     }
     else if((adcLSR<1000)&&(adcLSR>400)){
        bright = 0;
     }
     else{
        bright = 2;
     }
    
     if(bright != brightOld){
        switch(bright){
           case 0:
              writeString_P("\nDie Lichtverhältnisse hier sind wirklich gut. So lässt es sich Leben:)!\n");
              break;
           case 1:
              writeString_P("\nMach das Licht an!\n");
              break;
           case 2:
              writeString_P("\nMir ist es hier zu hell!\n");
              break;
        }
     }
    
     brightOld = bright;
    
    }
    Die müsste dann aus der while-Schleife aufgerufen werden.

    mfg
    zerush

    EDIT: sorry, hab jetzt ers gesehn, dass schon soviele neuen Antworten kamen... naja aber mehrere Möglichkeiten schaden ja nicht

Seite 1 von 4 123 ... LetzteLetzte

Berechtigungen

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