связь между 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

Как мне действовать дальше?

, 👍1

Обсуждение

Вы можете использовать pyserial в python для записи данных в последовательную строку (добавьте символ новой строки в качестве завершающего байта). На стороне arduino вы выполняете " Serial.readUntil("\n")` для извлечения сообщений. Однако определите, как вы передадите последовательные данные в моделирование., @Sim Son

весь ваш пост бессмыслен, потому что вы не можете продолжать, пока не установите канал связи между Python на вашем компьютере и симуляцией TinkerCAD .... как таковой, вопрос вообще не в Arduino ... речь идет об использовании TinkerCAD ... пожалуйста, ознакомьтесь с форумами TinkerCAD, @jsotola

смотрите примеры "Связь" в меню "Примеры Arduino IDE"., @Juraj