Uncategorized

Problem with comunication from PC with python and ARDUINO – Python Help



Hi, I’ve a problem with the USB comunication from PC with python and
ARDUINOUNO.
I wrote a little python program than can transmit ‘a’ caracter in the USB port
to and ARDUINOUNO.
I just post below my python code than can make that:

import time
import serial
import keyboard
import pynput





try:    
    connect = serial.Serial("/dev/ttyACM0", 115200)
    
    if connect.is_open:
       print ("\n Il collegamento è stato effettuato con successo  \n")

    #ser.close()

except:
    print("""
    Collegamento fallito,
    controllare se il dispositivo è stato connesso correttamente,
    o di avere inserito il nome della porta corretto \n""")


       
    

i=b'a\n'
while 1:   
        if(keyboard.is_pressed('a')):
            connect.write(i)   

This one above transmit le ‘a’ caracter when i press ‘a’ key.
Below I post the code inside ARDUINOUNO than can receive the letter ‘a’.

#include "Arduino.h"
#include "MCP4251.h"
#include "TimerOne.h"
#define MAX_BUFFER 2

//void read_USB();

int elemento_buffer=0;
char buffer[MAX_BUFFER];


#define cs1 2
#define cs2 3
#define cs3 4
#define cs4 5
#define cs5 6
#define cs6 7
#define cs7 8
#define cs8 9
#define cs9 10
#define cs14 14

#define pot0ResistanceRmax 100000 // These resistance values may vary
#define pot0ResistanceRmin 0
#define pot1ResistanceRmax 100000
#define pot1ResistanceRmin 0

extern TimerOne Timer0;
extern TimerOne Timer2;
extern TimerOne Timer3;


      float fr0=879;
      int a1=3300;
      float fr1=1783;
      int a2=9900;
      float fr2=2722;
      int a3=17000;
      float fr3=3565;
      int a4=17800;
      float fr4=6528;
      int a5=19000;
      int mast_vol=20000;
      int vol=0;
      unsigned long tatt = 0;
      unsigned long microsecatt = (tatt / 1000);
      unsigned long tdec = 2000000000;
      unsigned long microsecdec = (tdec / 1000);


MCP4251 f0(cs1, pot0ResistanceRmax, pot0ResistanceRmin, pot1ResistanceRmax, pot1ResistanceRmin);
MCP4251 f1(cs2, pot0ResistanceRmax, pot0ResistanceRmin, pot1ResistanceRmax, pot1ResistanceRmin);
MCP4251 f2(cs3, pot0ResistanceRmax, pot0ResistanceRmin, pot1ResistanceRmax, pot1ResistanceRmin);
MCP4251 f3(cs4, pot0ResistanceRmax, pot0ResistanceRmin, pot1ResistanceRmax, pot1ResistanceRmin);
MCP4251 f4(cs5, pot0ResistanceRmax, pot0ResistanceRmin, pot1ResistanceRmax, pot1ResistanceRmin);
MCP4251 f5(cs6, pot0ResistanceRmax, pot0ResistanceRmin, pot1ResistanceRmax, pot1ResistanceRmin);
MCP4251 f6(cs7, pot0ResistanceRmax, pot0ResistanceRmin, pot1ResistanceRmax, pot1ResistanceRmin);
MCP4251 f7(cs8, pot0ResistanceRmax, pot0ResistanceRmin, pot1ResistanceRmax, pot1ResistanceRmin);
MCP4251 f8(cs9, pot0ResistanceRmax, pot0ResistanceRmin, pot1ResistanceRmax, pot1ResistanceRmin);
MCP4251 f9(cs14, pot0ResistanceRmax, pot0ResistanceRmin, pot1ResistanceRmax, pot1ResistanceRmin);

