Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - info tecniche
Forum - C# / VB.NET - info tecniche

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
nightwolf (Normal User)
Pro


Messaggi: 149
Iscritto: 14/09/2010

Segnala al moderatore
Postato alle 15:43
Mercoledì, 22/11/2023
buongiorno a tutti, sto continuando con il mio progetto, ho ampliato il mio progetto aggiungendo un vumeter x l audio, la stazione radio e la possibilità di vedere i video, adesso ho aggiunto il collegamento con arduino e più precisamento il controllo del volume con un potenziometro, il tutto funziona ma non so perchè la tackbar del volume se uso arduino si attiva e disattiva in modo irregolare,
mi spiego meglio, la trackbar del volume è attivata attraverso 2 timer, uno x visualizzarla e uno x nasconderla, e se uso i button + e - non ci sono problemi, ma quando attivo arduino i timer si attivano e disattivano in modo irregolare, questo è dovuto dal potenziometro?
posto i vari codice
Codice sorgente - presumibilmente VB.NET

  1. Private Sub Button3_Click_1(sender As Object, e As EventArgs) Handles Button3.Click
  2.         trc_volume.Value += 2
  3.         AxWindowsMediaPlayer1.settings.volume = trc_volume.Value
  4.         lb_volume.Text = trc_volume.Value.ToString + "%"
  5.         Timer3.Start()
  6.     End Sub
  7.  
  8.     Private Sub Button4_Click_1(sender As Object, e As EventArgs) Handles Button4.Click
  9.         trc_volume.Value -= 2
  10.         AxWindowsMediaPlayer1.settings.volume = trc_volume.Value
  11.         lb_volume.Text = trc_volume.Value.ToString + "%"
  12.         Timer3.Start()
  13.     End Sub



Codice sorgente - presumibilmente VB.NET

  1. Private Sub Timer3_Tick(sender As Object, e As EventArgs) Handles Timer3.Tick
  2.  
  3.         Label1.Visible = True
  4.             trc_volume.Visible = True
  5.             lb_volume.Visible = True
  6.         Timer4.Start()
  7.     End Sub
  8.  
  9.     Private Sub Timer4_Tick(sender As Object, e As EventArgs) Handles Timer4.Tick
  10.         Timer3.Stop()
  11.         Label1.Visible = False
  12.         trc_volume.Visible = False
  13.         lb_volume.Visible = False
  14.     End Sub



questo invece è il codice quando faccio la comunicazione seriale
Codice sorgente - presumibilmente VB.NET

  1. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
  2.         Try
  3.             Dim i As Single = SerialPort1.ReadExisting
  4.             media_pleyer.lb_volume.Text = i.ToString + "%"
  5.             media_pleyer.trc_volume.Value = i.ToString
  6.             media_pleyer.Timer3.Start()
  7.             media_pleyer.AxWindowsMediaPlayer1.settings.volume = media_pleyer.trc_volume.Value
  8.         Catch ex As Exception
  9.  
  10.         End Try
  11.     End Sub


PM Quote
Avatar
nightwolf (Normal User)
Pro


Messaggi: 149
Iscritto: 14/09/2010

