0

Help with basic prox sensor set up
Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.

Help with basic prox sensor set up

by burrito_poots on Thu Jun 17, 2021 2:10 am

Hey gang,

I'm not sure what I'm missing here but it's got to be something easy. When I hook up and go to my file program that utilizes my prox sensor to detect when to run various things or not, it's not actually printing to show me proof it's reading the sensor correctly. I'm guessing I have something wrong in how I have the code setup. Can anyone eyeball this and tell me their thoughts on it?

Obviously all the code is tied together in some way but the specific area I'm referring to is Line 271:

Code: Select all | TOGGLE FULL SIZE
# FOR TEMPERATURE UI INCLUSION (because I can just zip tie a probe to the fill head duh)

import board
import displayio
import terminalio
import busio
import digitalio
import adafruit_displayio_sh1107
import adafruit_imageload

from adafruit_display_shapes.roundrect import RoundRect
from adafruit_display_shapes.rect import Rect
from adafruit_display_shapes.circle import Circle
from adafruit_display_shapes.triangle import Triangle

from adafruit_display_text import label
import adafruit_displayio_sh1107

displayio.release_displays()

i2c = board.I2C()
display_bus = displayio.I2CDisplay(i2c, device_address=0x3C)

WIDTH = 128
HEIGHT = 64
BORDER = 2

display = adafruit_displayio_sh1107.SH1107(display_bus, width=WIDTH, height=HEIGHT)

color_bitmap = displayio.Bitmap(WIDTH, HEIGHT, 1)
color_palette = displayio.Palette(1)
color_palette[0] = 0xFFFFFF

splash = displayio.Group()

display.show(splash)

fillscreen = displayio.Group()
Statsscreen = displayio.Group()
CIPscreen = displayio.Group()
dropleticon = displayio.Group()
bubbleicon = displayio.Group()

import rotaryio
import time
from adafruit_motorkit import MotorKit
#import adafruit_vl6180x
from adafruit_debouncer import Debouncer

#sensor = adafruit_vl6180x.VL6180X(i2c)

encoderB = rotaryio.IncrementalEncoder(board.D12, board.D11)
button_e = digitalio.DigitalInOut(board.D10)
button_e.direction = digitalio.Direction.INPUT
button_e.pull = digitalio.Pull.UP
switch_e = Debouncer(button_e)

encoderA = rotaryio.IncrementalEncoder(board.A4, board.A3)
button_d = digitalio.DigitalInOut(board.A2)
button_d.direction = digitalio.Direction.INPUT
button_d.pull = digitalio.Pull.UP
switch_d = Debouncer(button_d)

proxsensor = digitalio.DigitalInOut(board.D6)
proxsensor.direction = digitalio.Direction.INPUT

can_count = 0
case_count = 0

#if current_program = fill and proxsensor = False
    #can_count += 1
   
    #case_count = can_count/24 #how do I get this to only show the whole number and not the decimal?
    #text_areaXYZ.text = str(case_count)
   

#range_mm = sensor.range

kit = MotorKit()

current_program = "Monarch"
program_running = False
previous_program = "CIP"

lastA_position = None
lastB_position = None

text_area = label.Label(terminalio.FONT, text="monarch", scale=3, color=0xFFFFFF, x=3, y=12)
splash.append(text_area)
text_area2 = label.Label(terminalio.FONT, text="FLUID SYSTEMS", scale=1, color=0xFFFFFF, x=28, y=36)
splash.append(text_area2)
text_area3 = label.Label(terminalio.FONT, text="nano MK.I", scale=1, color=0xFFFFFF, x=70, y=55)
splash.append(text_area3)
bitmap, palette = adafruit_imageload.load("/MonarchLogo.bmp", bitmap=displayio.Bitmap, palette=displayio.Palette)
MonarchTile_grid = displayio.TileGrid(bitmap, pixel_shader=palette)
splash.append(MonarchTile_grid)

color_bitmap = displayio.Bitmap(WIDTH, HEIGHT, 1)
color_palette = displayio.Palette(1)
color_palette[0] = 0xFFFFFF

sm_bitmap = displayio.Bitmap(20, 12, 1)
sm_square = displayio.TileGrid(sm_bitmap, pixel_shader=color_palette, x=83, y=0)
fillscreen.append(sm_square)

