Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » PIC Programm

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
30.05.2008, 16:12 Uhr
~whoop
Gast


Hallo zusammen!

Ich arbeite an einer Fütterungsmaschine. Das ganze soll mit einer Hardware(Lichtschranke, Moter, etc) und einer Software laufen!
Die Software ist mit der Sprache C geschrieben und der Code wird auf einen PIC(18F... falls wichtig nenn ich euch den ganzen Typ-Namen) gebrannt.

Kurze erklärung:
Maschine: Die Maschine hat eine Eingabeplattform(Tastatur) und 8 Futterfächer.

Quellcode: Die Software soll jedem Futterfach eine einstellbare Zeit bieten(z.b.: 13:45). Damit nun die nächste Fütterung festgestellt werden kann gibt es auch die Eingabe der jetztigen Zeit(z.b.: 13:00). Jetzt sollen von allen Fächern die Zeiten mit der jetztigen Zeit verglichen werden, um die nächste Fütterung festzustellen. Hinzu kommt noch ein "Zufallsmodus" welcher eine zufallszahl zu der nächsten Fütterungszeit dazu addieren soll.Und genau hier liegt das Problem.

Ich habe für alle Fächer eine eigene Funktion, sowie für die nächste Fütterung/zufallsmodus.
Ich möchte jedoch meine neue programmierte nächste Fütterungszeit/zufallsmodus in ins hauptmenü einbinden. im hauptmenü steht das drinnen was man beim aufdrehen der Maschine ganz zu beginn am Display sehen soll - sprich die Nächste Fütterung/Zufallsmodus.

Irgendwie klappt das nicht so ganz bei mir und ich weis nicht woran es liegt. Wenn ich diese nächste fütterungs funktion einfach ins hauptmenü schreibe bleib ich jedoch im Hauptmenü und kann nicht zu den Fächern wechseln ...

Ich hoffe ihr könnt mir weiter helfen - wäre euch über alles dankbar.



mit freundlichen grüßen,
whoop
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
31.05.2008, 07:33 Uhr
ao

(Operator)


Also noch mal zum Verständnis:

8 Fächer, 8 programmierte Fütterungszeiten, eine laufende Uhrzeit. Wenn eine Fütterungszeit erreicht ist (Zeit mit Uhrzeit vergleichen), lässt du Futter ins Fach purzeln.

Zu jeder programmierten Zeit kann eine zufällige Verspätung addiert werden.

Das Programm muss also nur ständig acht Zeitvergleiche durchführen, und bei Erreichen einer der Zeiten die entsprechende Reaktion auslösen. Die Vergleichszeiten sind zufälligen Schwankungen unterworfen.

So weit richtig? Wo ist jetzt das Problem?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
31.05.2008, 10:14 Uhr
~whoop
Gast


Hallo,

also hier einmal ein bild der tastatur(grafik):


1-8: futterfächer
9: wenn man in einem Fach ist oder in der Uhrzeit funktion wird mit dem drücken auf "+" immer +1 zur zeit dazu addiert --> eben zum einstellen
10: wenn man in einem Fach ist oder in der Uhrzeit funktion wird mit dem drücken auf "-" immer -1 zur zeit dazu addiert --> eben zum einstellen
11: unbelegt
12: beim drücken auf zufall erscheint am display "Zufallsmodus: Ein" nochmal drücken auf zufall "Zufallsmodus: Aus" nochmal drücken ein ... aus ... ein ... usw
13: beim drücken auf zeit wird die Uhrzeit eingestellt
14: unbelegt
15: unbelegt
16: beim drücken auf start werden die werte übernommen. z.b.: man drückt fach 3 --> stellt dort "13:45" ein und drückt anschließen auf start um den Wert zu übernehmen. danach springt das programm ins hauptmenü

Das hauptmenü kommt sofort nach dem start des gerätes auf den display und sieht so aus:
__________________________
|Nächste Fütterung: |
|XX:XX Zufall: Aus|
------------------------------