Segnala al moderatore
Postato alle 15:47
Mercoledì, 22/11/2023
questo è il codice su arduino, c'è anche il codice x visualizzare l orario su di un lcd i2c
Codice sorgente - presumibilmente C++

  1. #include "RTClib.h"
  2. #include <LiquidCrystal_I2C.h>
  3.  
  4. LiquidCrystal_I2C lcd(0x27,16,2);  
  5.  
  6. RTC_DS3231 rtc;
  7. DateTime now;
  8.  
  9. char str[3];
  10. int stato1 = 0;
  11. int ledPin = 9;
  12. int analogPin = 0;
  13. int val = 0;
  14.  
  15. void setup () {
  16.   Serial.begin(9600);
  17.  
  18.   lcd.backlight();
  19.   lcd.init();
  20.   Wire.begin();
  21.   //pulsanti set e reset
  22.   pinMode(6, INPUT);
  23.   pinMode(7, INPUT);
  24.   pinMode(ledPin, OUTPUT);
  25.  
  26.   if (! rtc.begin()) {
  27.     Serial.println("Couldn't find RTC");
  28.     while(true);
  29.   }
  30.  
  31.   if (! rtc.lostPower()) {
  32.     Serial.println("RTC is NOT running, let's set the time!");
  33.     rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  34.    
  35.   }
  36.  
  37. }
  38.  
  39. void loop () {
  40.   ORA();
  41.   val = analogRead(analogPin);
  42.  analogWrite(ledPin, val / 10 - 1);
  43.  Serial.println(val / 10 - 1);
  44.  delay(100);
  45. }
  46. void ORA(){
  47. switch(stato1){
  48.     case 0:
  49.       displayTime();
  50.       break;  
  51.     case 1:
  52.       setHour();
  53.       break;
  54.     case 2:
  55.       setMinute();
  56.       break;
  57.     case 3:
  58.       setSecond();
  59.       break;
  60.     case 4:
  61.       setyear();
  62.       break;
  63.     case 5:
  64.       setmonth();
  65.       break;  
  66.     case 6:
  67.       setday();
  68.       break;  
  69.    
  70.   }  
  71. }
  72.  
  73.  
  74. unsigned long t1, dt1;
  75. bool FIRST = true;
  76.  
  77. void displayTime() {
  78.   if (FIRST) {
  79.     lcd.clear();
  80.     t1 = millis();
  81.     FIRST = false;
  82.   }        
  83.  
  84.   dt1 = millis() - t1;
  85.   if (dt1 > 1000) {
  86.     now = rtc.now();
  87.     lcd.setCursor(4,1);  
  88.    
  89.     sprintf(str, "%02d", now.hour());
  90.     lcd.print(str);
  91.     lcd.print(':');
  92.     sprintf(str, "%02d", now.minute());
  93.     lcd.print(str);
  94.     lcd.print(':');
  95.     sprintf(str, "%02d", now.second());
  96.     lcd.print(str);
  97.    
  98.     lcd.setCursor(3,0);  
  99.    
  100.     sprintf(str, "%02d", now.day());
  101.     lcd.print(str);
  102.     lcd.print('/');
  103.     sprintf(str, "%02d", now.month());
  104.     lcd.print(str);
  105.     lcd.print('/');
  106.     sprintf(str, "%02d", now.year());
  107.     lcd.print(str);
  108.  
  109.     t1 = millis();    
  110.   }
  111.  
  112.   if (digitalRead(6)) {
  113.     //imposta ora
  114.     stato1 = 1;  
  115.     delay(300);
  116.     FIRST = true;
  117.   }
  118. }
  119.  
  120. int seth = 0;
  121.  
  122. void setHour() {
  123.   if (FIRST) {
  124.     lcd.clear();
  125.     now = rtc.now();
  126.     seth = now.hour();
  127.     lcd.setCursor(0,0);
  128.     lcd.print("Imposta ora");      
  129.     FIRST = false;
  130.   }        
  131.   lcd.setCursor(0,1);      
  132.   sprintf(str, "%02d", seth);
  133.   lcd.print(str);
  134.  
  135.   if (digitalRead(7)) {
  136.     seth++;
  137.     if (seth >= 24) seth = 0;
  138.     delay(200);  
  139.   }
  140.   if (digitalRead(6)) {
  141.     //salva ora scelta e passa ai minuti
  142.     rtc.adjust(DateTime(now.year(), now.month(), now.day(), seth, now.minute(), now.second()));
  143.     stato1 = 2;
  144.     FIRST = true;
  145.     delay(200);
  146.   }
  147. }
  148.  
  149. int setm;
  150. void setMinute(){
  151.   if (FIRST) {
  152.     lcd.clear();
  153.     now = rtc.now();
  154.     setm = now.minute();
  155.     lcd.setCursor(0,0);
  156.     lcd.print("Imposta minuti");      
  157.     FIRST = false;
  158.   }        
  159.   lcd.setCursor(0,1);      
  160.   sprintf(str, "%02d", setm);
  161.   lcd.print(str);
  162.  
  163.   if (digitalRead(7)) {
  164.     setm++;
  165.     if (setm >= 60) setm = 0;
  166.     delay(200);  
  167.   }
  168.   if (digitalRead(6)) {
  169.     //salva min scelta e passa ai sec
  170.     rtc.adjust(DateTime(now.year(), now.month(), now.day(), now.hour(), setm, now.second()));
  171.     stato1 = 3;
  172.     delay(200);
  173.     FIRST = true;
  174.   }  
  175. }
  176.  
  177. int sets = 0;
  178.  
  179. void setSecond(){
  180.   if (FIRST) {
  181.     lcd.clear();
  182.     now = rtc.now();
  183.     sets = now.second();
  184.     lcd.setCursor(0,0);
  185.     lcd.print("Imposta sec.");      
  186.     FIRST = false;
  187.   }        
  188.   lcd.setCursor(0,1);      
  189.   sprintf(str, "%02d", sets);
  190.   lcd.print(str);
  191.  
  192.   if (digitalRead(7)) {
  193.     sets++;
  194.     if (sets >= 60) sets = 0;
  195.     delay(200);  
  196.   }
  197.   if (digitalRead(6)) {
  198.     //salva sec scelta e passa ai minuti
  199.     rtc.adjust(DateTime(now.year(), now.month(), now.day(), now.hour(), now.minute(), sets));
  200.     stato1 = 4;
  201.     delay(200);
  202.     FIRST = true;
  203.   }  
  204. }
  205.  
  206. int sety = 0;
  207.  
  208. void setyear(){
  209.   if (FIRST) {
  210.     lcd.clear();
  211.     now = rtc.now();
  212.     sety = now.year();
  213.     lcd.setCursor(0,0);
  214.     lcd.print("Imposta anno");      
  215.     FIRST = false;
  216.   }        
  217.   lcd.setCursor(0,1);      
  218.   sprintf(str, "%02d", sety);
  219.   lcd.print(str);
  220.  
  221.   if (digitalRead(7)) {
  222.     sety++;
  223.     if (sety >= 9999) sety = 0;
  224.     delay(200);  
  225.   }
  226.   if (digitalRead(6)) {
  227.     //salva sec scelta e passa ai minuti
  228.     rtc.adjust(DateTime(sety, now.month(), now.day(), now.hour(), now.minute(), now.second()));
  229.     stato1 = 5;
  230.     delay(200);
  231.     FIRST = true;
  232.   }  
  233. }
  234.  
  235. int setmo = 0;
  236.  
  237. void setmonth(){
  238.   if (FIRST) {
  239.     lcd.clear();
  240.     now = rtc.now();
  241.     setmo = now.month();
  242.     lcd.setCursor(0,0);
  243.     lcd.print("Imposta mese");      
  244.     FIRST = false;
  245.   }        
  246.   lcd.setCursor(0,1);      
  247.   sprintf(str, "%02d", setmo);
  248.   lcd.print(str);
  249.  
  250.   if (digitalRead(7)) {
  251.     setmo++;
  252.     if (setmo >= 12) setmo = 0;
  253.     delay(200);  
  254.   }
  255.   if (digitalRead(6)) {
  256.     //salva sec scelta e passa ai minuti
  257.     rtc.adjust(DateTime(now.year(), setmo, now.day(), now.hour(), now.minute(), now.second()));
  258.     stato1 = 6;
  259.     delay(200);
  260.     FIRST = true;
  261.   }  
  262. }
  263.  
  264. int setd = 0;
  265.  
  266. void setday(){
  267.   if (FIRST) {
  268.     lcd.clear();
  269.     now = rtc.now();
  270.     setd = now.day();
  271.     lcd.setCursor(0,0);
  272.     lcd.print("Imposta giorno");      
  273.     FIRST = false;
  274.   }        
  275.   lcd.setCursor(0,1);      
  276.   sprintf(str, "%02d", setd);
  277.   lcd.print(str);
  278.  
  279.   if (digitalRead(7)) {
  280.     setd++;
  281.     if (setd >= 31) setd = 0;
  282.     delay(200);  
  283.   }
  284.   if (digitalRead(6)) {
  285.     //salva sec scelta e passa ai minuti
  286.     rtc.adjust(DateTime(now.year(), now.month(), setd, now.hour(), now.minute(), now.second()));
  287.     stato1 = 0;
  288.     delay(200);
  289.     FIRST = true;
  290.   }  
  291. }


