21 maggio 17, 01:12 | #71 (permalink) Top |
User |
Dividere un problema complesso in tanti problemi semplici, è il consiglio migliore che mi abbiano mai dato...
__________________ Io??? Io volo in giardino!!! (Cioè... ci volavo da giovane.) http://www.youtube.com/results?searc...ype=&aq=-1&oq= |
22 maggio 17, 19:05 | #73 (permalink) Top | |
User Data registr.: 19-01-2005 Residenza: 33170 e dintorni
Messaggi: 10.447
| Citazione:
grazie, appena mi arrivano i display mi metto a sperimentare.
__________________ Trattiamo bene la terra su cui viviamo: essa non ci è stata donata dai nostri padri, ma ci è stata prestata dai nostri figli | |
23 maggio 17, 16:54 | #74 (permalink) Top | ||
User Data registr.: 19-01-2005 Residenza: 33170 e dintorni
Messaggi: 10.447
| Citazione:
Citazione:
ho gia capito come cambiare i colori delle varie scritte,ma non come mettere i valori medi. un grazie e poco. ciao
__________________ Trattiamo bene la terra su cui viviamo: essa non ci è stata donata dai nostri padri, ma ci è stata prestata dai nostri figli | ||
23 maggio 17, 19:45 | #75 (permalink) Top | |
User Data registr.: 03-09-2012 Residenza: Gubbio-Ravenna
Messaggi: 1.771
| Citazione:
Codice: #define sclk 13 #define mosi 11 #define cs 10 #define dc 9 #define rst 8 // reset #include <Adafruit_GFX.h> // Core graphics library #include <Adafruit_ST7735.h> // Hardware-specific library #include <SPI.h> Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst); // number of analog samples to take per reading, per channel #define NSAMP 128 // number of samples to take befor displaying (128=2^7) // voltage divider calibration values #define Dv1 11.00 #define Dv2 11.00 //number of channels #define N_CH 2 // ADC reference voltage / calibration value #define VREF 5.00 unsigned int u16_sum[2] = {0, 0}; // u16_sums of samples taken unsigned char u8_Scount = 0; // current sample number float f32_AVvolts[2] = {0.0, 0.0}; // calculated voltages char u8_cnt1 = 0; // used in 'for' loops float f32_V_max[2] = {0.00 ,0.00}; float f32_V_min[2] = {100.00, 100.00}; void setup() { tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab tft.fillScreen(ST7735_BLACK); // clear screen tft.setTextColor(ST7735_WHITE); tft.drawRoundRect(2, 10, 120, 110, 5,ST7735_WHITE); tft.setTextSize(1); tft.setCursor(5,0); tft.println("2 channel voltmeter"); tft.setTextColor(0XFF00); tft.setCursor(0,140); tft.println(" Caution max voltage 55vdc"); } void loop() { ADC_Reading(); //Read voltages MaxMin_Detection(); //Detect MAX/MIN and mean Print_V1(); //Display V1 and V2 voltages Print_V2(); tft.drawRoundRect(2, 10, 120, 120, 5,ST7735_WHITE); // draw a rectangle Reset_var(); //Reset variables } void ADC_Reading(){ while (u8_Scount < NSAMP) { // sample each channel A0 to A1 for (u8_cnt1 = 0; u8_cnt1 < N_CH; u8_cnt1++) { u16_sum[u8_cnt1] += analogRead(A0 + u8_cnt1); } u8_Scount++; delay(10); } } void MaxMin_Detection(){ // calculate the voltage for each channel for (u8_cnt1 = 0; u8_cnt1 < N_CH; u8_cnt1++) { f32_AVvolts[u8_cnt1] = ((u16_sum[u8_cnt1]>>7) * VREF) / 1024.0; if(f32_AVvolts[u8_cnt1] > f32_V_max[u8_cnt1]){ //get MAX value of sample f32_V_max[u8_cnt1] = f32_AVvolts[u8_cnt1]; } if(f32_AVvolts[u8_cnt1] < f32_V_min[u8_cnt1]){ //get MIN value of sample f32_V_min[u8_cnt1] = f32_AVvolts[u8_cnt1]; } } } void Print_V1(){ // voltage 1 - V1(pin A0) tft.setTextColor(ST7735_YELLOW,ST7735_BLACK); // set color for V1 tft.setTextSize(3); tft.setCursor(15, 20); tft.print("V1 "); tft.print(f32_AVvolts[0] * Dv1, 1); tft.print("V "); // voltage 1 - mean of V1 tft.setTextColor(ST7735_GREEN,ST7735_BLACK);// set color for V1 tft.setTextSize(2); tft.setCursor(15, 46); tft.print("Vmax "); tft.print(f32_V_max[1] * Dv1, 1); tft.print("V "); tft.setCursor(15, 63); tft.print("Vmin "); tft.print(f32_V_min[1] * Dv1, 1); tft.print("V "); } void Print_V2(){ // voltge 2 - V2 (pin A1) tft.setTextColor(ST7735_CYAN,ST7735_BLACK);// set color for V3 tft.setTextSize(3); tft.setCursor(15, 80); tft.print("V2 "); tft.print(f32_AVvolts[2] * Dv2, 1); tft.print("V "); // voltage 2 - mean of V2 tft.setTextColor(ST7735_WHITE,ST7735_BLACK);// set color for V4 tft.setTextSize(2); tft.setCursor(15, 106); tft.print("Vmax "); tft.print(f32_V_max[2] * Dv2, 1); tft.print("V "); tft.setCursor(15, 123); tft.print("Vmin "); tft.print(f32_V_min[2] * Dv2, 1); tft.print("V "); } void Reset_var(){ // reset variables u8_Scount = 0; for (u8_cnt1 = 0; u8_cnt1 < N_CH; u8_cnt1++) { u16_sum[u8_cnt1] = 0; } } 2 channels voltmeter /--------------------------------------------\ V1 0.00 V Vmax 0.00V Vmin 0.00V V2 0.00 V Vmax 0.00V Vmin 0.00V \--------------------------------------------/ Caution max voltage 55vdc Se le scritte sono decentrate o non allineate correggi tu in base a quello che vedi su display agendo su tft.setTextSize(), tft.setCursor() e tft.drawRoundRect()
__________________ Divertirsi insieme e con poco? Prova il combat! Curtman Squadron Combat Sito Web: https://sites.google.com/site/curtmansquadroncombat/ Ultima modifica di aero330 : 23 maggio 17 alle ore 19:49 | |
24 maggio 17, 01:38 | #76 (permalink) Top | |
User Data registr.: 19-01-2005 Residenza: 33170 e dintorni
Messaggi: 10.447
| Citazione:
nel frattempo ho cercato qualche tutorial per capire meglio sia arduino che come impostare questo display. ce ne molto da studiare. hai qualche consiglio? sono in debito. grazie ancora.
__________________ Trattiamo bene la terra su cui viviamo: essa non ci è stata donata dai nostri padri, ma ci è stata prestata dai nostri figli | |
24 maggio 17, 11:46 | #77 (permalink) Top | |
User Data registr.: 03-09-2012 Residenza: Gubbio-Ravenna
Messaggi: 1.771
| Citazione:
In allegato ti ho messo un pdf che ho trovato su internet un po' di tempo fa. Non l'ho mai letto, ma dandoci uno sguardo veloce mi pare un buon inizio per uno che è alle prime armi...ovviamente non è completo per quanto riguarda la programmazione ma rende bene l'idea di come muoversi in questo ambiente. Per il display basta cercare in rete. Non è il "classico" LCD per cui trovi molti esempi, ma sicuramente otterrai le info necessarie se trovi la lista delle istruzioni e realative funzioni svolte.
__________________ Divertirsi insieme e con poco? Prova il combat! Curtman Squadron Combat Sito Web: https://sites.google.com/site/curtmansquadroncombat/ | |
24 maggio 17, 12:41 | #78 (permalink) Top |
User Data registr.: 19-01-2005 Residenza: 33170 e dintorni
Messaggi: 10.447
|
buondi. caricato,in sostanza funziona ma ho dovuto ridurre i caratteri,altrimenti l'indicazione del voltaggio saltava la riga. pero il V2 non mi rileva niente,ho provato a studiare lo sketc,ma non ho capito dove sta il problema. Codice: #define sclk 13 #define mosi 11 #define cs 10 #define dc 9 #define rst 8 // reset #include <Adafruit_GFX.h> // Core graphics library #include <Adafruit_ST7735.h> // Hardware-specific library #include <SPI.h> Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst); // number of analog samples to take per reading, per channel #define NSAMP 128 // number of samples to take befor displaying (128=2^7) // voltage divider calibration values #define Dv1 11.00 #define Dv2 11.00 //number of channels #define N_CH 2 // ADC reference voltage / calibration value #define VREF 5.00 unsigned int u16_sum[2] = {0, 0}; // u16_sums of samples taken unsigned char u8_Scount = 0; // current sample number float f32_AVvolts[2] = {0.0, 0.0}; // calculated voltages char u8_cnt1 = 0; // used in 'for' loops float f32_V_max[2] = {0.00 ,0.00}; float f32_V_min[2] = {100.00, 100.00}; void setup() { tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab tft.fillScreen(ST7735_BLACK); // clear screen tft.setTextColor(ST7735_WHITE); tft.setTextSize(1); tft.setCursor(5,0); tft.println("2 channel voltmeter"); tft.setTextColor(0XFF00); tft.setCursor(0,140); tft.println(" Caution max voltage 55vdc"); } void loop() { ADC_Reading(); //Read voltages MaxMin_Detection(); //Detect MAX/MIN and mean Print_V1(); //Display V1 and V2 voltages Print_V2(); Reset_var(); //Reset variables } void ADC_Reading(){ while (u8_Scount < NSAMP) { // sample each channel A0 to A1 for (u8_cnt1 = 0; u8_cnt1 < N_CH; u8_cnt1++) { u16_sum[u8_cnt1] += analogRead(A0 + u8_cnt1); } u8_Scount++; delay(10); } } void MaxMin_Detection(){ // calculate the voltage for each channel for (u8_cnt1 = 0; u8_cnt1 < N_CH; u8_cnt1++) { f32_AVvolts[u8_cnt1] = ((u16_sum[u8_cnt1]>>7) * VREF) / 1024.0; if(f32_AVvolts[u8_cnt1] > f32_V_max[u8_cnt1]){ //get MAX value of sample f32_V_max[u8_cnt1] = f32_AVvolts[u8_cnt1]; } if(f32_AVvolts[u8_cnt1] < f32_V_min[u8_cnt1]){ //get MIN value of sample f32_V_min[u8_cnt1] = f32_AVvolts[u8_cnt1]; } } } void Print_V1(){ // voltage 1 - V1(pin A0) tft.setTextColor(ST7735_YELLOW,ST7735_BLACK); // set color for V1 tft.setTextSize(2); tft.setCursor(15, 20); tft.print("V1 "); tft.print(f32_AVvolts[0] * Dv1, 1); tft.print("V "); // voltage 1 - mean of V1 tft.setTextColor(ST7735_GREEN,ST7735_BLACK);// set color for V1 tft.setTextSize(1); tft.setCursor(15, 46); tft.print("Vmax "); tft.print(f32_V_max[1] * Dv1, 1); tft.print("V "); tft.setCursor(15, 63); tft.print("Vmin "); tft.print(f32_V_min[1] * Dv1, 1); tft.print("V "); } void Print_V2(){ // voltge 2 - V2 (pin A1) tft.setTextColor(ST7735_CYAN,ST7735_BLACK);// set color for V2 tft.setTextSize(2); tft.setCursor(15, 80); tft.print("V2 "); tft.print(f32_AVvolts[2] * Dv2, 1); tft.print("V "); // voltage 2 - mean of V2 tft.setTextColor(ST7735_WHITE,ST7735_BLACK);// set color for V2 tft.setTextSize(1); tft.setCursor(15, 106); tft.print("Vmax "); tft.print(f32_V_max[2] * Dv2, 1); tft.print("V "); tft.setCursor(15, 123); tft.print("Vmin "); tft.print(f32_V_min[2] * Dv2, 1); tft.print("V "); } void Reset_var(){ // reset variables u8_Scount = 0; for (u8_cnt1 = 0; u8_cnt1 < N_CH; u8_cnt1++) { u16_sum[u8_cnt1] = 0; } }
__________________ Trattiamo bene la terra su cui viviamo: essa non ci è stata donata dai nostri padri, ma ci è stata prestata dai nostri figli |
24 maggio 17, 12:51 | #79 (permalink) Top | |
User | Citazione:
__________________ Peace & Love Fate le cose nel modo più semplice possibile, ma senza semplificare. (A. Einstein) | |
24 maggio 17, 12:57 | #80 (permalink) Top | |
User Data registr.: 03-09-2012 Residenza: Gubbio-Ravenna
Messaggi: 1.771
| Citazione:
L'errore è dovuto ad una lettura errata negli array dove sono salvati i valori delle tensioni (sia quelli mediati che quelli di max/min). Nella funzione Print_V2, vado a leggere e stampare i valori nella 3° posizione dei rispettivi array quando in realtà questi sono lunghi 2 "celle": tft.print(f32_AVvolts[2] * Dv2, 1); -> tft.print(f32_AVvolts[1] * Dv2, 1); tft.print(f32_V_max[2] * Dv2, 1); -> tft.print(f32_V_max[1] * Dv2, 1); tft.print(f32_V_min[2] * Dv2, 1); -> tft.print(f32_V_min[1] * Dv2, 1); Anche in Print_V1 c'era una lettura errata, gli indici degli array vanno tutti a "[0]". Gli array/puntatori sono bestiacce Ecco il codice corretto: Codice: #define sclk 13 #define mosi 11 #define cs 10 #define dc 9 #define rst 8 // reset #include <Adafruit_GFX.h> // Core graphics library #include <Adafruit_ST7735.h> // Hardware-specific library #include <SPI.h> Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst); // number of analog samples to take per reading, per channel #define NSAMP 128 // number of samples to take befor displaying (128=2^7) // voltage divider calibration values #define Dv1 11.00 #define Dv2 11.00 //number of channels #define N_CH 2 // ADC reference voltage / calibration value #define VREF 5.00 unsigned int u16_sum[2] = {0, 0}; // u16_sums of samples taken unsigned char u8_Scount = 0; // current sample number float f32_AVvolts[2] = {0.0, 0.0}; // calculated voltages char u8_cnt1 = 0; // used in 'for' loops float f32_V_max[2] = {0.00 ,0.00}; float f32_V_min[2] = {100.00, 100.00}; void setup() { tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab tft.fillScreen(ST7735_BLACK); // clear screen tft.setTextColor(ST7735_WHITE); tft.setTextSize(1); tft.setCursor(5,0); tft.println("2 channels voltmeter"); tft.setTextColor(0XFF00); tft.setCursor(0,140); tft.println(" Caution max voltage 55vdc"); } void loop() { ADC_Reading(); //Read voltages MaxMin_Detection(); //Detect MAX/MIN and mean Print_V1(); //Display V1 and V2 voltages Print_V2(); tft.drawRoundRect(2, 10, 120, 120, 5,ST7735_WHITE); // draw a rectangle Reset_var(); //Reset variables } void ADC_Reading(){ while (u8_Scount < NSAMP) { // sample each channel A0 to A1 for (u8_cnt1 = 0; u8_cnt1 < N_CH; u8_cnt1++) { u16_sum[u8_cnt1] += analogRead(A0 + u8_cnt1); } u8_Scount++; delay(10); } } void MaxMin_Detection(){ // calculate the voltage for each channel for (u8_cnt1 = 0; u8_cnt1 < N_CH; u8_cnt1++) { f32_AVvolts[u8_cnt1] = ((u16_sum[u8_cnt1]>>7) * VREF) / 1024.0; if(f32_AVvolts[u8_cnt1] > f32_V_max[u8_cnt1]){ //get MAX value of sample f32_V_max[u8_cnt1] = f32_AVvolts[u8_cnt1]; } if(f32_AVvolts[u8_cnt1] < f32_V_min[u8_cnt1]){ //get MIN value of sample f32_V_min[u8_cnt1] = f32_AVvolts[u8_cnt1]; } } } void Print_V1(){ // voltage 1 - V1(pin A0) tft.setTextColor(ST7735_YELLOW,ST7735_BLACK); // set color for V1 tft.setTextSize(2); tft.setCursor(15, 20); tft.print("V1 "); tft.print(f32_AVvolts[0] * Dv1, 1); tft.print("V "); // voltage 1 - mean of V1 tft.setTextColor(ST7735_GREEN,ST7735_BLACK);// set color for V1 tft.setTextSize(2); tft.setCursor(15, 46); tft.print("Vmax "); tft.print(f32_V_max[0] * Dv1, 1); tft.print("V "); tft.setCursor(15, 63); tft.print("Vmin "); tft.print(f32_V_min[0] * Dv1, 1); tft.print("V "); } void Print_V2(){ // voltge 2 - V2 (pin A1) tft.setTextColor(ST7735_CYAN,ST7735_BLACK);// set color for V3 tft.setTextSize(2); tft.setCursor(15, 80); tft.print("V2 "); tft.print(f32_AVvolts[1] * Dv2, 1); tft.print("V "); // voltage 2 - mean of V2 tft.setTextColor(ST7735_WHITE,ST7735_BLACK);// set color for V4 tft.setTextSize(2); tft.setCursor(15, 106); tft.print("Vmax "); tft.print(f32_V_max[1] * Dv2, 1); tft.print("V "); tft.setCursor(15, 123); tft.print("Vmin "); tft.print(f32_V_min[1] * Dv2, 1); tft.print("V "); } void Reset_var(){ // reset variables u8_Scount = 0; for (u8_cnt1 = 0; u8_cnt1 < N_CH; u8_cnt1++) { u16_sum[u8_cnt1] = 0; } }
__________________ Divertirsi insieme e con poco? Prova il combat! Curtman Squadron Combat Sito Web: https://sites.google.com/site/curtmansquadroncombat/ | |
Bookmarks |
| |
Discussioni simili | ||||
Discussione | Autore discussione | Forum | Commenti | Ultimo Commento |
arduino uno e ..... | FLYTS | Circuiti Elettronici | 3 | 23 settembre 14 15:50 |