Es correcto esta parte del sketch?

Hola a todos,

Estoy haciendo un programita para Arduino y quisiera consultarles si este fragmento de codigo es correcto y hace lo que espero de el.

/*

*/

#include “math.h”
#define DEG_TO_RAD(X) (M_PI*(X)/180)

#define RED OCR1A
#define GREEN OCR1B
#define BLUE OCR1C
#define WHITE OCR4A

int whitevalue;

void setup() {
// initialize serial:
Serial.begin(9600);
Serial.print(“Arduino control RGB LEDs Connected OK ( Sent From Arduinno Board )”);
Serial.print(’\n’);
}

DDRB |= (1<<7)|(1<<6)|(1<<5);

ICR1 = 0xFFFF;

TCCR1A = 0b10101010;
TCCR1B = 0b00011001;

RED = 0x0000;
GREEN = 0x0000;
BLUE = 0x0000;

DDRC |= (1<<7);

TC4H = 0x03;
OCR4C = 0xFF;

TCCR4A = 0b10000010;
TCCR4B = 0b00000001;

whitevalue = 0x000;

TC4H = whitevalue >> 8;

WHITE = 0xFF & whitevalue;

En principio si no me he equivocado, para un Arduino Leonardo (o cualquiera con Atmega32u4) he declarado 4 salidas pwm de 16 bits e iniciado la conexion bluetooth para que un movil se conecte al Arduino y reciba la señal el movil que esta conectado correctamente. Es asi?

Lo primero que te diré es que los códigos se ponen entre [ code ][ /code ] es el que aparece como # en las barras de edición.
Lo segundo es que el bloque setup esta bien pero no veo el bloque loop()

DDRB |= (1<<7)|(1<<6)|(1<<5);
ICR1 = 0xFFFF;

TCCR1A = 0b10101010;
TCCR1B = 0b00011001;

RED = 0x0000;
GREEN = 0x0000;
BLUE = 0x0000;

DDRC |= (1<<7);
TC4H = 0x03;
OCR4C = 0xFF;
TCCR4A = 0b10000010;
TCCR4B = 0b00000001;
whitevalue = 0x000;
TC4H = whitevalue >> 8;
WHITE = 0xFF & whitevalue;

Todo esto suele ir en el setup porque son inicializaciones de timers.
Observaciones

  1. Estas a mitad de camino entre AVR y ARDUINO. Decide que posición tomar, aunque puedes usar las dos.
  2. Por el momento el programa esta muy muy inconcluso.

Gracias por lo del code, no lo sabia.

El loop todavia no lo he echo, por eso no esta. Queria saber si desde el inicio del sketch hasta la parte que tengo está correctamente desarrollado o hay algun error, por eso está bastante inconcluso. La idea es verificar que esta parte del codigo hace exactamente lo que busco:

  • Usar los timers para tener tres salidas pwm de 16 bits y una de 10 bits
  • Iniciar la conexion bluetooth para que pueda recibir instrucciones sobre que debe enviar a cada salida pwm, y enviar un mensaje de verificacion de enlace al movil conectado por bluetooth.

Una vez tenga esto, me pongo con el resto de funciones, que serian la interpretación de los datos recibidos por bluetooth y como deben representarse por los pwm.

Entonces, podriamos decir que tal como he escrito esta parte del codigo, esta correctamente redactada?

/*
 
 */

#include "math.h"
#define DEG_TO_RAD(X) (M_PI*(X)/180)

#define RED OCR1A
#define GREEN OCR1B
#define BLUE OCR1C
#define WHITE OCR4A

int whitevalue;


void setup() {
   // initialize serial:
  Serial.begin(9600);
  Serial.print("Arduino control RGB LEDs Connected OK ( Sent From Arduinno Board )");
  Serial.print('\n');
}

DDRB |= (1<<7)|(1<<6)|(1<<5);


ICR1 = 0xFFFF;

TCCR1A = 0b10101010;
TCCR1B = 0b00011001;

RED = 0x0000;
GREEN = 0x0000;
BLUE = 0x0000;

DDRC |= (1<<7);

TC4H = 0x03;
OCR4C = 0xFF;

TCCR4A = 0b10000010;
TCCR4B = 0b00000001;

whitevalue = 0x000;

TC4H = whitevalue >> 8;

WHITE = 0xFF & whitevalue;

A partir de aqui es donde iniciaria el loop.

Lo que veo es que te explicas con pobreza, mucha pobreza.

Para que alguien te responda, debes ser tecnicamente mas preciso.
Dinos que quieres hacer con cada timer?
Y no al revés, o sea que nosotros investiguemos que pretendes hacer.

