Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2017-03-30, 13:59
  #1
Medlem
försöker logga en pump hur länge den är påslagen och få ut de i en txt fil.
typ
"datum, tid, on
datum, tid, off

datum, tid, on
datum, tid, off"

Kod:
 #include <stdio.h>
#include <wiringPi.h>
#include <time.h>
// LED Pin - wiringPi pin 0 is BCM_GPIO 17.

#define LED     0
#define BUTTON  1

void timestamp()
{
    time_t ltime; /* calendar time */
    ltime=time(NULL); /* get current cal time */
}
int main (void)
{
  printf ("Raspberry Pi input test\n") ;
//**********************************************
//********pin signing***************************

  wiringPiSetup () ;
  pinMode (LED, OUTPUT) ;
  pinMode (BUTTON, INPUT) ;
  int rtrig =0;
  int ftrig =0;
//**********************************************
for (;;)
{

int ing1;
ing1 = digitalRead (BUTTON) ;
  if (ing1 ==1)
        {
ftrig --;
delay (1000) ;

while(rtrig<1){
rtrig ++;

time_t rawtime;
  struct tm * timeinfo;

  time ( &rawtime );
  timeinfo = localtime ( &rawtime );
  printf ( "pump is on at: %s", asctime (timeinfo) );
char prompt[] = "pump is on at: %s", asctime (timeinfo) ;
  printf("%s",prompt);
FILE *fp;

int x = 20;

fp=fopen("log.txt", "w+");
fprintf(texten från printf("pump is on ........)\n", x, prompt;
fclose(fp);


}
digitalWrite (LED, HIGH) ;      // On
}
  else
        {
delay (1000) ;

while(ftrig<1){
ftrig ++;

time_t rawtime;
  struct tm * timeinfo;

  time ( &rawtime );
  timeinfo = localtime ( &rawtime );
  printf ( "pump is off at: %s", asctime (timeinfo) );
}
                digitalWrite (LED, LOW);
         rtrig --;



        }

}
  return 0 ;

länge sen man höll på med c så minns inte så mkt.
Citera
2017-03-30, 14:04
  #2
Avstängd
BaZoBazos avatar
vad gör
Kod:
for (;;)

Är det något shortkommande eller vad är det för vilkor ?
Citera
2017-03-30, 14:06
  #3
Medlem
Citat:
Ursprungligen postat av BaZoBazo
vad gör
Kod:
for (;;)

Är det något shortkommande eller vad är det för vilkor ?
loopa i all oändlighet
Citera
2017-03-30, 14:08
  #4
Medlem
Kan du inte ens beskriva felet?
Citera
2017-03-30, 14:17
  #5
Medlem
Citat:
Ursprungligen postat av RulleRivare
Kan du inte ens beskriva felet?
beskrivningen står i koden. nu fixat dock väljer den att bara skriva en rad i min .txt

hur får man de att skriva på ny rad varje gång i txt.
typ
14:17 on

14:20 on

1430 on osv?

Kod:
#include <stdio.h>
#include <wiringPi.h>
#include <time.h>
// LED Pin - wiringPi pin 0 is BCM_GPIO 17.

#define LED     0
#define BUTTON  1

void timestamp()
{
    time_t ltime; /* calendar time */
    ltime=time(NULL); /* get current cal time */
}
int main (void)
{
  printf ("Raspberry Pi input test\n") ;
//**********************************************
//********pin signing***************************

  wiringPiSetup () ;
  pinMode (LED, OUTPUT) ;
  pinMode (BUTTON, INPUT) ;
  int rtrig =0;
  int ftrig =0;
//**********************************************
for (;;)
{

int ing1;
ing1 = digitalRead (BUTTON) ;
  if (ing1 ==1)
        {
ftrig --;
delay (1000) ;

while(rtrig<1){
rtrig ++;

time_t rawtime;
  struct tm * timeinfo;

  time ( &rawtime );
  timeinfo = localtime ( &rawtime );
  printf ( "pump is on at: %s", asctime (timeinfo) );

FILE *fp;

int x = 20;

fp=fopen("log.txt", "w+");
fprintf(fp,"pump is on at: %s", asctime (timeinfo) );
fclose(fp);


}
digitalWrite (LED, HIGH) ;      // On
 }
  else
        {
delay (1000) ;

while(ftrig<1){
ftrig ++;

time_t rawtime;
  struct tm * timeinfo;

  time ( &rawtime );
  timeinfo = localtime ( &rawtime );
  printf ( "pump is off at: %s", asctime (timeinfo) );
}
                digitalWrite (LED, LOW);
         rtrig --;



        }

}
  return 0 ;
Citera
2017-03-30, 14:27
  #6
Medlem
kodsnickrarns avatar
fp=fopen("log.txt", "w+");

skapar en ny tom fil varje gång.

du vill nog istället ha:
fp=fopen("log.txt", "a");

som skapar/öppnar för 'append'

/K
Citera
2017-03-30, 14:34
  #7
Medlem
Citat:
Ursprungligen postat av kodsnickrarn
fp=fopen("log.txt", "w+");

skapar en ny tom fil varje gång.

du vill nog istället ha:
fp=fopen("log.txt", "a");

som skapar/öppnar för 'append'

/K

tusen tack de löste de.
en jobbet sa att w+ var readwrite privilege tog hans ord för de.
Citera
2017-03-31, 07:58
  #8
Avstängd
BaZoBazos avatar
Citat:
Ursprungligen postat av nittrick
loopa i all oändlighet
fast man hade egentligen kunna skriva ett vilkor som for 2==2 istället? det är ju också alltid uppfyllt. Är inte det lättare att förstå koden då? (jag är inte programmerare men jag är nyfiken på lära mig java)
Citera
2017-03-31, 09:05
  #9
Medlem
kaks avatar
Citat:
Ursprungligen postat av BaZoBazo
fast man hade egentligen kunna skriva ett vilkor som for 2==2 istället? det är ju också alltid uppfyllt. Är inte det lättare att förstå koden då? (jag är inte programmerare men jag är nyfiken på lära mig java)
Kod:
for(;;)
är ju ett idiom som alla c/c++-programmerare omedelbart känner igen.
Vill du att koden ska vara lättförståelig för andra skulle jag rekommendera
Kod:
while(true) {
    
do_something();

Citera
2017-03-31, 11:33
  #10
Medlem
om jag skriver till en txt eller dat fil med mitt program.
sen vill jag göra ett nytt program som jämför tids stämplarna i den filen.
Kod:
tis,månad,datum, 10:00 on
tis,månad,datum,  10:32off
tis,månad,datum, 11:01 on
tis,månad,datum,  11:12off
tis,månad,datum, 11:23 on
tis,månad,datum,  12:22off
då vill jag att min kod läser och skriver ut

tis,månad,datum, 10:00 on /n
on 32min;

tis,månad,datum, 11:01 on /n
on 11min;

osv
hur gör jag då?
Citera
2017-03-31, 20:15
  #11
Medlem
MeanMEs avatar
Citat:
Ursprungligen postat av nittrick
om jag skriver till en txt eller dat fil med mitt program.
sen vill jag göra ett nytt program som jämför tids stämplarna i den filen.
Kod:
tis,månad,datum, 10:00 on
tis,månad,datum,  10:32off
tis,månad,datum, 11:01 on
tis,månad,datum,  11:12off
tis,månad,datum, 11:23 on
tis,månad,datum,  12:22off
då vill jag att min kod läser och skriver ut

tis,månad,datum, 10:00 on /n
on 32min;

tis,månad,datum, 11:01 on /n
on 11min;

osv
hur gör jag då?
Du kan ju läsa in dig på CSV-filer och vilka kommandon du använder för att läsa filer.
Det brukar vara en bra början om man jobbar med program som sysslar med filaccess.
Citera
2017-04-02, 11:49
  #12
Medlem
beltramos avatar
Citat:
Ursprungligen postat av BaZoBazo
fast man hade egentligen kunna skriva ett vilkor som for 2==2 istället? det är ju också alltid uppfyllt. Är inte det lättare att förstå koden då? (jag är inte programmerare men jag är nyfiken på lära mig java)

Ja? Om man vill att det ska se ut som skräp, visst.

Citat:
Ursprungligen postat av kak
Kod:
for(;;)
är ju ett idiom som alla c/c++-programmerare omedelbart känner igen.
Vill du att koden ska vara lättförståelig för andra skulle jag rekommendera
Kod:
while(true) {
    
do_something();

Booleans, aka false & true är definerad i stdbool.h, onödigt att inkludera något så simpelt.

Citat:
Ursprungligen postat av MeanME
Du kan ju läsa in dig på CSV-filer och vilka kommandon du använder för att läsa filer.
Det brukar vara en bra början om man jobbar med program som sysslar med filaccess.
Verkligen onödigt. Varför ens kommentera?

Citat:
Ursprungligen postat av nittrick
försöker logga en pump hur länge den är påslagen och få ut de i en txt fil.
typ
"datum, tid, on
datum, tid, off

datum, tid, on
datum, tid, off"

Kod:
 #include <stdio.h>
#include <wiringPi.h>
#include <time.h>
// LED Pin - wiringPi pin 0 is BCM_GPIO 17.

#define LED     0
#define BUTTON  1

void timestamp()
{
    time_t ltime; /* calendar time */
    ltime=time(NULL); /* get current cal time */
}
int main (void)
{
  printf ("Raspberry Pi input test\n") ;
//**********************************************
//********pin signing***************************

  wiringPiSetup () ;
  pinMode (LED, OUTPUT) ;
  pinMode (BUTTON, INPUT) ;
  int rtrig =0;
  int ftrig =0;
//**********************************************
for (;;)
{

int ing1;
ing1 = digitalRead (BUTTON) ;
  if (ing1 ==1)
        {
ftrig --;
delay (1000) ;

while(rtrig<1){
rtrig ++;

time_t rawtime;
  struct tm * timeinfo;

  time ( &rawtime );
  timeinfo = localtime ( &rawtime );
  printf ( "pump is on at: %s", asctime (timeinfo) );
char prompt[] = "pump is on at: %s", asctime (timeinfo) ;
  printf("%s",prompt);
FILE *fp;

int x = 20;

fp=fopen("log.txt", "w+");
fprintf(texten från printf("pump is on ........)\n", x, prompt;
fclose(fp);


}
digitalWrite (LED, HIGH) ;      // On
}
  else
        {
delay (1000) ;

while(ftrig<1){
ftrig ++;

time_t rawtime;
  struct tm * timeinfo;

  time ( &rawtime );
  timeinfo = localtime ( &rawtime );
  printf ( "pump is off at: %s", asctime (timeinfo) );
}
                digitalWrite (LED, LOW);
         rtrig --;



        }

}
  return 0 ;

länge sen man höll på med c så minns inte så mkt.

Testa detta, skrev det på 5 minuter, har ej gått igenom det lol

Kod:
#define TRUE 1
#define FALSE 0

#define LED 0
#define BUTTON 1

#include <stdio.h>
#include <time.h>
#include <wiringPi.h>

typedef char BOOL;

static 
void append_to_file(char *filechar *timeBOOL online)
{
    
FILE *file_stream;
    
    if((
file_stream fopen(file"a")) == NULL)
    {
        
fprintf(stderr"Failed to open: %s\n"file);
        return;
    }
    
    
fprintf(file_stream"Pump is %s at: %s\n"online == TRUE "online" "offline"time);
    
fclose(file_stream);
}

static 
char *retrieve_current_time(void)
{
    
time_t rawtime;
    
struct tm *timeinfo;
    
    
time(&rawtime);
    
timeinfo localtime(&rawtime);
    
    return(
asctime(timeinfo));
}

int main(void)
{
    
fprintf(stderr"Raspberry PI Input Test\n");
    
    
wiringPiSetup();
    
pinMode(LEDOUTPUT);
    
pinMode(BUTTONINPUT);
    
    
int rtrig 0ftrig 0;
    
    while(
TRUE)
    {
        
int ing1 digitalRead(BUTTON);
        
        if(
ing1 == TRUE)
        {
            
ftrig--;
            
delay(1000);
            
            while(
rtig 1)
            {
                
rtrig++;
                
                
/* skriv till stderr */
                
fprintf(stderr"Pump is offline at: %s\n"retrieve_current_time());
                
                
/* skriv till fil 'log.txt */
                
append_to_file("log.txt"retrieve_current_time(), TRUE);
            }
            
            
digitalWrite(LEDHIGH); // Ingen aning vad detta gör
        
}
        else
        {
            
delay(1000);
            
            while(
ftrig 1)
            {
                
ftrig++;
                
                
/* skriv till stderr */
                
fprintf(stderr"Pump is offline at: %s\n"retrieve_current_time());
                
                
/* skriv till fil 'log.txt */
                
append_to_file("log.txt"retrieve_current_time(), FALSE);
                
            }
            
digitalWrite(LEDLOW); // Ingen aning vad detta gör
            
rtrig--;
        }
    }
    
    return 
0;

__________________
Senast redigerad av beltramo 2017-04-02 kl. 11:56.
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback