THIS WEEK, OUR OBJECTIVE IS TO LEARN ABOUT MICROCONTROLLERS AND HOW TO PROGRAM THEM.i will be using the #Quentorres i made in the WEEK 4 - ELECTRONICS PRODUCTION.
Individual assignment:
You can find our group page here and this week group ASSIGNMENT here..this week browsed through many datsheets
comparison chart of different microcontroller boards -group assignment
HISTORY OF boards in fab academy
circuit diagram of #Quentorres
OUR BOARD #XIAORP2040 IS COMPATIBLE WITH THE ARDUINO LIBRARY.
THIS BOARD EMBED WIRE RP2040 DEVELOPED BY RASPBERRY .
alogirthm for blinking
step 1. start
step 2. initialise the pin
step 3.turn on the led
step4. add a delay
step5. turnoff and go to step 3
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(0, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(0, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(0, LOW); // turn the LED off by making the voltage LOW
delay(100); // wait for a second
}
you can assign a variable for led pin and change from it.
int ledPin = 0;
// the setup function runs once when you press reset or power the board
void setup() {
pinMode(ledPin, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(ledPin, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(ledPin, LOW); // turn the LED off by making the voltage LOW
delay(100); // wait for a second
}
select and change values of pin by looking into xiao pinout
you can use the default code in examples which works fine or can choose to write your own
default example code for digital button in arduino
algorithm fro simple button and switch
step 1. start
step 2. initialise button and led pins
step 3. setup button pin as input and ledpin as output
step 4. if button is pressed, then led should turn on, go to step 6
step 5. turn led off
step 6. go to step 4
const int buttonPin = 27; // the number of the pushbutton pin
const int ledPin = d7; // the number of the LED pin
int buttonState = 0; // variable for reading the pushbutton status
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}
void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(ledPin, HIGH);
} else {
// turn LED off:
digitalWrite(ledPin, LOW);
}
}
the result is simple and direct
Boolean means a result that can only have one of two possible values: true or false.
here we nee d the push button to act as a switch .
algorithm for button and led with boolean flag
step1. start
step2. initialise the pin numbers
step3. setup the led pin as output and button pin input
step4. if the button is pressed set a flag to invert.
step5. turn ledpin to the state of the flag
step5. go to step 4
const int buttonPin = 27; // the number of the pushbutton pin
const int ledPin = D7;
// the number of the LED pin
bool flag = false;
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}
void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
if (buttonState == HIGH)
{
if(flag = !flag); //flag=!flag
}
digitalWrite (ledPin, flag);
}
the result seems like having some issue.
the button is working sometimes and not wrking otherstimes
THIS IS DUE TO THE LIMITATIONS OF THE PHYSICAL BUTTON COMING in BETWEEN . SO, WE NEED TO INTRODUCE A DELAY TO ACCOUNT FOR "BOUNCING". THIS ISSUE IS ADDRESSED IN THE FOLLOWING VIDEO.
so i rewrited this delay(200)
code by adding a delay in the loop to introduce "debouncing".
const int buttonPin = 27; // the number of the pushbutton pin
const int ledPin = 1;
// the number of the LED pin
bool flag = false;
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}
void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
if (buttonState == HIGH)
{
delay(200);// delay given to debounce the button.
if(flag = !flag); //flag=!flag
}
digitalWrite (ledPin, flag);
now the issue is resolved.
aNOTHER ISSUE AROSE WHERE THE LED BEGINS BLINKING CONTINUOUSLY WHEN PRESSED.
i introduced one more BOOLEAN check to RESOLVE this issue.
const int buttonPin = 27; // the number of the pushbutton pin
const int ledPin = 1;
// the number of the LED pin
bool flag = false;
bool pressed = false;
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}
void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
if (buttonState == HIGH)
{
if (pressed == false) // introduced thin boolean variable to cater teh blinking effect
{
flag = !flag; //flag=!flag
pressed = true;
}
}
else{
pressed = false;
delay(50);
}
digitalWrite (ledPin, flag);
}
i think now all the above mentioned issues are resolved.
const int buttonPin = 27; // the number of the pushbutton pin
const int ledPin = 1;
// the number of the LED pin
bool flag = false;
bool pressed = false;
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
void setup() {
Serial.begin(9600);//initalise serial on 9600 baud rate
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
delay(1000);
Serial.println("led test");
}
void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
if (buttonState == HIGH)
{
if (pressed == false) // introduce this boolean variable to cater teh blinking effect
{
Serial.println(buttonState);
Serial.println("button is pressed");
flag = !flag; //flag=!flag
pressed = true;
}
}
else{
pressed = false;
delay(50);
}
digitalWrite (ledPin, flag);
}
lets explore recursive function with the help of llm - chat gpt3.5 turbo for time being..
prompt
write an Arduino sketch that toggles through a series of LEDs when a push button is pressed? The LEDs should be connected to pins 26, 0, and 1, and the push button should be connected to pin 27. Please include code for debouncing the button
prompt
write an Arduino sketch that toggles through a series of LEDs when a push button is pressed? The LEDs should be connected to pins 26, 0, and 1, and the push button should be connected to pin 27. Please include code for debouncing the button
the promt i used for chat gpt
// constants won't change. They're used here to set pin numbers:
const int buttonPin = 27; // the number of the pushbutton pin
const int ledPins[] = {26, 0, 1}; // array of LED pins
const int numLeds = sizeof(ledPins) / sizeof(ledPins[0]); // number of LEDs
int currentLedIndex = 0;
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
void setup() {
Serial.begin(9600); // initialize serial on 9600 baud rate
// initialize the LED pins as outputs:
for (int i = 0; i < numLeds; i++) {
pinMode(ledPins[i], OUTPUT);
}
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
delay(1000);
Serial.println("led test");
}
void toggleLED(int index) {
// Turn off all LEDs
for (int i = 0; i < numLeds; i++) {
digitalWrite(ledPins[i], LOW);
}
// Turn on the specified LED
digitalWrite(ledPins[index], HIGH);
}
void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
if (buttonState == HIGH) {
// Toggle to the next LED
currentLedIndex = (currentLedIndex + 1) % numLeds;
// Turn on the LED at the current index
toggleLED(currentLedIndex);
// Wait for button release
while (digitalRead(buttonPin) == HIGH) {
delay(50); // debounce delay
}
}
}
code chat gpt provided
the result
micropython is a software implementation of a programming language largely compatible with Python 3, written in C, that is OPTIMISED to run on a microcontroller. i am using thonny - a python ide to code micropython.
SEEED STUDIO HAS DOCUMENTATION FOR SETTING UP MICROPYTHON ON THE XIAO RP2040. I'M FOLLOWING IT TO SET IT Up
i downlaoded the the thonny editor from this link - https://thonny.org/ or you can use this command on terminal brew install thonny
got to options in tool bar.
select micropython(pico) as the interepter option to run the code.
Press and hold the "BOOT" button and then connect the Seeed Studio XIAO RP2040 to the PC through the Type-C cable. If it works well, there is an "RPI-RP2" desk shown on the mac
and for mac i would recommend to select the port manually.
and then click the "install and update MICROPYTHON option".
on the upcoming window select the target volume.
i filled the remaining columns:
VARIANT:RASPBERRY pi. pico/pico h
VERSION: choose a stable version
and click install.you can see it DOWNLOADING. and close it after 'done'
if SUCCESSFUL you can see the this on shell
by following the DOCUMENTATION i copied the below code and apsted it into the thonny.
from machine import Pin, Timer
led = Pin(25, Pin.OUT)
Counter = 0
Fun_Num = 0
def fun(tim):
global Counter
Counter = Counter + 1
print(Counter)
led.value(Counter%2)
tim = Timer(-1)
tim.init(period=1000, mode=Timer.PERIODIC, callback=fun)
click run current script
a window will appear for frist time asking where to save the file.you can choose pico/computer.the code was working for me .
then i CHANGED the pin number to 26 to get this output
from machine import Pin, Timer
led = Pin(26, Pin.OUT)
Counter = 0
Fun_Num = 0
def fun(tim):
global Counter
Counter = Counter + 1
print(Counter)
led.value(Counter%2)
tim = Timer(-1)
tim.init(period=1000, mode=Timer.PERIODIC, callback=fun)
the result blinliking pin 26 on #Quentorres
then i i DOWNLOADED a library named ws2812.py to blink the neopixel on the #XIAORP2040
copied it into the THONY IDE. and i tried to save the librabry into #XIAORP2040 but it showed error.
but i booted again and treid it worked.
run code to to light the neopixel and it worked.
from ws2812 import WS2812
import utime
import machine
power = machine.Pin(11,machine.Pin.OUT)
power.value(1)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
YELLOW = (255, 150, 0)
GREEN = (0, 255, 0)
CYAN = (0, 255, 255)
BLUE = (0, 0, 255)
PURPLE = (180, 0, 255)
WHITE = (255, 255, 255)
COLORS = (BLACK, RED, YELLOW, GREEN, CYAN, BLUE, PURPLE, WHITE)
led = WS2812(12,1)#WS2812(pin_num,led_count)
while True:
print("Beautiful color")
for color in COLORS:
led.pixels_fill(color)
led.pixels_show()
utime.sleep(0.2)
the result
ALMOST ANYTHING AN ARDUINO CAN DO CAN ALSO BE ACHIEVED WITH A MICROPYTHON BOARD. HOWEVER, ONE IMPORTANT THING TO NOTE IS THAT MICROPYTHON CODE ISN'T AS FAST AS ARDUINO CODE.
FROM DATATSHEET
you need to boot and reset #XIAORP2040 when coming back to arduino after BOOT LOADING micropython environment.
hcsr04 library is already installed in my arduino ide. so laoded a sample code and tested.
#include <HCSR04.h>
UltraSonicDistanceSensor distanceSensor(4, 2); // Initialize sensor that uses digital pins 13 and 12.
void setup () {
Serial.begin(9600); // We initialize serial connection so that we could print values from sensor.
}
void loop () {
// Every 500 miliseconds, do a measurement using the sensor and print the distance in centimeters.
Serial.println(distanceSensor.measureDistanceCm());
delay(500);
}
circuit diagram
this week i had basically bunch of embedded programming doing different experiments. its a nice weel