Форум сайта python.su
Доброго часа товарищи, нуждаюсь в помощи, не соображаю в питоне совсем от слова ничего.
Есть код который отлично работает на arduino, пытаюсь его методом тыка и ктр+ц переписать на питон (так нужно) для малинки. Успехов нет, пока что могу диодом поморгать, помогите пожалуйста если не за огромное спасибо то за денежку, очень сильно нужно.
Суть какова есть купюроприемник NV9 который прошит под MDB интерфейс и работает в режиме Pulse. Есть малинка вторая с установленной убунтой. Нужно сделать обработчик для входящих данных с купюроприемника.
Купюроприемник возвращает от 1 до 9 импульсов длиной 200мс если мне память не изменяет. Собственно нужно считать импульсы и через кейс в консоль возвращать текст в стиле “принято 3 рубля”
Спасибо еще раз за помощь, код от адруино и то что у меня неполучилось на питоне кладу ниже:
Arduino
const int moneyPin=2; const int zapretaPin = 9; const int zapretbPin = 6; const int zapretcPin = 7; const int zapretdPin = 8; const int ledPin = 12; int money=0; int sum=0; unsigned long timeAllPulse1=3000; // макс. время приема купюры unsigned long timeCount1=0; void setup() { pinMode(zapretaPin, OUTPUT); pinMode(zapretbPin, OUTPUT); pinMode(zapretcPin, OUTPUT); pinMode(zapretdPin, OUTPUT); pinMode(moneyPin,INPUT); Serial.begin(9600); Serial.println("ready"); attachInterrupt(0,count_pulse1,FALLING); } void loop() { digitalWrite(zapretaPin, LOW); digitalWrite(zapretbPin, LOW); digitalWrite(zapretcPin, LOW); digitalWrite(zapretdPin, LOW); // прошло максимальное время приема купюры? if(money>0 && (millis()-timeCount1)>timeAllPulse1) { sum+=money; money=0; Serial.print("Kredit= "); Serial.println(sum); } } // обработка прерывания — получить кол-во импульсов // void count_pulse1() { detachInterrupt(0); money++; if(money==1) timeCount1=millis(); attachInterrupt(0,count_pulse1,FALLING); }
#!/usr/bin/env python2.7 import RPI.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP) money = 0 sum = 0 millis = int(round(time.time() * 1000)) timeAllPulse1 = 3000 timeCount1 = 0 while (True): GPIO.wait_for_edge(4, GPIO.FALLING, timeout = 3000) money+=1 if money==1 : timeCount1=millis if money>0 & (millis-timeCount1) > timeAllPulse1 : sum+=money money=0 print(sum)
Отредактировано fwgg (Март 31, 2016 22:33:57)
Офлайн
У вас if неправильно написан, используется несуществующий оператор ++. Синтаксис языка за вас никто учить не будет.
Офлайн
fwgg
в коде от Arduino присутствуют функции которые непонятно что из себя представляют, например pinMode, digitalWrite и т.д. Поэтому портирование кода стопарится.
Офлайн
pinMode = вход, выход заменяется на GIPO.setup(PIN,INPUT\OUTPUT)
digitalWrite = 1 или 0 на пине так же заменяется на GPIO(PIN,LOW\HIGH)
по поводу синтаксиса - говорю же код не рабочий, набросал в меру своих мозгов, питона не знаю
с итераторами уже разобрался money +=1 но это не решает проблему прерываний
Офлайн
fwggМне не очень понятна методология по которой вы код пишете. Я так понял что документации у вас нет. Железо у вас тоже отличается от того что используется в примере. И вы пишете код методом переставления слов, смешивая код на недо C и на питоне?
но это не решает проблему прерываний
Офлайн
железо идентично и код на недоси и ардуионо работает отлично, успешно переписан в нормальный скетч и выполняет свои задачи но делать связку ардуино + рпи глупость, а заказчику нужно чтоб была малина и был питон
в питоне я вообще не понимаю что происходит по этому и обратился за помощью, готов оплатить
Офлайн