#!/usr/bin/env python3
# -*- coding utf-8 -*-
# Raspi Pins:
# 1 3,3V
# 2,4 5V 
# 6, 14, 20 GND
# 8 TXD
# 10 RXD
# 12 GPIO 18
# 16 GPIO 23
# 18 GPIO 24
# 22 GPIO 25

import RPi.GPIO as GPIO
import serial
from time import sleep

RE_1 = 18 # Receiver enabled if LOW
DE1 =  23 # Transmitter (Data Driver) enabled with HIGH
RE_2 = 24
DE2 =  25

GPIO.setmode(GPIO.BCM) # Broadcom SOC channel number (numbers after GPIO)
GPIO.setup(RE_1,GPIO.OUT)
GPIO.setup(DE1,GPIO.OUT)
GPIO.setup(RE_2,GPIO.OUT)
GPIO.setup(DE2,GPIO.OUT)

ser = serial.Serial("/dev/ttyAMA0",baudrate = 250000, timeout = 0.1)
#ser.flushInput()
sleep(0.1)

GPIO.output(RE_1,GPIO.LOW) # Receive Bus1
GPIO.output(DE1,GPIO.LOW)
GPIO.output(RE_2,GPIO.LOW) # Receive Bus2
GPIO.output(DE2,GPIO.LOW)
sleep(0.01)


def read485_bus2():
    GPIO.output(RE_1,GPIO.LOW) # Receive
    GPIO.output(DE1,GPIO.LOW)
    sleep(0.01)
    #try:

    mytext=ser.readline()
    print(mytext)
    #while mytext==0x00:        
    #    mytext=ser.read(30)
    #    print(mytext)
    #    print(mytext.decode())
    #except:
    #    print("receiveerror")
    #    pass
            
def write485GetPara_bus2(para,id):
    GPIO.output(RE_1,GPIO.HIGH) # Send
    GPIO.output(DE1,GPIO.HIGH)
    sleep(0.01)    
    command='$'+id+'G'+para+'\n'
    print(command)
    bytes=ser.write(command.encode())
    print(bytes)
    sleep(0.01)
    
    

#-----------------------------------------------------------------------------
# MAIN
#-----------------------------------------------------------------------------

try:
    while (True):
        write485GetPara_bus2('P',"11")
        read485_bus2()
        write485GetPara_bus2('V',"11")
        read485_bus2()
        write485GetPara_bus2('S',"11")
        read485_bus2()
        ser.flushInput()
        sleep(1)
        write485GetPara_bus2('P',"12")
        read485_bus2()
        write485GetPara_bus2('V',"12")
        read485_bus2()
        write485GetPara_bus2('S',"12")
        read485_bus2()
        ser.flushInput()
        sleep(1)
        #GPIO.output(RE_1,GPIO.HIGH) #OFF
        #GPIO.output(DE1,GPIO.LOW)
        #sleep(1)
        
        
except KeyboardInterrupt:
    ser.close()
    GPIO.cleanup()
    print("Keyboard interrupt by user")
    
    