Quizas con que me explico con pobreza te referiras a que mis conocimientos de programacion y electronica no son muy altos, pero no se ver exactamente donde está el problema de mi explicación.

Si no tengo mal entendido cada timer controla una serie de registros que se corresponden con unos pins determinados que tienen la funcion pwm. Si se declara un pin pwm directamente de la forma habitual este funciona a 8 bits, pero si se hace a traves de los registros de hardware puedes obtener 3 pines pwn a 16 bits (en el Arduino Leonardo). Correcto?

Así , por ejemplo , si lo configuro diciendo : OCR1A = 0x8000 hará que el pin correspondiente haga el 50 % de el ciclo de trabajo PWM y si hago OCR1A = 0xFFFF Hará que el mismo pin haga el 100 % del ciclo de trabajo PWM. Me equivoco?

No he leido tu respuesta. Lo que te pido que digas es: Quiero hacer esto: Con el TIMER 4 y una frecuencia de X Khz y un ciclo de trabajo de tanto, comandaré tal cosa. Con el TIMER 1 idem

Lo obvio ya lo sabemos, al menos yo. ahora porque luchas usando y definiendo como AVR (atmel standard) y no usando comandos Arduino.

no importa si tienes o no conocimientos, explicarse bien va mas alla de eso. Tu explica la idea con detenimiento y detalle. Veo en lo poco que entiendo que defines ROJO, VERDE, AZUL y BLANCO. O obvio dice que usarás un led RGB intentando hacer fade up y down (o sea desvanecimiento arriba y hacia abajo) Para que esto: #define DEG_TO_RAD(X) (M_PI*(X)/180)

Entonces... de nuevo. Explica la idea global. Dinos si tienes algo. Y como crees encararlo y si tienes links postea los links.

Hi all ,

I’m making a little program for Arduino and I would ask them if this code snippet is correct and does what I expect from him.

/*
 
 */

#include "math.h"
#define DEG_TO_RAD(X) (M_PI*(X)/180)

#define RED OCR1A
#define GREEN OCR1B
#define BLUE OCR1C
#define WHITE OCR4A

int whitevalue;


void setup() {
   // initialize serial:
  Serial.begin(9600);
  Serial.print("Arduino control RGB LEDs Connected OK ( Sent From Arduinno Board )");
  Serial.print('\n');
}

DDRB |= (1<<7)|(1<<6)|(1<<5);


ICR1 = 0xFFFF;

TCCR1A = 0b10101010;
TCCR1B = 0b00011001;

RED = 0x0000;
GREEN = 0x0000;
BLUE = 0x0000;

DDRC |= (1<<7);

TC4H = 0x03;
OCR4C = 0xFF;

TCCR4A = 0b10000010;
TCCR4B = 0b00000001;

whitevalue = 0x000;

TC4H = whitevalue >> 8;

WHITE = 0xFF & whitevalue;

It is unfinished , but I wonder if what I’ve written makes sense or not .

If I haven´t misunderstood each timer controls a number of records that correspond with certain pins that have the pwm function. A pwm pin defined directly in the usual way works at 8 bits , but if done through hardware registers can get 3 pin pwn 16 bits ( in the Arduino Leonardo) . Right?

For example , if I set saying OCR1A = 0x8000 will cause the corresponding pin then 50% of the PWM cycle work and if I OCR1A = 0xFFFF Cause the same pin make 100 % duty cycle PWM work. Am I wrong ?

The code is not written in the usual form of Arduino, I took information from here and there, so I 'd appreciate any error pointed .

What should I do hope I have written the following:

Declare four 16-bit PWM outputs and initiate a bluetooth connection for mobile connect to Arduino and receive the signal that the phone is properly connected, awaiting instructions sended from smartphone and wich ones are to be interpreted by the rest of the code that has yet to be written .

PD: I am a newbie , so please no surprise to you that has made ??a big mistake :slight_smile:

What did the compiler say?

