warning: converting to 'int' form 'double' gerne wegbekommen



  • Hallo,
    wenn ich nun mein code compiliere meldet er mich die warnung in den Zeilen 228-230; und noch die warnung ungenutze Variable in zeile 229/230 ( die ist klar wird zurzeit noch nichts benutzt)
    Ich wollte die strings szeit, mzeit und vzeit in int haben da ich diese im programm vergleiche.
    Ich weis das längere codes nicht gern gesehen sind aber ich weis nu nicht was unbedingt wichtig ist und setzte deswegen lieber alles rein.

    /*
     * testprogramm fuer die BWCT-steuerung 2.2.2008
     */
    #include <iostream>
    #include <ctime>
    #include <panel.h>
    #include <curses.h>
    #include <cstdlib>
    //#include <stdlib.h>
    #include <bwctmb/bwctmb.h>
    
    using namespace std;
    
    int main (int argc, char *argv[]);
    
    //***** Speicherfreigabe der Panel/Fenster *****
    WINDOW  *whaupt, *wjalou, *wheiz, *wlicht, *wsteck,
    	*wwasser, *waussenlicht, *whinter, *wzeit,
    	*wschalt, *wjalouschalt;
    PANEL   *phaupt, *pjalou, *pheiz, *plicht, *psteck,
    	*pwasser, *paussenlicht, *phinter, *pzeit,
    	*pschalt, *pjalouschalt;
    
    //***** Schützen die Daten die von mehreren Threads genurt werden können *****
    static Mutex jaloutausch;
    static Mutex zeitvergleich;
    
    //***** unsere Daten *****
    SArray<bool> jaloutast;
    char vzeit[9], szeit[3], mzeit[3]; // Zeitformen v=Tagstundenminutensekunden
    				   //            s=sekunden
    				   //            m=minuten
    
    //***** Bus IP des Jalousiesteuerungsmoduls *****
    Modbus mbja("192.168.0.150", "502");
    
    //***** Uhrzeit *****
    class Uhrzeit : public Thread
    	{
    	 virtual void *threadstart();
    	 virtual void threadend();
    	 void zeitabfrage();
    	};
    
    void * Uhrzeit::threadstart()
    	{
    	 log("Uhrzeit thread started");
    	 zeitabfrage();
    	 return NULL;
    	}
    
    void Uhrzeit::threadend()
    	{
    //	 delete this;
    	}
    
    void Uhrzeit::zeitabfrage()
    	{	 
    	 wzeit = newwin (1, 36, 23, 44);
    	 pzeit = new_panel(wzeit);
    	 wbkgd(wzeit, COLOR_PAIR(1));
    	 wattrset(wzeit, A_BOLD);
    	 for (;;)
    		{
    		 time_t zeit = time(NULL);
    		 tm *p_zeit = localtime(&zeit);
    		 char lzeit[36];
    		 strftime (lzeit, 36,
    		 "Es ist der %d %b %Y und %H:%M:%S", p_zeit);
    		 zeitvergleich.lock();
    		 strftime (vzeit, 8, "%u%H%M%S", p_zeit);
    		 strftime (szeit, 3, "%S", p_zeit);
    		 strftime (mzeit, 3, "%M", p_zeit);
    		 mvwaddstr(whaupt, 15, 15, vzeit);
    		 mvwaddstr(whaupt, 16, 15, szeit);
    		 mvwaddstr(whaupt, 17, 15, mzeit);
    		 zeitvergleich.unlock();
    		 mvwaddstr(wzeit, 0, 0, lzeit);
    	 	 wrefresh(wzeit);
     	 	 usleep(1000000);
    		}
    	}
    
    //***** Hintergrund *****
    void Hintergrund()
    	{
    	 whinter = newwin (24, 79, 0, 0);
    	 phinter = new_panel(whinter);
    	 wbkgd(whinter, COLOR_PAIR(1));
    	 wattrset (whinter, A_BOLD);
    	 mvwaddstr (whinter, 0, 24, "Steuerungsmenu / Homecontrol ");
    	 mvwaddstr (whinter, 23, 0, "ESC um Programm zu beenden");
    	 wrefresh(whinter);
    	}
    
    //***** Hauptmenu *****
    void Hauptmenu()
    	{
    	 whaupt = newwin (20, 79, 2, 0);//*** 20 Zeilen, 79 Spalten, y, x ***
    	 box(whaupt, 0, 0);//*** Zeichnet Box um Win ***
    	 phaupt = new_panel(whaupt);
    	 wbkgd(whaupt, COLOR_PAIR(3));//*** Fensterfarben (3) ***
    	 mvwaddstr(whaupt, 1, 5, "1 = Jalousiesteuerung");
    	 mvwaddstr(whaupt, 2, 5, "2 = Heizungssteuerung");
    	 mvwaddstr(whaupt, 3, 5, "3 = Lichtsteuerung");
    	 mvwaddstr(whaupt, 4, 5, "4 = Steckdosensteuerung");
    	 mvwaddstr(whaupt, 5, 5, "5 = Gartenbewaesserung");
    	 mvwaddstr(whaupt, 6, 5, "6 = Aussenbeleuchtung");
    	 mvwaddstr(whaupt, 7, 5, "7 = Temperatur/System");
    	 mvwaddstr(whaupt, 8, 5, "8 = Schaltzeiten");
    	 wrefresh(whaupt);
    	}
    
    //***** Schaltzeiten *****
    void Schaltzeiten()
    	{
    	 wschalt = newwin(14, 31, 3, 40);
    	 box(wschalt, 0, 0);
    	 pschalt = new_panel(wschalt);
    	 wbkgd(wschalt, COLOR_PAIR(2));
    	 mvwaddstr(wschalt, 1, 2, "1 = Jalousie");
    	 mvwaddstr(wschalt, 2, 2, "2 = Aussenlicht");
    	 mvwaddstr(wschalt, 12, 2, "Enter = Fenster schliessen");
    	 top_panel(phaupt);
    	 update_panels();
    	 doupdate();
    	 wrefresh(wschalt);
    	}
    
    //***** Jalousie schaltzeiten *****
    void Jalouschaltzeiten()
    	{
    	 wjalouschalt = newwin(18, 31, 3, 42);
    	 box(wjalouschalt, 0, 0);
    	 pjalouschalt = new_panel(wjalouschalt);
    	 wbkgd(wjalouschalt, COLOR_PAIR(4));
    	 mvwaddstr(wjalouschalt, 1, 2, "Montag Auf :");
    	 mvwaddstr(wjalouschalt, 2, 2, "Montag Ab  :");
    	 mvwaddstr(wjalouschalt, 16, 2, "Enter = Fenster schliesen");
    	 top_panel(phaupt);
    	 update_panels();
    	 doupdate();
    	 wrefresh(wjalouschalt);
    	}
    
    //***** JalouschaltzeitenVariablen *****
    class Jalousieschaltzeiten
    	{
    	 public:
    		char
    			montagauf[4], montagab[4],
    			dienstagauf[4], dienstagab[4],
    			mittwochauf[4], mittwochab[4],
    			donnerstagauf[4], donnerstagab[4],
    			freitagauf[4], freitagab[4],
    			samstagauf[4], samstagab[4],
    			sonntagauf[4], sonntagab[4];
    		void jalousiezeiten();
    	};
    
    void Jalousieschaltzeiten::jalousiezeiten(void)
    	{
    	 echo();
    	 mvwgetnstr(wjalouschalt, 1, 15, montagauf, 4);
    	 mvwgetnstr(wjalouschalt, 2, 15, montagab, 4);
    	 noecho();
    	} 
    
    //***** Jalousiemenu *****
    void Jaloumenu()
    	{
    	 wjalou = newwin (14, 31, 3, 40);
    	 box(wjalou, 0, 0); 
    	 pjalou = new_panel(wjalou);
    	 wbkgd(wjalou, COLOR_PAIR(2));
    	 mvwaddstr(wjalou, 1, 2, "1 = Jalousie Kueche");
    	 mvwaddstr(wjalou, 2, 2, "2 = Jalousie Kueche");
    	 mvwaddstr(wjalou, 3, 2, "3 = Jalousie Wohnzimmer");
    	 mvwaddstr(wjalou, 4, 2, "4 = Jalousie Wohnzimmer");
    	 mvwaddstr(wjalou, 5, 2, "5 = Jalousie Flur oben");
    	 mvwaddstr(wjalou, 6, 2, "6 = Jalousie Schlafzimmer");
    	 mvwaddstr(wjalou, 7, 2, "7 = Jalousie Buero");
    	 mvwaddstr(wjalou, 8, 2, "8 = Jalousie Bad");
    	 mvwaddstr(wjalou, 9, 2, "");
    	 mvwaddstr(wjalou, 10, 2, "0 = Jalousie allgemein");
    	 mvwaddstr(wjalou, 12, 2, "Enter = Fenster schliessen");
    	 top_panel(phaupt);
    	 update_panels();
    	 doupdate();
    	 wrefresh(wjalou);
    	}
    
    class Jalousiemodul : public Thread
    	{
    	 SArray<bool> inputsja;
    	 SArray<bool> outputsja;
    	 SArray<bool> outputsja_tmp;
    	 SArray<bool> inputsstandja;
    	 SArray<bool> outputsstandja;
    	 SArray<bool> jaloutaststand;
    	 SArray<bool> allejaloustand;
    	 SArray<int> zeitwertja;
    
    	 virtual void *threadstart();
    	 virtual void threadend();
    	 void jalousieabfrage();
    	};
    
    void * Jalousiemodul::threadstart()
    	{
    	 log("Abfrage thread started");
    	 jalousieabfrage();
    	 return NULL;
    	}
    
    void Jalousiemodul::threadend()
    	{
    //	 delete this;
    	}
    
    void Jalousiemodul::jalousieabfrage()
    	{
      	 for(;;)
    	 {
    	  try
    	  {
    	   //*** Zeit umwandeln von string in int ***
    	   int szeitint = atof(szeit);
    	   int mzeitint = atof(mzeit);
    	   int vintzeit = atof(vzeit);
    	   usleep(100000);
    
    //************************ Jalousiesteuerung/abfrage *********************
    
    	   inputsja = mbja.read_discrete_inputs(255, 0, 16);
    	   outputsja_tmp = outputsja = mbja.read_coils(255, 0, 16);
    
     	   int jaoua, jaoub;
    
    	   jaoua = 0;
    	   for(uint16_t i = 0; i < 8; i++)
    	   {
    	    jaoub = jaoua +1;
    	    wattron(wjalou, A_BLINK);
    	    if (outputsja[jaoua] > 0)
    	      {mvwaddstr(wjalou, i + 1, 27, "Auf");}
    	    else if (outputsja[jaoub] > 0)
    	      {mvwaddstr(wjalou, i + 1, 27, "Ab ");}
    	    else 
    	      {mvwaddstr(wjalou, i + 1, 27, "   ");}
    	    jaoua = jaoua +2;
    	   }
    
    //*** Jalousie 0 - 7 ***
    
    	   // Jalousieeingang 0-7 und Ausgang 0/1 - 14/15
    	jaoua = 0;
    	for (uint16_t i = 0; i < 8; i++)
    	  {
    	   jaoub = jaoua + 1;
    	   if (((jaloutast[i] > 0)|(inputsja[i] > 0 )) & !inputsstandja[i] & !jaloutaststand[i])
    	     {
                  if ((outputsja[jaoua] < 1) & (outputsja[jaoub] < 1))   
    	        {	
    	         if ((outputsstandja[i] < 1) & (outputsja[jaoua] < 1))
    		   {
    		    if (szeitint < 30)
    	              {zeitwertja[i] = szeitint;}
    		    else
    	              {zeitwertja[i] = szeitint - 60;}
    	  	    outputsja[jaoua] = 0;
    		    outputsja[jaoub] = 1;
    		    outputsstandja[i] = 1;
    		    allejaloustand[i] = 1;
    		   }  
    	         if ((outputsstandja[i] > 0) & (outputsja[jaoub] < 1))
    		   {
     		    if (szeitint < 30)
    	 	      {zeitwertja[i] = szeitint;}
    		    else
    		      {zeitwertja[i] = szeitint - 60;}
    		    outputsja[jaoua] = 1;
    		    outputsja[jaoub] = 0;
    		    outputsstandja[i] = 0;
    		    allejaloustand[i] = 1;
    		   }
    	        }
    	      else
    	        {outputsja[jaoua] = 0; outputsja[jaoub] = 0; allejaloustand[i] = 0;}				   
    	     }
    	   else
    	     {
    	      if (szeitint == (zeitwertja[i] + 30)) // nach 30 sek lauf ausschalten
    		{outputsja[jaoua] = 0; outputsja[jaoub] = 0; allejaloustand[i] = 0;}
    	     }
    	   inputsstandja[i] = inputsja[i];
    	   jaloutausch.lock();
    	   jaloutaststand[i] = jaloutast[i];
    	   jaloutausch.unlock();
    	   jaoua = jaoua + 2;
    	  }
    //***** ALLE Jalousien ******
    
    	   if (((jaloutast[8] > 0)|(inputsja[8] > 0)) & !inputsstandja[8] & !jaloutaststand[8])
    	     { 
    	      jaoua = 0;
                  if ((allejaloustand[0] < 1) & (allejaloustand[1] < 1) &
    		  (allejaloustand[2] < 1) & (allejaloustand[3] < 1) &
    		  (allejaloustand[4] < 1) & (allejaloustand[5] < 1) &
    		  (allejaloustand[6] < 1) & (allejaloustand[7] < 1))
    	        {
    	         if (allejaloustand[10] < 1)
    		   {
    		    for (uint16_t i = 0; i < 8; i++)
    		       {
    		        if (outputsja[jaoua] < 1)
    		          {
    			   jaoub = jaoua + 1;
    		           if (szeitint < 30)
    	                     {zeitwertja[i] = szeitint;}
    		           else
    	                     {zeitwertja[i] = szeitint - 60;}
    	  	           outputsja[jaoua] = 0;
    		           outputsja[jaoub] = 1;
    		           outputsstandja[i] = 1;
    	                   allejaloustand[i] = 1;
    			   jaoua = jaoua + 2;
    			   allejaloustand[10] = 1;
    		          }
    		       }
    		   }
    	         if (allejaloustand[10] > 0)
    		   {
      		    for (uint16_t i = 0; i < 8; i++)
      		       {
      			if (outputsja[jaoub] < 1)
      			  {
      			   jaoub = jaoua + 1;
      		           if (szeitint < 30)
      	 	             {zeitwertja[i] = szeitint;}
      		           else
      		             {zeitwertja[i] = szeitint - 60;}
      		           outputsja[jaoua] = 1;
      		           outputsja[jaoub] = 0;
      		           outputsstandja[i] = 0;
      			   allejaloustand[i] = 1;
     			   jaoua = jaoua + 2;
    			   allejaloustand[10] = 0;
    		          }
    		       }
    	           }
    		}
    	      else
    	        {
    		 jaoua = 0;
    		 for (uint16_t i = 0; i < 8; i++)
    		    {
    		     jaoub = jaoua + 1;
    		     outputsja[jaoua] = 0;
    		     outputsja[jaoub] = 0;
    		     allejaloustand[i] = 0;
    		     jaoua = jaoua + 2;
    		    }
    		}				   
    	     }
    	   inputsstandja[8] = inputsja[8];
    	   jaloutausch.lock();
    	   jaloutaststand[8] = jaloutast[8];
    	   jaloutausch.unlock();
    
    //*************************************
    	   // Schtreiben der Ausgänge wenn unterschiedlich
    	   for (uint16_t i = 0; i < 16; i++)
    	      {
    	       if (outputsja[i] != outputsja_tmp[i])
    	         {
    	          mbja.write_coil(255, i, outputsja[i]);
    	         }
    	      }
    	  }
    	  catch (std::exception& e)
    	  {
    	   // exception thrown is logged anyway
    	   sleep(3);
    	  }
    	 }
    	}
    
    void ende()
    	{
    	 endwin();
    	 cout <<"Programm beendet durch Benutzer\n";
    	}
    
    int main (int argc, char *argv[])
    	{
    	 initscr();
    	 timeout(0);
    	 atexit(ende);
    	 clear();
    	 noecho();
    	 curs_set(0);
    //	 cbreak();
    	 start_color();
    	 init_pair(1, COLOR_BLUE, COLOR_BLACK);
    	 init_pair(2, COLOR_GREEN, COLOR_BLACK);
    	 init_pair(3, COLOR_YELLOW, COLOR_BLACK);
    	 init_pair(4, COLOR_BLUE, COLOR_BLACK);
    	 Hintergrund();
    	 Hauptmenu();
    	 Schaltzeiten();
    	 Jalouschaltzeiten();
    	 Jaloumenu();
    
    	 // Thread Objekte erstellen
    	 Uhrzeit Uhrzeit_Thread;
    	 Jalousiemodul Jalousiemodul_Thread;
    	 Jalousieschaltzeiten amtaga;
    
    	 // Thread starten
    	 Uhrzeit_Thread.start();
    	 Jalousiemodul_Thread.start();
    
    	 int au=0, ha=0, ja=0, sc=0;
    	 for (;;)
    		{
    		 if (ha == 0) //***** Hauptauswahlmenu *****
    		   {
    		    au = getch();
    		    if (au == 27) break; //***ESC druck***
    		    if (au == 49) {top_panel(pjalou);ha=1;ja=1;}
    		    if (au == 56) {top_panel(pschalt);ha=1;sc=1;} 
    		   }
    		 if (ja == 1) //***** Jalousieauswahl *****
    		   {
    		    au = getch();	
    		    switch (au)
    		    {
    		     case 49: jaloutausch.lock();jaloutast[0]=1;jaloutausch.unlock(); break;
    		     case 50: jaloutausch.lock();jaloutast[1]=1;jaloutausch.unlock(); break;
    		     case 51: jaloutausch.lock();jaloutast[2]=1;jaloutausch.unlock(); break;
    		     case 52: jaloutausch.lock();jaloutast[3]=1;jaloutausch.unlock(); break;
    		     case 53: jaloutausch.lock();jaloutast[4]=1;jaloutausch.unlock(); break;
    		     case 54: jaloutausch.lock();jaloutast[5]=1;jaloutausch.unlock(); break;
    		     case 55: jaloutausch.lock();jaloutast[6]=1;jaloutausch.unlock(); break;
    		     case 56: jaloutausch.lock();jaloutast[7]=1;jaloutausch.unlock(); break;
    		     case 48: jaloutausch.lock();jaloutast[8]=1;jaloutausch.unlock(); break;
    		     case '\n': ha=0;ja=0;top_panel(phaupt); break;
    		     default: for (uint16_t jata = 0; jata < 9; jata++)
    		 	        {
    			         jaloutausch.lock();
    			         jaloutast[jata] = 0;
    			         jaloutausch.unlock();
    			        } break;
    		    }
    		   }
    		 if (sc == 1) //***** Schaltzeitenauswahl *****
    		   {
    		    au = getch();
    		    switch (au)
    		     {
    		      case 49: top_panel(pjalouschalt);wrefresh(wjalouschalt);amtaga.jalousiezeiten(); break;
    		      case '\n': ha=0;sc=0;top_panel(phaupt); break;
    		     }
    		   }
    
    		 usleep(200000);
    		 update_panels();
    		 doupdate();
    		}
    	return 0;
    	}
    


  • Hallo

    atoi anstelle von atof benutzen 🙄
    Es wäre sicher nicht nötig gewesen alle 473 Zeilen zu posten... aber du solltest dir unbedingt mal anschauen was Funktionsparameter sind und warum man keine globalen Variablen benutzen soll wenn es anders geht.

    bis bald
    akari



  • 😕 😕 nagut das mit atoi hat ja geklappt aber den rest verstehe ich noch nicht so ganz...ich bin ein neuling im programmieren und mus zugeben das ich froh bin, das diese program soweit läuft.
    Es soll später bei mir im haus einige stelen steuern und bislang "scheint" es zu gehen.

    Äm weis nu nicht ob ich dich richtig verstehe, globale Varibalen sind ja im ganzen programm bekannt wie ich mit z.b mit szeit und vzeit gemacht habe. Das wollte ich aus dem grund machen, da ich noch Schaltzeitenabspreichern will und diese evtl damit noch verglichen werden. Ich woltte z.b nur einmal die uhrzeit abfragen und habe deswegen den String szeit fürs ganze programm gemacht....

    Dann hab ich im Buch noch mal nachgeschaut wegen funktionen
    habe da wohl übersehen das man wohl erst einen Prototyp macht wie
    void jalousiemenu(); aber müssen dann die funktionen auch wirklich hinter main und den ganzen code stehen ??.

    meintest du das ??

    228 - 230 wollte ich noch in vor gemeinsamen zugriff schützen


Anmelden zum Antworten