import spidev
import time
from libsoc import gpio
from gpio_96boards import GPIO
from dweet import Dweet

GPIO_CS = GPIO.gpio_id('GPIO_CS')
Ar = GPIO.gpio_id('GPIO_C')
Lampada = GPIO.gpio_id('GPIO_E')

pins = ((GPIO_CS, 'out'), (Ar, 'out'), (Lampada, 'out'),)

spi = spidev.SpiDev()
spi.open(0,0)
spi.max_speed_hz = 10000
spi.mode = 0b00
spi.bits_per_word = 8

system_status = 1

dweet = Dweet()


def readDigital(gpio):
	digital = [0,0]
	digital[0] = gpio.digital_read(Lampada)
	digital[1] = gpio.digital_read(Ar)

	return digital

def writeDigital(gpio, digital):
	write = digital
	gpio.digital_write(Lampada, write[0])
	gpio.digital_write(Ar, write[1])

	return digital


def readTemp(gpio):

	gpio.digital_write(GPIO_CS, GPIO.HIGH)
	time.sleep(0.0002)
	gpio.digital_write(GPIO_CS, GPIO.LOW)
	r = spi.xfer2([0x01, 0xA0, 0x00])
	gpio.digital_write(GPIO_CS, GPIO.HIGH)

	adcout = (r[1] << 8) & 0b1100000000
	adcout = adcout | (r[2] & 0xff)
	adc_temp = (adcout *3.3/1023-0.5)*100

	#if adc_temp > 27:
		#gpio.digital_write(Ar, GPIO.HIGH)
	#else:
		#gpio.digital_write(Ar, GPIO.LOW)
	
	return adc_temp

def readLumi(gpio):

	gpio.digital_write(GPIO_CS, GPIO.HIGH)
	time.sleep(0.0002)
	gpio.digital_write(GPIO_CS, GPIO.LOW)
	r = spi.xfer2([0x01, 0x80, 0x00])
	gpio.digital_write(GPIO_CS, GPIO.HIGH)

	adcout = (r[1] << 8) & 0b1100000000
	adcout = adcout | (r[2] & 0xff)
	
	#if adcout < 100:
		#gpio.digital_write(Lampada, GPIO.HIGH)
	#else:
		#gpio.digital_write(Lampada, GPIO.LOW)

	return adcout

#def readDweet():


if __name__=='__main__':
	with GPIO(pins) as gpio:
		while True:
			digital = [0,0]
			resposta = dweet.latest_dweet(name="projeto_final")
			digital[0] =  resposta['with'][0]['content']['Lampada']
			digital[1] =  resposta['with'][0]['content']['Ar']
			writeDigital(gpio, digital)
			Temp = readTemp(gpio)
			Lumi = readLumi(gpio)
			digital = readDigital(gpio)
			print "Temp: %2.1f\nLumi: %d\nLamp: %d\nAr: %d" %(Temp, Lumi,
digital[0], digital[1])
			dweet.dweet_by_name(name="projeto_final", data={"Lampada":digital[0],
"Ar": digital[1], "Temperatura":Temp, "Luminosidade": Lumi})

			time.sleep(10)