void setup() {
    Serial.begin(9600);
    f0.begin();
    f0.DigitalPotTerminalBConnect(0);
    f0.DigitalPotTerminalAConnect(0);
    f0.DigitalPotWiperConnect(0);
    f1.begin();
    f1.DigitalPotTerminalBConnect(0);
    f1.DigitalPotTerminalAConnect(0);
    f1.DigitalPotWiperConnect(0);
    f2.begin();
    f2.DigitalPotTerminalBConnect(0);
    f2.DigitalPotTerminalAConnect(0);
    f2.DigitalPotWiperConnect(0);
    f3.begin();
    f3.DigitalPotTerminalBConnect(0);
    f3.DigitalPotTerminalAConnect(0);
    f3.DigitalPotWiperConnect(0);
    f4.begin();
    f4.DigitalPotTerminalBConnect(0);
    f4.DigitalPotTerminalAConnect(0);
    f4.DigitalPotWiperConnect(0);
    f5.begin();
    f5.DigitalPotTerminalBConnect(0);
    f5.DigitalPotTerminalAConnect(0);
    f5.DigitalPotWiperConnect(0);
    f6.begin();
    f6.DigitalPotTerminalBConnect(0);
    f6.DigitalPotTerminalAConnect(0);
    f6.DigitalPotWiperConnect(0);
    f7.begin();
    f7.DigitalPotTerminalBConnect(0);
    f7.DigitalPotTerminalAConnect(0);
    f7.DigitalPotWiperConnect(0);
    f8.begin();
    f8.DigitalPotTerminalBConnect(0);
    f8.DigitalPotTerminalAConnect(0);
    f8.DigitalPotWiperConnect(0);
    f9.begin();
    f9.DigitalPotTerminalBConnect(0);
    f9.DigitalPotTerminalAConnect(0);
    f9.DigitalPotWiperConnect(0);
    //Timer0.initialize(1000000000);
    //Timer0.attachInterrupt(read_USB);
    //Timer1.initialize(microsecdec);  
    //Timer1.attachInterrupt(decay);  
    //interrupts();
    Serial.begin(115200);
    while (!Serial)
      delay(10); // will pause Zero, Leonardo, etc until serial console opens

    Serial.println("OK!");
    //Timer1.initialize(1000000);     //testa se ci sono comandi sulla USB ogni 1msec
    //Timer1.attachInterrupt(read_USB); // read USB to run every 0.15 seconds
}

uint16_t wiper0;
uint16_t wiper1;




float conv_freq4_5(float freq)
{
    float restot;
    restot = 1 / (freq * 0.082);
    restot = restot * 1000000;
    restot = restot - 2200;
    restot = restot / 2;
    return restot;
}

float conv_freq1_2_3(float freq)
{
    float restot;
    restot = 1 / (freq * 6.28 * 0.022);
    restot = restot * 1000000;
    return restot;
}

void freq0(float freq)
{
    float resistenza = conv_freq1_2_3(freq);
    //primo pot. (10K)
    wiper0 = f0.DigitalPotResistanceToPosition(0, resistenza * 2);
    f0.DigitalPotSetWiperPosition(0, wiper0);
    //secondo pot. (10K)
    wiper1 = f0.DigitalPotResistanceToPosition(1, resistenza * 2);
    f0.DigitalPotSetWiperPosition(1, wiper1);
    //terzo pot. dig. (5K)
    wiper0 = f1.DigitalPotResistanceToPosition(0, resistenza);
    f1.DigitalPotSetWiperPosition(0, wiper0);
}

void freq1(float freq)
{
    float resistenza = conv_freq1_2_3(freq);
    //primo pot. (10K)
    wiper1 = f2.DigitalPotResistanceToPosition(1, resistenza * 2);
    f2.DigitalPotSetWiperPosition(1, wiper1);
    //secondo pot. (10K)
    wiper0 = f2.DigitalPotResistanceToPosition(0, resistenza * 2);
    f2.DigitalPotSetWiperPosition(0, wiper0);
    //terzo pot. dig. (5K)
    wiper1 = f1.DigitalPotResistanceToPosition(1, resistenza);
    f1.DigitalPotSetWiperPosition(1, wiper1);
}

void freq2(float freq)
{
    float resistenza = conv_freq1_2_3(freq);
    //primo pot. (10K)
    wiper0 = f3.DigitalPotResistanceToPosition(0, resistenza * 2);
    f3.DigitalPotSetWiperPosition(0, wiper0);
    //secondo pot. (10K)
    wiper1 = f3.DigitalPotResistanceToPosition(1, resistenza * 2);
    f3.DigitalPotSetWiperPosition(1, wiper1);
    //terzo pot. dig. (5K)
    wiper1 = f4.DigitalPotResistanceToPosition(1, resistenza);
    f4.DigitalPotSetWiperPosition(1, wiper1);
}

void freq3(float freq)
{
    float resistenza = conv_freq4_5(freq);
    //pot. 1
    wiper0 = f4.DigitalPotResistanceToPosition(0, resistenza);
    f4.DigitalPotSetWiperPosition(0, wiper0);
    //pot. 2
    wiper1 = f5.DigitalPotResistanceToPosition(1, resistenza);
    f5.DigitalPotSetWiperPosition(1, wiper1);
}

