связь между python и arduino
У меня есть программа на python, которая вычисляет целое число на основе некоторых параметров. Я не включаю сюда полный код , потому что в нем много материала для глубокого обучения, но соответствующий блок таков:
#calculating time
def gst(no_signals,numbers): #автомобиль автобус мотоцикл грузовик
time= [4,2,3.5,3.5]
x=0
for i in range(0,4):
x+=numbers[i]*time[i]
gst= int (x/(no_signals +1))
print(gst)
return(gst)
Теперь я хочу сообщить этот gst, который я вычислил, программе Arduino, которая должна контролировать задержки для светодиодов на величину gst
секунд.
Схема и код Arduino в настоящее время выглядят следующим образом:
(обратите внимание, что на этом рисунке могут быть показаны некоторые резисторы, которые не подключены должным образом к макетной плате. Я это исправил)
код
(работа кода подробно объяснена в этом вопросе:СВЕТОДИОД не загорается, несмотря на то, что digitalRead отображает 1)
int gst=20; //green signal time initialised to 20
int ns=4; //no.of signals
int sn=1; //current signal number
//pin numbers for LEDS: {{RYG for signal1},{RYG forr signal2}..}
int signal[4][3]={{2,3,4},{5,6,7},{8,9,10},{11,12,13}};
//indexes for the signal array
int red=0;
int yellow=1;
int green=2;
//pin number of "colour" of signal "i" is given by signal[i][colour]
//example: red led of signal 3: signal[2][0]
void setup()
{
for(int i=2;i<=13;i++){
pinMode(i,OUTPUT);
}
Serial.begin(9600);
randomSeed(analogRead(0));
}
void loop()
{
int next_sn= sn+1; //next signal
if(next_sn==5)
next_sn=1;
int next2_sn= next_sn+1; //next2next
if(next2_sn==5)
next2_sn=1;
int next3_sn= next2_sn+1; //next2next2next
if(next3_sn==5)
next3_sn=1;
//current signal green (for gst seconds), rest all red.
digitalWrite(signal[sn-1][green],HIGH);
digitalWrite(signal[sn-1][red],LOW); //this line will make sense
//for the 2nd iteration
digitalWrite(signal[next_sn-1][red],HIGH);
digitalWrite(signal[next2_sn-1][red],HIGH);
digitalWrite(signal[next3_sn-1][red],HIGH);
//for debugging purposes
Serial.println(digitalRead(signal[sn-1][green]));
delay(gst*1000);
//gst seconds elapsed, now current signal should become yellow
digitalWrite(signal[sn-1][green],LOW);
digitalWrite(signal[sn-1][yellow],HIGH);
delay(5*1000);
//snapshot taken for calculating no. of cars, buses etc
//for now, random numbers used
//we will need to integrate this block with YOLO.
//calculate gst
gst=random(10,20);
//make current signal red
digitalWrite(signal[sn-1][red],HIGH);
digitalWrite(signal[sn-1][yellow],LOW);
//the next signal is our current signal for the next iteration
//the green signal should turns on for gst seconds in the next
//iteration,and the red signal turns off
sn=next_sn;
}
В настоящее время я использую gst=random(10,20);
для обновления gst. Я хочу в конце концов написать что-то вроде gst=<gst communicated from python>;<gst communicated from python>
вместо этого.
Как я могу этого достичь?
Есть и вторая проблема: Программа и код Arduino запускаются на сайте моделирования (tinkercad). Поэтому я немного запутался в том, как именно мы можем обеспечить коммуникацию. Обычно для этого вы вставляете USB-кабель, но я, очевидно, не могу этого сделать, так как arduino находится на сайте моделирования.
ссылка на симуляцию: https://www.tinkercad.com/things/4TzYWouocTv
Как мне действовать дальше?
@satan 29, 👍1
Обсуждение0
- Построение графика на Python с использованием Tkinter Canvas
- Как отправить целое число через pyserial с Python на Arduino и получить тот же результат?
- Почему нужно использовать latin-1 вместо utf-8 при использовании python с arduino?
- В чем разница, когда ардуино был отключен от сети, и когда последовательный порт был закрыт?
- Программирование Arduino с использованием Python, а не C/C ++
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Не удается связаться с ардуино с помощью python (Windows)
- Ошибка "'Serial' does not name a type"
Вы можете использовать pyserial в python для записи данных в последовательную строку (добавьте символ новой строки в качестве завершающего байта). На стороне arduino вы выполняете " Serial.readUntil("\n")` для извлечения сообщений. Однако определите, как вы передадите последовательные данные в моделирование., @Sim Son
весь ваш пост бессмыслен, потому что вы не можете продолжать, пока не установите канал связи между Python на вашем компьютере и симуляцией TinkerCAD .... как таковой, вопрос вообще не в Arduino ... речь идет об использовании TinkerCAD ... пожалуйста, ознакомьтесь с форумами TinkerCAD, @jsotola
смотрите примеры "Связь" в меню "Примеры Arduino IDE"., @Juraj