(You don't need to answer that, I know)

I dont understand youre answer. Im here to learn, Why do you mock me?

You've posted code that doesn't even compile. Who is mocking who?

I say that the code IS NOT FINISHED YET. Of course it cant be compiled

You should put all the setup code into setup().You can’t assign registers at outer level, only
declare and initialize variables and declare functions.

If you post code that doesn’t compile, be sure to post the complete error listing too. Try not
to make people do unnecessary work if you want them to be efficient at helping you (!)

The great thing about Arduino is you can try things. If it doesn't work, change it and try again. If we can't see how your code is supposed to be structured BECAUSE IT ISN'T CAPABLE OF BEING COMPILED, it's pretty pointless commenting on what it is or isn't supposed to do.

I say that the code IS NOT FINISHED YET. Of course it cant be compiled

Nonsense. You should not be writing code that can't compile. At most, you write a few lines of code, and compile. Fix the errors, and compile. Add a few more lines of code, and repeat.

And, you do NOT get all snotty when your poorly written code is picked apart. You came here for help without explaining what your problem is, or what you need help with.

Thread title "Is that sketch ok?"

It isn't a sketch, so no, obviously it isn't OK.

MarkT: You should put all the setup code into setup().You can't assign registers at outer level, only declare and initialize variables and declare functions.

If you post code that doesn't compile, be sure to post the complete error listing too. Try not to make people do unnecessary work if you want them to be efficient at helping you (!)

Thanks for youre answer MarkT, I had not thought about it. The error listing is this:

sketch_oct18a:23: error: expected unqualified-id before 'volatile'
sketch_oct18a:23: error: expected `)' before 'volatile'
sketch_oct18a:23: error: expected `)' before 'volatile'
sketch_oct18a:26: error: expected unqualified-id before 'volatile'
sketch_oct18a:26: error: expected `)' before 'volatile'
sketch_oct18a:26: error: expected `)' before 'volatile'
sketch_oct18a:28: error: expected unqualified-id before 'volatile'
sketch_oct18a:28: error: expected `)' before 'volatile'
sketch_oct18a:28: error: expected `)' before 'volatile'
sketch_oct18a:29: error: expected unqualified-id before 'volatile'
sketch_oct18a:29: error: expected `)' before 'volatile'
sketch_oct18a:29: error: expected `)' before 'volatile'
sketch_oct18a:31: error: expected unqualified-id before 'volatile'
sketch_oct18a:31: error: expected `)' before 'volatile'
sketch_oct18a:31: error: expected `)' before 'volatile'
sketch_oct18a:32: error: expected unqualified-id before 'volatile'
sketch_oct18a:32: error: expected `)' before 'volatile'
sketch_oct18a:32: error: expected `)' before 'volatile'
sketch_oct18a:33: error: expected constructor, destructor, or type conversion before '=' token
sketch_oct18a:35: error: expected unqualified-id before 'volatile'
sketch_oct18a:35: error: expected `)' before 'volatile'
sketch_oct18a:35: error: expected `)' before 'volatile'
sketch_oct18a:37: error: expected constructor, destructor, or type conversion before '=' token
sketch_oct18a:38: error: expected constructor, destructor, or type conversion before '=' token
sketch_oct18a:40: error: expected constructor, destructor, or type conversion before '=' token
sketch_oct18a:41: error: expected constructor, destructor, or type conversion before '=' token
sketch_oct18a:43: error: expected constructor, destructor, or type conversion before '=' token
sketch_oct18a:45: error: expected constructor, destructor, or type conversion before '=' token
sketch_oct18a:47: error: expected constructor, destructor, or type conversion before '=' token

So all the code I am write till now should be enclosed in the setup ?

PaulS:

I say that the code IS NOT FINISHED YET. Of course it cant be compiled

Nonsense. You should not be writing code that can't compile. At most, you write a few lines of code, and compile. Fix the errors, and compile. Add a few more lines of code, and repeat.

And, you do NOT get all snotty when your poorly written code is picked apart. You came here for help without explaining what your problem is, or what you need help with.

Note that I am not an English speaker , and my english can be misunderstood sometimes because I do not found the most appropriate word. Added to this, is the fact that my knowledge on the subject are very basic , so I may commit many mistakes , even in the form of asking for help . But that does not mean I do it deliberately or someone can make fun of me for it.

Porque habla gente en ingles en este HILO? Bueno, ellos serán mas severos que lo que yo fui. Si no te explicas bien, no vas a conseguir ayuda. Ya te lo vienen diciendo. No tiene sentido lo que pusiste (lo mismo que te dije yo) y además usas código en ATMEL y luego refieres todo a Arduino, suena incoherente.

surbyte: Porque habla gente en ingles en este HILO? Bueno, ellos serán mas severos que lo que yo fui. Si no te explicas bien, no vas a conseguir ayuda. Ya te lo vienen diciendo. No tiene sentido lo que pusiste (lo mismo que te dije yo) y además usas código en ATMEL y luego refieres todo a Arduino, suena incoherente.

Pedi ayuda tambien en la parte inglesa, y parece que el Moderador por alguna razon ha decidido unir los dos hilos. No se mas.

Es que no se pone el mismo tema en dos lugares. Obvio que el moderador los va a unir. Bueno ya ves que los todos te decimos lo mismo y aun no has respondido ni en español ni en inglés.