vom hauptmenü muss man eben nur die fächer drücken und man kommt quasi überallhin und wieder zurück zum hauptmenü.
Problem: wenn ich meine neue funktion als hauptmenü einbinden möchte komm ich nicht mehr zu den fächer - will nicht springen


mit freundlichen grüßen,
whoop
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
31.05.2008, 10:15 Uhr
~whoop
Gast


sorry hier der link der grafik

www.bilder-hochladen.net/files/6ulh-2.jpg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
31.05.2008, 10:29 Uhr
~whoop
Gast


hier der code von der neuen funktion:


Code:


void fachrandom() -- Hier ist meine nächste fütterungs + zufall funktion
{
   int taste=0;
   char text1[20]="Randomzahl:\0";
   char text2[20]="\0";
   char text3[20]="\0";
   char text4[20]="\0";
   char text5[20]="\0";
   char text6[20]="\0";
   char text7[20]="\0";
   char text8[20]="\0";
   char text9[20]="\0";

   char hour2[20]="\0";
   char hour3[20]="\0";
   char hour4[20]="\0";
   char hour5[20]="\0";
   char hour6[20]="\0";
   char hour7[20]="\0";
   char hour8[20]="\0";
   char hour9[20]="\0";

   char min2[20]="\0";
   char min3[20]="\0";
   char min4[20]="\0";
   char min5[20]="\0";
   char min6[20]="\0";
   char min7[20]="\0";
   char min8[20]="\0";
   char min9[20]="\0";

   char zumin5[20]="\0";
   char zumin6[20]="\0";
   char zumin7[20]="\0";

   char zuhour5[20]="\0";
   char zuhour6[20]="\0";
   char zuhour7[20]="\0";
   char zuhour8[20]="\0";
  
   char zufamin5[20]="\0";
   char zufamin6[20]="\0";
   char zufamin7[20]="\0";

   char aktuell[20]="akt:\0";
   char addiert[20]="rand:";
   char next[20]="Nextfeed:";
   char TEST[20]="RAND-AKTIVIERT!";
   char nuller[3]="\0";

   char buf[20]="\0";
   char buf1[20]="\0";
   int hour_next=0;
   int min_next=0;
   int sec_next=0;


   //RL- Zeit -- braucht man um die Uhrzeit einzustellen
   rtc_get_time(hour_next,min_next,sec_next);
   hour_next=decimal(hour_next);
   min_next=decimal(min_next);



   lcd_cls();
   lcd_println(1,1, next);
   //Stunden
   sprintf(hour2, "%d", fach1_hour);
   sprintf(hour3, "%d", fach2_hour);
   sprintf(hour4, "%d", fach3_hour);
   sprintf(hour5, "%d", fach4_hour);
   sprintf(hour6, "%d", fach5_hour);
   sprintf(hour7, "%d", fach6_hour);
   sprintf(hour8, "%d", fach7_hour);
   sprintf(hour9, "%d", fach8_hour);
   //Minuten
   sprintf(min2, "%d", fach1_min);
   sprintf(min3, "%d", fach2_min);
   sprintf(min4, "%d", fach3_min);
   sprintf(min5, "%d", fach4_min);
   sprintf(min6, "%d", fach5_min);
   sprintf(min7, "%d", fach6_min);
   sprintf(min8, "%d", fach7_min);
   sprintf(min9, "%d", fach8_min);

   sprintf(zumin5,"%d", fach5_min_neu);
   sprintf(zumin6,"%d", fach6_min_neu);
   sprintf(zumin7,"%d", fach7_min_neu);

   sprintf(zuhour5,"%d", fach5_hour_neu);
   sprintf(zuhour6,"%d", fach6_hour_neu);
   sprintf(zuhour7,"%d", fach7_hour_neu);
   sprintf(zuhour8,"%d", fach8_hour_neu);

   sprintf(zufamin5,"%d", fach5_min_zufall);
   sprintf(zufamin6,"%d", fach6_min_zufall);
   sprintf(zufamin7,"%d", fach7_min_zufall);

   sprintf(nuller,"%d", anzeige);
   if(rand_onoff == 0) -- wenn zufall auf "aus" steht
   {
   while(1) -- hier wird die nächste fütterung mit if anweisungen ermittelt(test nur mit fach 5-7!!)
   {
      if(fach5_hour > hour_next)// && (fach5_min > min_next))
      {
         lcd_println(1,2, hour6);
         lcd_move_cursor(3,2);
         lcd_write_char(':');
         lcd_println(4,2, nuller);
         lcd_println(5,2, nuller);
         if(fach5_min > min_next)
         {
            lcd_println(4,2, min6);
         }
      }
         else
         {
            if(fach6_hour > hour_next)// && (fach6_min > min_next))
            {
               lcd_println(1,2, hour7);
               lcd_move_cursor(3,2);
               lcd_write_char(':');
               lcd_println(4,2, nuller);
               lcd_println(5,2, nuller);
               if(fach6_min > min_next)
               {
                  lcd_println(4,2, min7);
               }
            }
               else
               {
                  if(fach7_hour > hour_next)// && (fach7_min > min_next))
                  {
                     lcd_println(1,2, hour8);
                     lcd_move_cursor(3,2);
                     lcd_write_char(':');
                     lcd_println(4,2, nuller);
                     lcd_println(5,2, nuller);
                     if(fach7_min > min_next)
                     {
                        lcd_println(4,2, min8);
                     }
                  }
               }
         }


      taste=tastatur(0);
      if(taste==16)
      {
         nextfeed_time();
         apply_data();
         break;
      }
    }
   }
   else
   {
      if(rand_onoff == 1) -- wenn zufall "ein" ist
      {
         //lcd_println(1,6, TEST);
         zufallswert01=rand();
         zufallswert=zufallswert01*2;
         fach5_min_zufall=zufallswert+fach5_min;
         fach6_min_zufall=zufallswert+fach6_min;
         fach7_min_zufall=zufallswert+fach7_min;
                 if(fach5_hour > hour_next)// && (fach5_min > min_next)) --- //if(fach5_hour_neu > hour_next)
         {
            lcd_println(1,2, hour5);
            lcd_move_cursor(3,2);
            lcd_write_char(':');
            lcd_println(4,2, nuller);
            lcd_println(5,2, nuller);
            if(fach5_min_zufall > min_next)
            {
               lcd_println(4,2, zufamin5);
            }
            //lcd_println(1,2, TEST);
         }
         else
         {
            if(fach6_hour > hour_next)// && (fach6_min > min_next))
            {
               lcd_println(1,2, hour6);
               lcd_move_cursor(3,2);
               lcd_write_char(':');
               lcd_println(4,2, nuller);
               lcd_println(5,2, nuller);
               if(fach6_min_zufall > min_next)
               {
                  lcd_println(4,2, zufamin6);
               }
            }
               else
               {
                  if(fach7_hour > hour_next)// && (fach7_min > min_next))
                  {
                     lcd_println(1,2, hour7);
                     lcd_move_cursor(3,2);
                     lcd_write_char(':');
                     lcd_println(4,2, nuller);
                     lcd_println(5,2, nuller);
                     if(fach7_min_zufall > min_next)
                     {
                        lcd_println(4,2, zufamin7);
                     }
                  }
               }
         }
      }


      taste=tastatur(0);
      if(taste==16)
      {
         nextfeed_time();
         apply_data();
         break;
      }
   }
}



 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.06.2008, 12:56 Uhr
~whoop
Gast


Hallo

Kann mir jemand helfen?
Ich hab zwei Uhrzeiten:
Fütterungszeit: 13:30
Uhrzeit(jetzt): 13:00

Jetzt wird bei meinem Projekt die Fütterungszeit "13:30" korrekt ausgegeben. Jedoch wenn ich "Zufallsmodus: Ein" habe sollen zu dieser Fütterungszeit ein randomwert dazu addiert werden z.b.: "13:45". Das funktioniert auch soweit, wenn ich aber jetzt die Fütterungszeit änder so ändert sich die Zufallszahl nicht mit ... :-/ es bleibt daher weiterhin "13:45" obwohl ich die Fütterungszeit auf "13:40" geändert hab.

Brauche dringend Hilfe!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: