Cours:ArduinoSansLoopSetup : Différence entre versions
(→Gestion du temps) |
(→can/adc) |
||
(5 révisions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
Il est tout à fait possible de se passer complètement des librairies Arduino, tout en utilisant le logiciel Arduino ! | Il est tout à fait possible de se passer complètement des librairies Arduino, tout en utilisant le logiciel Arduino ! | ||
+ | Ou d'utiliser une partie de la librairie Arduino pour simplifier l'usage de certains périphériques. | ||
− | ={{Rouge| | + | =liaison série= |
+ | |||
+ | On peut utiliser la classe {{Rouge|Serial}} arduino, à condition d'{{Rouge|autoriser les interruptions}} : | ||
<source lang=c> | <source lang=c> | ||
− | |||
− | |||
− | |||
int main() | int main() | ||
{ | { | ||
− | + | sei(); | |
− | + | Serial.begin(9600); | |
− | + | while(1) | |
− | + | { | |
− | + | Serial.println("top"); | |
− | + | _delay_ms(500); | |
− | + | } | |
} | } | ||
</source> | </source> | ||
− | |||
=Gestion du temps= | =Gestion du temps= | ||
Ligne 48 : | Ligne 47 : | ||
delay(100); | delay(100); | ||
Serial.println(millis()); | Serial.println(millis()); | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | =i2c= | ||
+ | |||
+ | Il est possible d'utiliser la librairie Arduino Wire, il convient juste d'autoriser les interruptions : | ||
+ | |||
+ | <source lang=cpp> | ||
+ | #include <Wire.h> | ||
+ | int main() | ||
+ | { | ||
+ | sei(); | ||
+ | Wire.begin(); | ||
+ | while(1) | ||
+ | { | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | |||
+ | =can/adc= | ||
+ | |||
+ | Il est possible d'utiliser la fonction analogRead à condition d'initialiser le convertisseur : | ||
+ | |||
+ | <source lang=cpp> | ||
+ | void initAdcArduino() | ||
+ | { | ||
+ | sei(); | ||
+ | // marche pour 328p et 2560 et autres ... pour Fcpu = 16MHz | ||
+ | // à adapter suivant le µc et la fréquence | ||
+ | // cf https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/wiring.c | ||
+ | ADCSRA|=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); | ||
+ | } | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | initAdcArduino(); | ||
+ | Serial.begin(115200); | ||
+ | while(1) | ||
+ | { | ||
+ | Serial.println(analogRead(A0)); | ||
+ | _delay_ms(250); | ||
} | } | ||
} | } | ||
</source> | </source> |
Version actuelle datée du 3 juin 2024 à 16:54
Il est tout à fait possible de se passer complètement des librairies Arduino, tout en utilisant le logiciel Arduino ! Ou d'utiliser une partie de la librairie Arduino pour simplifier l'usage de certains périphériques.
Sommaire
liaison série
On peut utiliser la classe Serial arduino, à condition d'autoriser les interruptions :
int main()
{
sei();
Serial.begin(9600);
while(1)
{
Serial.println("top");
_delay_ms(500);
}
}
Gestion du temps
Remplacement :
- utiliser _delay_ms à la place de delay
- utiliser _delay_us à la place de delayMicroseconds
S'il est indispensable d'utiliser les fonctions arduino delay/delayMicroseconds/millis/micros, il faut configurer le Timer1 de la façon suivante :
void initFonctionsTempsArduino()
{
sei();
// marche pour 328p et 2560 et autres ...
// à adapter suivant le µc
// cf https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/wiring.c
TCCR0A=(1<<WGM01)|(1<<WGM00);
TCCR0B=(1<<CS01)|(1<<CS00);
TIMSK0=(1<<TOIE0);
}
int main()
{
initFonctionsTempsArduino();
Serial.begin(115200);
while(1)
{
delay(100);
Serial.println(millis());
}
}
i2c
Il est possible d'utiliser la librairie Arduino Wire, il convient juste d'autoriser les interruptions :
#include <Wire.h>
int main()
{
sei();
Wire.begin();
while(1)
{
}
}
can/adc
Il est possible d'utiliser la fonction analogRead à condition d'initialiser le convertisseur :
void initAdcArduino()
{
sei();
// marche pour 328p et 2560 et autres ... pour Fcpu = 16MHz
// à adapter suivant le µc et la fréquence
// cf https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/wiring.c
ADCSRA|=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
}
int main()
{
initAdcArduino();
Serial.begin(115200);
while(1)
{
Serial.println(analogRead(A0));
_delay_ms(250);
}
}