Pages: [1]   Go Down
Author Topic: Aiuto primo codice  (Read 747 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 26
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao raga mi sto dilettando con arduino per la mia prima volta e ho fatto un piccolo schemino per controllare un motorino DC 3.3V. Il progetto è il seguente:

-Si accende un led per volta e di conseguenza si avvia il motore ad una certa velocità ovvero:
Led Rosso = Motore 75%
Led Giallo = Motore 50%
Led Verde = Motore 25%
Ritardo tra uno stato ed un altro di 5 secondi.

Poi il mio problema è che non riesco a far comunicare alla seriale lo stato del motore ovvero,riesco a scrivere led acceso e led spento,però quando dico di scrivere lo stato del motore o i pwn mi esce sempre il numero 3 che sarebbe il pin del motore. Io vorrei che ad ogni stato sul computer mi appaiono gli stati del led e poi magari la velocità del motore, 75 50 o 25 xò usando la variabile e non scrivendolo io.
Allego sketch e disegno:

Code:
/*
Sketch per far girare un motorino elettrico a potenza di
25,50 e 75%,e contemporaneamente accende un led per ogni stato:
Led Rosso = Motore 75%
Led Giallo = Motore 50%
Led Verde = Motore 25%
Dopo implementazione per leggere via seriale gli stati
*/

const int Rosso = 12;
const int Giallo = 8;
const int Verde = 7;
int Motore = 3;

void setup() {
 pinMode(Rosso, OUTPUT);
 pinMode(Giallo, OUTPUT);
 pinMode(Verde, OUTPUT);
 pinMode(Motore, OUTPUT);
 Serial.begin(9600);
}

void loop() {
 
 digitalWrite(Verde, HIGH);
 analogWrite(Motore, 63);
 Serial.println("Potenza al 25% ,Led Verde Acceso");
 Serial.println(Motore);
 delay(5000);
 digitalWrite(Verde, LOW);
 Serial.println("Spento Led Verde");
 digitalWrite(Giallo, HIGH);
 analogWrite(Motore, 127);
 Serial.println("Potenza al 50% ,Led Giallo Acceso");
 Serial.println(Motore);
 delay(5000);
 digitalWrite(Giallo, LOW);
 Serial.println("Led Giallo Spento");
 digitalWrite(Rosso, HIGH);
 analogWrite(Motore, 191);
 Serial.println("Led Rosso Acceso ,Potenza al 75%");
 Serial.println(Motore);
 delay(5000);
 digitalWrite(Rosso, LOW);
 Serial.println("Led Rosso Spento");
}


skosso ha scritto:
non dovresti collegare il motore ad una porta analogica? anziché alla digitale?
poi con questo comando  "Serial.println(Motore);" ti scriverà per forza 3..... sopra hai dichiarato "int motore = 3;"

Io ho risposto:
Kmq io ho dato int motore 3 xke pensavo di dire ad arduino che il motore è collegato al pin 3. Invece come devo fare?


* motore1_bb.jpg (59.64 KB, 870x522 - viewed 39 times.)
Logged

0
Offline Offline
Faraday Member
**
Karma: 31
Posts: 2908
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao, tu usi una costante numerica per stabilire la percentuale del PWM, qui scrivi "analogWrite(Motore, 63);"
63 viene genericamente detto magic number, questo perchè un numero non fornisce altre informazioni al programmatore che legge il codice. Invece una variabile grazie al nome che gli si dà fornisce più informazioni al programmatore.

Anche usando il magic number la cosa si potrebbe risolvere se Arduino core mettesse a disposizione una funzione per leggere il valore attuale del PWM, ma questa funzione non c'è.

Quindi usa una variabile dove salvare il valore del PWM, es:
Code:
// non hai usato buoni nomi

const int Rosso = 12;
const int Giallo = 8;
const int Verde = 7;
int Motore = 3;

byte velocitaCorrente = 0;

...

void loop() {
 
 digitalWrite(Verde, HIGH);
 velocitaCorrente = 63;
 analogWrite(Motore, velocitaCorrente);
 Serial.println("Potenza al 25% ,Led Verde Acceso");
 Serial.println(Motore);


Se invece vuoi visualizzare 25 quando "velocitaCorrente è 63 puoi sottrarre 38 a 63, oppure usare "map" ma devi documentarti perchè non ricordo come funziona.

Ciao.
Logged

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

Offline Offline
Newbie
*
Karma: 1
Posts: 26
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie mille per l'aiuto ora ho capito,domani modifico lo sketch. Invece per quanto riguarda il collegamento ho fatto bene a collegare il motorino sul pin digitale pwm o dovevo metterlo su quello analogico?
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 574
Posts: 12691
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie mille per l'aiuto ora ho capito,domani modifico lo sketch. Invece per quanto riguarda il collegamento ho fatto bene a collegare il motorino sul pin digitale pwm o dovevo metterlo su quello analogico?
hai fatto bene, il pin analogico è tale solo in lettura, mentre il pwm si trova solo sui pin predisposti a tale scopo.
Logged


Pages: [1]   Go Up
Jump to: