UART Raspberry Pi 2 > ATMega8
Verfasst: Montag 20. April 2015, 09:36
Guten Tag,
ich habe ein Problem beim Empfangen von Daten vom ATMega8.
Das Programm empfängt falsche Daten (meistens 255) und stürtzt an zufälligen Stellen ab.
Der ATMega 8 sendet einen String.
Ich hoffe Sie können mir helfen.
Mit freundlichen Grüßen,
Nikolas
ich habe ein Problem beim Empfangen von Daten vom ATMega8.
Das Programm empfängt falsche Daten (meistens 255) und stürtzt an zufälligen Stellen ab.
Der ATMega 8 sendet einen String.
Code: Alles auswählen
import RPi.GPIO as GPIO
import os
import time
import serial
import random
from datetime import datetime
port = serial.Serial('/dev/ttyAMA0', baudrate = 9600, timeout = 1);
lastTemperaturCheck = 0
checkTemperaturPeriod = 9
lastLuftdruckCheck = 0
checkLuftdruckPeriod = 30
lastGasCheck = 0
checkGasPeriod = 20
lastHelligkeitCheck = 0
checkHelligkeitPeriod = 60
lastWindCheck = 0
checkWindPeriod = 10
lastAkkuCheck = 0
checkAkkuPeriod = 10800
class bcolors:
BLUE = '\033[94m'
GREEN = '\033[92m'
YELLOW = '\033[93m'
RED = '\033[91m'
ENDC = '\033[0m'
def saveData(name):
port.open()
if(port.isOpen()):
data = port.readline()
print(name + bcolors.GREEN + " SAVE DATA: Port opened successfully" + bcolors.ENDC);
port.close()
if(data == ""):
data = bcolors.RED + "ERROR CONNECTING" + bcolors.ENDC
print(name + " " + data)
time = "{:%H:%M:%S}".format(datetime.now())
year = "{:%Y}".format(datetime.now())
month = "{:%m}".format(datetime.now())
path = "/home/pi/data/" + year + "/" + month + "/"
if not os.path.exists(path):
os.makedirs(path)
f = open(path + name + ".txt", "a+b+")
f.write(time + " " + str(random.randint(-20,40)) + "\n")
f.close()
return
def sendData(i, name):
now = "{:%Y %H:%M:%S}".format(datetime.now())
print(now)
port.open()
if(port.isOpen()):
print(name + bcolors.GREEN + " Port opened successfully" + bcolors.ENDC);
port.write(i)
else:
print(name + bcolors.RED + " Opening port failed" + bcolors.ENDC);
port.close()
return
try:
while(1):
t = time.clock()
#Temperatur
if(t - lastTemperaturCheck >= checkTemperaturPeriod):
lastTemperaturCheck = t
print(bcolors.YELLOW + "#-Temperatur-----------------#" + bcolors.ENDC)
sendData("1", "Temperatur_Luft")
saveData("Temperatur_Luft")
sendData("4", "Temperatur_Boden")
saveData("Temperatur_Boden")
#Luftdruck
if(t - lastLuftdruckCheck >= checkLuftdruckPeriod):
lastLuftdruckCheck = t
print(bcolors.YELLOW + "#-Luftdruck------------------#" + bcolors.ENDC)
sendData("0", "Luftdruck")
saveData("Luftdruck")
#Gas
if(t - lastGasCheck >= checkGasPeriod):
lastGasCheck = t
print(bcolors.YELLOW + "#-Gas------------------------#" + bcolors.ENDC)
sendData("2", "Gas")
saveData("Gas")
#Helligkeit
if(t - lastHelligkeitCheck >= checkHelligkeitPeriod):
lastHelligkeitCheck = t
print(bcolors.YELLOW + "#-Helligkeit-----------------#" + bcolors.ENDC)
sendData("3", "Helligkeit")
saveData("Helligkeit")
#Wind
if(t - lastWindCheck >= checkWindPeriod):
lastWindCheck = t
print(bcolors.YELLOW + "#-Wind-----------------------#" + bcolors.ENDC)
sendData("5","Wind")
saveData("Wind")
#Akku
if(t - lastAkkuCheck >= checkAkkuPeriod):
lastAkkuCheck = t
except KeyboardInterrupt:
print("\nBeende")
port.close()
Mit freundlichen Grüßen,
Nikolas