sm_bitmapCIP = displayio.Bitmap(20, 12, 1)
sm_squareCIP = displayio.TileGrid(sm_bitmapCIP, pixel_shader=color_palette, x=83, y=0)
CIPscreen.append(sm_squareCIP)

triangle = Triangle(40, 18, 37, 25, 43, 25, fill=0x000000, outline=0xFFFFFF)
dropleticon.append(triangle)
circle = Circle(40, 25, 3, fill=0x000000, outline=0xFFFFFF)
dropleticon.append(circle)
rectDroplet = Rect(39, 22, 3, 1, fill=0x000000)
dropleticon.append(rectDroplet)

dropleticon.x = 27
dropleticon.y = -17

fillscreen.append(dropleticon)

circle2 = Circle(68, 43, 3, fill=0x000000, outline=0xFFFFFF)
bubbleicon.append(circle2)
circle3 = Circle(64, 46, 4, fill=0x000000, outline=0xFFFFFF)
bubbleicon.append(circle3)
circle4 = Circle(70, 49, 3, fill=0x000000, outline=0xFFFFFF)
bubbleicon.append(circle4)

bubbleicon.x = 3
bubbleicon.y = -40

CIPscreen.append(bubbleicon)

rectTime = Rect(0, 29, 55, 34, outline=0xFFFFFF)
fillscreen.append(rectTime)
rectFoam = Rect(59, 29, 32, 34, outline=0xFFFFFF) # if timingB_value > 10 TAB rectFoam.width = 30 or w/e
fillscreen.append(rectFoam)
rectTemp = Rect(95, 29, 32, 34, outline=0xFFFFFF) # if timingB_value > 10 TAB rectFoam.width = 30 or w/e
fillscreen.append(rectTemp)

roundrectTime = RoundRect(0, 22, 55, 15, 7, fill=0xFFFFFF, stroke=1)
fillscreen.append(roundrectTime)
roundrectFoam = RoundRect(59, 22, 32, 15, 7, fill=0xFFFFFF, stroke=1)
fillscreen.append(roundrectFoam)
roundrectTemp = RoundRect(95, 22, 32, 15, 7, fill=0xFFFFFF, stroke=1)
fillscreen.append(roundrectTemp)

text_area4 = label.Label(terminalio.FONT, text="Fill Mode:", scale=1, color=0xFFFFFF, x=0, y=5)
fillscreen.append(text_area4)
text_area5 = label.Label(terminalio.FONT, text="OFF", scale=1, color=0x000000, x=85, y=5)
fillscreen.append(text_area5)
text_area6 = label.Label(terminalio.FONT, text="ON", scale=1, color=0xFFFFFF, x=110, y=5)
fillscreen.append(text_area6)
text_area7 = label.Label(terminalio.FONT, text="Time (s)", scale=1, color=0x000000, x=5, y=28)
fillscreen.append(text_area7)
text_area8 = label.Label(terminalio.FONT, text="0.0", scale=2, color=0xFFFFFF, x=4, y=47)
fillscreen.append(text_area8)
text_area9 = label.Label(terminalio.FONT, text="Foam", scale=1, color=0x000000, x=64, y=28)
fillscreen.append(text_area9)
text_area10 = label.Label(terminalio.FONT, text="0", scale=2, color=0xFFFFFF, x=64, y=47)
fillscreen.append(text_area10)
text_area9b = label.Label(terminalio.FONT, text="F", scale=1, color=0x000000, x=113, y=28)
fillscreen.append(text_area9b)
circleTemp = Circle(108, 27, 2, fill=0xFFFFFF, outline=0x000000, stroke=2)
fillscreen.append(circleTemp)


text_area11 = label.Label(terminalio.FONT, text=" CIP Mode:", scale=1, color=0xFFFFFF, x=0, y=5)
CIPscreen.append(text_area11)
text_area12 = label.Label(terminalio.FONT, text="OFF", scale=1, color=0x000000, x=85, y=5)
CIPscreen.append(text_area12)
text_area13 = label.Label(terminalio.FONT, text="ON", scale=1, color=0xFFFFFF, x=110, y=5)
CIPscreen.append(text_area13)

triangle2 = Triangle(26, 22, 6, 62, 46, 62, fill=0xFFFFFF, outline=0x000000)
CIPscreen.append(triangle2)
triangle3 = Triangle(26, 50, 24, 34, 28, 34, fill=0x000000)
CIPscreen.append(triangle3)
circle5 = Circle(26, 57, 2, fill=0x000000)
CIPscreen.append(circle5)
circle6 = Circle(26, 33, 2, fill=0x000000)
CIPscreen.append(circle6)

