0

Sorry to disturb you guys again, I have successfully created a blinking led.

But the problem I'm facing right now is I wanted to create a WRITE method to record all the details that shown on Python Shell.

enter image description here

This is my code:

import RPi.GPIO as GPIO ## Import GPIO library
import time ## Import 'time' library. Allows us to use 'sleep'
import datetime

GPIO.setmode(GPIO.BOARD) ## Use board pin numbering
GPIO.setup(7, GPIO.OUT) ## Setup GPIO Pin 7 to OUT

##Define a function named Blink()
def Blink(numTimes,speed):
    for i in range(0,numTimes): ## Run loop numTimes
        print "Iteration " + str(i+1) ## Print current loop
        GPIO.output(7,True) ## Switch on pin 7
        time.sleep(speed) ## Wait
        GPIO.output(7,False) ## Switch off pin 7
        time.sleep(speed) ## Wait
    print "Done" ## When loop is complete, print "Done"
    GPIO.cleanup()

## Ask user for total number of blinks and length of each blink
iterations = raw_input("Enter total number of times to blink: ")
speed = raw_input("Enter length of each blink(seconds): ")

## Start Blink() function. Convert user input from strings to numeric data types
Blink(int(iterations),float(speed))

While True:

    #Open Log File
    f=open('leddata.txt','a')
    now = datetime.datetime.now()
    timestamp = now.strftime("%Y/%m/%d %H:$M")
    outvalue = Blink()
    outstring = str(timestamp)+ " " + str(outvalue) + "\n"
    print outstring
    f.write(outstring)
    f.close()

I get quite a number of errors and very lost now.

Hope you guys could help me out with it, as soon as possible, thanks in advance, guys.

2

It looks like you may want Blink() to be a generator.

In that case you need to yield something to outvalue.

You'll need to can create the generator like this

blink = Blink(int(iterations...)

Then call next(blink) to step through the iterations.

import RPi.GPIO as GPIO
import time
import datetime

GPIO.setmode(GPIO.BOARD) ## Use board pin numbering
GPIO.setup(7, GPIO.OUT)  ## Setup GPIO Pin 7 to OUT

def Blink(numTimes, speed):
    for i in range(numTimes):
        print "Iteration " + str(i+1)   ## Print current loop
        GPIO.output(7, True)            ## Switch on pin 7
        time.sleep(speed)               ## Wait
        GPIO.output(7, False)           ## Switch off pin 7
        time.sleep(speed)               ## Wait
        yield "something for outvalue"
    print "Done"
    GPIO.cleanup()

## Ask user for total number of blinks and length of each blink
iterations = raw_input("Enter total number of times to blink: ")
speed = raw_input("Enter length of each blink(seconds): ")

## Start Blink() generator. Convert user input from strings to numeric data types
blink = Blink(int(iterations), float(speed))

## Open Log File
with open('leddata.txt', 'a') as f:
    now = datetime.datetime.now()
    timestamp = now.strftime("%Y/%m/%d %H:$M")
    for outvalue in blink:
        outstring = "{} {}\n".format(timestamp, outvalue)
        print outstring
        f.write(outstring)
  • Ok, I will pass the code here, John La Rooy. – user3127380 Jun 24 '14 at 6:02
  • I've changed the end of your program a little, since the While True: doesn't really make sense. You'd end up crashing with a StopIteration exception – John La Rooy Jun 24 '14 at 6:39
  • John La Rooy, I gotta another error after copying your code. This is the error statement: Traceback (most recent call last): File "/home/pi/Blinking LED with WRITE.py", line 30, in <module> for outvalue in blink: NameError: name 'blink' is not defined – user3127380 Jun 24 '14 at 7:12
  • You didn't copy the line that defines it. – John La Rooy Jun 24 '14 at 9:47
  • Can work already, John La Rooy. Thanks alot, John La Rooy. – user3127380 Jun 25 '14 at 1:52
1

The first time you call Blink(), you pass it two arguments, as you should. However, when you call it inside the while loop, you don't pass it any arguments, which is why the program crashes.

Learn to read the error messages; all that red seems scary at first, but contained within it is much of the information you need to debug your program.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.