PM Quote
Avatar
nightwolf (Normal User)
Pro


Messaggi: 149
Iscritto: 14/09/2010

Segnala al moderatore
Postato alle 20:41
Mercoledì, 29/11/2023

PM Quote
Avatar
nightwolf (Normal User)
Pro


Messaggi: 149
Iscritto: 14/09/2010

Segnala al moderatore
Postato alle 20:42
Mercoledì, 29/11/2023
questo è il video del problema che ho, se qulcuno riesc a capirci qualcosa
grazie mille

PM Quote
Avatar
nightwolf (Normal User)
Pro


Messaggi: 149
Iscritto: 14/09/2010

Segnala al moderatore
Postato alle 20:43
Mercoledì, 29/11/2023
Testo quotato

Postato originariamente da nightwolf:

questo è il video del problema che ho, se qulcuno riesc a capirci qualcosa
grazie mille


Ultima modifica effettuata da nightwolf il 29/11/2023 alle 20:49
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2308
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 10:56
Giovedì, 30/11/2023
Perché usi un timer per attivare una trackbar?


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
nightwolf (Normal User)
Pro


Messaggi: 149
Iscritto: 14/09/2010

Segnala al moderatore
Postato alle 12:00
Giovedì, 30/11/2023
i timer li uso per far si che si visualizzi e dopo 5 secondi si nascondono, li ho messi come visible=false di default

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2308
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 22:45
Giovedì, 30/11/2023
il problema deve essere proprio li allora