text_area15 = label.Label(terminalio.FONT, text="WARNING:", scale=1, color=0xFFFFFF, x=64, y=25)
CIPscreen.append(text_area15)
text_area16 = label.Label(terminalio.FONT, text="Valve will", scale=1, color=0xFFFFFF, x=58, y=41)
CIPscreen.append(text_area16)
text_area17 = label.Label(terminalio.FONT, text="stay open!", scale=1, color=0xFFFFFF, x=59, y=53)
CIPscreen.append(text_area17)


text_area18 = label.Label(terminalio.FONT, text="Canning Stats:", scale=1, color=0xFFFFFF, x=0, y=5)
Statsscreen.append(text_area18)
text_area19 = label.Label(terminalio.FONT, text="OFF", scale=1, color=0x000000, x=85, y=5)
Statsscreen.append(text_area19)
text_area20 = label.Label(terminalio.FONT, text="ON", scale=1, color=0xFFFFFF, x=110, y=5)
Statsscreen.append(text_area20)
text_area21 = label.Label(terminalio.FONT, text="Cans", scale=1, color=0x000000, x=5, y=28)
Statsscreen.append(text_area21)
text_area22 = label.Label(terminalio.FONT, text="24", scale=2, color=0xFFFFFF, x=8, y=47)
Statsscreen.append(text_area22)
text_area23 = label.Label(terminalio.FONT, text="Cases", scale=1, color=0x000000, x=79, y=28)
Statsscreen.append(text_area23)
text_area24 = label.Label(terminalio.FONT, text="1", scale=2, color=0xFFFFFF, x=90, y=47)
Statsscreen.append(text_area24)

while True:
    switch_e.update()
    switch_d.update()

    if current_program != "Fil" and switch_d.fell and previous_program == "CIP":
        display.show(fillscreen)
        current_program = "Fil"
        previous_program = "Fill"
        switch_d.update()

    if current_program == "Fil" and not program_running:
        positionA = encoderA.position
        lastA_position = positionA
        timingA_value = 0.1*encoderA.position
        text_area8.text = str(timingA_value)
        positionB = encoderB.position
        lastB_position = positionB
        timingB_value = encoderB.position
        text_area10.text = str(timingB_value)
        switch_e.update()
   
    if current_program == "Fil" and switch_e.fell and not program_running:
        program_running = True
        switch_e.update()

    #try:
        #range_mm = sensor.range
        #print('Range: {0}mm'.format(range_mm))
    #except RuntimeError:
        #print("retrying!")
    # time.sleep(.00001)

    if current_program == "Fil" and program_running:
        positionA = encoderA.position
        lastA_position = positionA
        timingA_value = 0.1*encoderA.position
        sm_square.x = 106
        text_area5.color = 0xFFFFFF
        text_area6.color = 0x000000
        text_area8.text = str(timingA_value)
        triangle.fill = 0xFFFFFF
        triangle.outline = 0xFFFFFF
        circle.fill = 0xFFFFFF
        circle.outline = 0xFFFFFF
        rectDroplet.fill = 0xFFFFFF
        positionB = encoderB.position
        lastB_position = positionB
        timingB_value = encoderB.position
        text_area10.text = str(timingB_value)
   
    if current_program == "Fil" and switch_e.fell and program_running:
        sm_square.x = 83
        text_area5.color = 0x000000
        text_area6.color = 0xFFFFFF
        program_running = False
        triangle.outline = 0xFFFFFF
        triangle.fill = 0x000000
        circle.outline = 0xFFFFFF
        circle.fill = 0x000000
        rectDroplet.fill = 0x000000
        switch_e.update()

        #if (range_mm >= 70): #"if program_running and (range_mm >= 70):" may need to update to this
       
        if proxsensor == True and current_program == "Fil" and program_running:
            print('Fill Cycle Start')
            kit.motor2.throttle = 1.0       # Load can
            time.sleep(.8)                  # Piston extension time
            kit.motor2.throttle = 0         # Piston retract
            time.sleep(1)                   # need for can to fall into chute
            kit.motor4.throttle = 1.0       # Drop lift piston
            kit.motor1.throttle = 1.0       # Start Purge
            time.sleep(1.5)                 # Hold for 1.5 s
            kit.motor1.throttle = 0         # Stop Purge
            kit.motor3.throttle = 1.0       # Start Fill
            time.sleep(timingA_value)       # Hold for set time
            kit.motor3.throttle = 0         # End fill
            for _ in range(timingB_value):
                time.sleep(0.05)                # Hold for set time
                kit.motor3.throttle = 1.0       # Start Foam Pulse
                time.sleep(0.05)                # Hold for set time
                kit.motor3.throttle = 0         # End Foam Pulse
            kit.motor4.throttle = 0             # Raise lift
            time.sleep(.75)
           

    #try:
        #range_mm = sensor.range
        #print('Range2: {0}mm'.format(range_mm))
    #except RuntimeError:
        #print("retrying!")
    # time.sleep(.00001)

    if current_program != "Stats" and switch_d.fell and previous_program == "Fill":
        display.show(Statsscreen)
        current_program = "Stats"
        previous_program = "Stats"
        switch_d.update()
   
    if current_program != "CIP" and switch_d.fell and previous_program == "Stats":
        display.show(CIPscreen)
        time.sleep(.20)
        triangle2.fill = 0xFFFFFF
        triangle2.outline = 0x000000
        triangle3.fill = 0x000000
        circle5.fill = 0x000000
        circle6.fill = 0x000000
        time.sleep(.20)
        triangle2.fill = 0x000000
        triangle2.outline = 0xFFFFFF
        triangle3.fill = 0xFFFFFF
        circle5.fill = 0xFFFFFF
        circle6.fill = 0xFFFFFF
        time.sleep(.20)
        triangle2.fill = 0xFFFFFF
        triangle2.outline = 0x000000
        triangle3.fill = 0x000000
        circle5.fill = 0x000000
        circle6.fill = 0x000000
        time.sleep(.20)
        triangle2.fill = 0x000000
        triangle2.outline = 0xFFFFFF
        triangle3.fill = 0xFFFFFF
        circle5.fill = 0xFFFFFF
        circle6.fill = 0xFFFFFF
        kit.motor4.throttle = 0.0
        kit.motor3.throttle = 0.0
        current_program = "CIP"
        program_running = False
        previous_program = "CIP"
        switch_d.update()
   
    if current_program == "CIP" and switch_e.fell and not program_running:
        sm_squareCIP.x = 106
        text_area12.color = 0xFFFFFF
        text_area13.color = 0x000000
        circle2.fill = 0xFFFFFF
        circle2.outline = 0xFFFFFF
        circle3.fill = 0xFFFFFF
        circle3.outline = 0xFFFFFF
        circle4.fill = 0xFFFFFF
        circle4.outline = 0xFFFFFF
        kit.motor4.throttle = 1.0
        time.sleep(.5)
        kit.motor3.throttle = 1.0
        current_program = "CIP"
        program_running = True
        switch_e.update()
   
    if current_program == "CIP" and switch_e.fell and program_running:
        sm_squareCIP.x = 83
        text_area12.color = 0x000000
        text_area13.color = 0xFFFFFF
        circle2.fill = 0x000000
        circle2.outline = 0xFFFFFF
        circle3.fill = 0x000000
        circle3.outline = 0xFFFFFF
        circle4.fill = 0x000000
        circle4.outline = 0xFFFFFF
        kit.motor4.throttle = 0.0
        kit.motor3.throttle = 0.0
        current_program = "CIP"
        program_running = False
        switch_e.update()

burrito_poots
 
Posts: 123
Joined: Thu May 30, 2019 5:02 pm

Re: Help with basic prox sensor set up

by dastels on Thu Jun 17, 2021 10:54 am

The most obvious problem is that you should be using proxsensor.value

Dave

dastels
 
Posts: 6830
Joined: Tue Oct 20, 2015 3:22 pm

Re: Help with basic prox sensor set up

by burrito_poots on Thu Jun 17, 2021 1:59 pm

dastels wrote:The most obvious problem is that you should be using proxsensor.value

Dave


So when I change line 271 from proxsensor to proxsensor.value, I don't see any results, am I missing something or am I needing to add something outside my loop here?

EDIT: figured it out, I also had my indentions too far over where that line starts D: ! haha. Always something bare bones. Yeesh. Thanks for the help though!

burrito_poots
 
Posts: 123
Joined: Thu May 30, 2019 5:02 pm

Please be positive and constructive with your questions and comments.