void freq4(float freq)
{
    float resistenza = conv_freq4_5(freq);
    //pot. 1
    wiper0 = f5.DigitalPotResistanceToPosition(0, resistenza);
    f5.DigitalPotSetWiperPosition(0, wiper0);
    //pot. 2
    wiper1 = f6.DigitalPotResistanceToPosition(1, resistenza);
    f6.DigitalPotSetWiperPosition(1, wiper1);
}


void amp1(int amp)
{
  //wiper0 f6
  wiper0 = f6.DigitalPotResistanceToPosition(0, amp);
  f6.DigitalPotSetWiperPosition(0, wiper0); 
}

void amp3(int amp)
{
  //wiper1 f7
  wiper1 = f7.DigitalPotResistanceToPosition(1, amp);
  f7.DigitalPotSetWiperPosition(1, wiper1); 
}

void amp2(float amp)
{
  //wiper0 f7
  wiper0 = f7.DigitalPotResistanceToPosition(0, amp);
  f7.DigitalPotSetWiperPosition(0, wiper0); 
}

void amp4(int amp)
{
  //wiper0 f8
  wiper0 = f8.DigitalPotResistanceToPosition(0, amp);
  f8.DigitalPotSetWiperPosition(0, wiper0); 
}

void amp5(int amp)
{
  //wiper1 f8
  wiper1 = f8.DigitalPotResistanceToPosition(1, amp);
  f8.DigitalPotSetWiperPosition(1, wiper1); 
}

void master_vol(int vol)
{
  //wiper0 f9
  wiper0= f9.DigitalPotResistanceToPosition(0, vol);
  f9.DigitalPotSetWiperPosition(0, wiper0); 
  //wiper1 f9
  wiper1= f9.DigitalPotResistanceToPosition(1, vol);
  f9.DigitalPotSetWiperPosition(1, wiper1); 
}

void cut_off(float ft)
{
  
}

void inviluppo(void)
{
  //attacco a gradino
  if(microsecatt == 0)
      {
        freq0(fr0);
        freq1(fr1);
        freq2(fr2);
        freq3(fr3);
        freq4(fr4);
        amp1(a1);
        amp2(a2);
        amp3(a3);
        amp4(a4);
        amp5(a5);
        master_vol(vol);
      }
      //attacco a rampa variabile
      else
      { 
        freq0(fr0);
        freq1(fr1);
        freq2(fr2);
        freq3(fr3);
        freq4(fr4);
        amp1(a1);
        amp2(a2);
        amp3(a3);
        amp4(a4);
        amp5(a5);
        while(vol!=0)
        { 
          master_vol(vol--);
          //delay(microsecatt);
        }
      }
      //decay 
      while(vol>=0 && vol==mast_vol-5000)
      { 
        master_vol(vol++);
        //delay(1);
      }
      //sustan
      delay(2000);
      //relese
      while(vol<=20000)
      { 
        master_vol(vol++);
        delay(1);
      }
      vol=0;
}


void loop() {
    while((Serial.available())>0) 
  {      
    // se c'è qualche byte da leggere, allora...
    char carattere=Serial.read();      // ...leggi byte
    //if(carattere=='\r') continue;
    if(carattere=='\n')
    {
      buffer[elemento_buffer]=0;       // inserisco un carettere NULL per indicare la fine dell'array
      elemento_buffer=0;               // resetto l'indice dell'array
      break;                           // esco dal ciclo while
    }
    buffer[elemento_buffer]=carattere; // creo l'array di caratteri
    elemento_buffer++;                 // incremento l'indice del buffer
    if(elemento_buffer==MAX_BUFFER)    // se si raggiunge il limite di byte del buffer allora...
    {
      elemento_buffer=MAX_BUFFER-1;    // ...sovrascrivi quello precedente
    } 
  if(buffer[0] == 'a')     
  { 
    inviluppo();
    Serial.println(buffer); 
  }
  buffer[0]='0';    //pulisci buffer
}
}
    

/*void read_USB()
{ 
  //interrompi l'inviluppo per suonare una nuova nota
  if((Serial.available())>0)
  {
    if(buffer[0]=='a')
    {
      Serial.println(buffer); 
      inviluppo();
    }
  }
}*/

This target application is to implement a sinthetizer.
When i press ‘a’ ARDUINOUNO play a frequency with inviluppo() function, but the frequency
was played every 1 second without a trasmission of letter ‘a’, why? I don’t know.
I need to implement an ARDUINO application than play a note when I press ‘a’, but that does’t append, and I don’t know why.
Can you help me please to understand why it doesn’t append?
Thank you so much.



Source link

Leave a Reply

Your email address will not be published. Required fields are marked *