Testo quotato




perchè la tackbar del volume se uso arduino si attiva e disattiva in modo irregolare,




Prova ad usare i thread paralleli con Thread.Sleep ottenendo lo stesso risultato, ma con la sicurezza
che dopo l'esecuzione  i thread viengono chiusi.

Ma ricorda di utilizzare il metodo Invoke.
Non sò in vb.net come si scrive penso carlo possa aiutarti.
in c# si esegue un Invoke sui controlli da un thread diverso da quello principale


Codice sorgente - presumibilmente C# / VB.NET

  1. Thread t = new Thread(Avvio);
  2. t.start();
  3.  
  4.  
  5. void Avvio()
  6. {
  7.  
  8. Thread.sleep(5000);
  9. Invoke(new Action(delegate() { trc_volume.Visible = true;  });
  10.  
  11.  
  12. }



Altra cosa, bisogna vedere bene cosa legge il programma da arduino e cosa realmente fà.
Anche in quel caso, imposta un contatore o un breakpoint per sapere cosa succede.

Probabile che anche li ci sia un problema ed avvii piu volte la stessa operazione.

Ultima modifica effettuata da Thejuster il 01/12/2023 alle 4:14


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1350
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 15:25
Sabato, 02/12/2023
Testo quotato

Postato originariamente da Thejuster:

Codice sorgente - presumibilmente C# / VB.NET

  1. Thread t = new Thread(Avvio);
  2. t.start();
  3.  
  4.  
  5. void Avvio()
  6. {
  7.  
  8. Thread.sleep(5000);
  9. Invoke(new Action(delegate() { trc_volume.Visible = true;  });
  10.  
  11.  
  12. }





in VB .NET:

Codice sorgente - presumibilmente VB.NET

  1. Dim t As New Threading.Thread(AddressOf Avvio)
  2. t.Start()
  3.  
  4.  
  5.  
  6. Private Sub Avvio()
  7.  
  8.     Threading.Thread.Sleep(5000)
  9.     Invoke(New Action(Sub()
  10.                               trc_volume.Visible = true
  11.                           End Sub))
  12. End Sub


Ultima modifica effettuata da Carlo il 02/12/2023 alle 15:53


in programmazione tutto è permesso
PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo