Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed TextLCD mRotaryEncoder
Revision 1:42a135eee439, committed 2022-03-02
- Comitter:
- RogerJKelly
- Date:
- Wed Mar 02 21:58:48 2022 +0000
- Parent:
- 0:376d7a150177
- Commit message:
- PWM test code
Changed in this revision
| mRotaryEncoder.lib | Show annotated file Show diff for this revision Revisions of this file |
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mRotaryEncoder.lib Wed Mar 02 21:58:48 2022 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/charly/code/mRotaryEncoder/#2502b829d452
--- a/main.cpp Wed Dec 03 03:48:48 2014 +0000
+++ b/main.cpp Wed Mar 02 21:58:48 2022 +0000
@@ -1,20 +1,124 @@
#include "mbed.h"
#include "TextLCD.h"
-//Incluye resistencias de 2.2K en los pines de i2c a 3.3
+#include "mRotaryEncoder.h"
+
+DigitalOut fan_enable(PA_8); // high to enable fan, low to turn off
+PwmOut fan_pwm(PB_15); //D9 D13);
+// I2C Communication
+I2C i2c_lcd(PB_7,PB_6); // SDA, SCL
+
+TextLCD_I2C lcd(&i2c_lcd, 0x4E, TextLCD::LCD16x2, TextLCD::HD44780); // I2C bus, PCF8574 Slaveaddress, LCD Type, Device Type
+
+// Here's the encoder object
+//mRotaryEncoder enc(D7,D8, D2,PullNone);
+//RPG rpg1(PA_3,PA_4,PA_7); //Set up RPG
+//mRotaryEncoder enc(PA_3,PA_4,PA_7,PullUp);
+mRotaryEncoder enc(PB_12,PB_13,PB_14,PullUp);
+
+float fan_speed = 0.00;
+float fan_speed_old = 0.00;
+int fan_pwr=0; //
+char buffer[20];
+// LCD print helper
+void lcd_printS(int line, int col, char text[])
+{
+ lcd.locate(col, line); //locate(int column, int row);
+ lcd.printf(text);
+ //for (i=0;i<strlen(text);i++)
+ // printC(text[i]);
+}
-// I2C Communication
-I2C i2c_lcd(p28,p27); // SDA, SCL
-
-TextLCD_I2C lcd(&i2c_lcd, 0x4E, TextLCD::LCD16x2, TextLCD::HD44780); // I2C bus, PCF8574 Slaveaddress, LCD Type, Device Type
+// Helper function to set the PWM values
+void setfanspeed()
+{
+ //if (fan_pwr>0) fan_pwm.write(fan_speed);
+ fan_pwm.write(fan_speed);
+ //fan_pwm.write(1.00 - fan_speed);
+}
+
+// Library calls here when you go clockwise
+void cw()
+{
+// modify the selected RGB component
+ if (fan_pwr>0)
+ {
+ fan_speed +=0.010;
+ if (fan_speed>0.95) fan_speed=0.950;
+ }
+ setfanspeed();
+}
+
+// Library calls here when you go anticlockwise
+void ccw()
+{
+// modify the selected RGB component
+ if (fan_pwr>0)
+ {
+ fan_speed -=0.010;
+ if (fan_speed<0.05) fan_speed=0.050;
+ }
+ setfanspeed();
+}
+
+// Library calls here when you push in on the encoder shaft
+void btn()
+{
+ // change selected component (0, 1, 2)
+ if (++fan_pwr>1)
+ {
+ fan_enable = 0; // turn fan OFF
+ fan_pwr=0;
+ fan_speed_old = fan_speed;
+ fan_speed = 0.00;
+ }
+ else
+ {
+ fan_enable = 1; // turn fan ON
+ fan_speed = fan_speed_old;
+ }
+ setfanspeed();
+}
+
int main()
{
-lcd.setMode(TextLCD::DispOn); //DispOff, DispOn
-lcd.setBacklight(TextLCD::LightOff);//LightOff, LightOn
-lcd.setCursor(TextLCD::CurOff_BlkOff);//CurOff_BlkOff, CurOn_BlkOff, CurOff_BlkOn, CurOn_BlkOn
-lcd.printf("Oscar de Jesus \n Vasquez");
+ fan_enable = 0; // turn fan off
+ //fan_pwm.period(0.01); // setup PWM in seconds. 0.01 == 100hz
+ //fan_pwm.period_ms(100); // setup PWM in milli seconds. 1 == 1 khz
+ // Note: the PWM using the 555 supplied by RIXENS runs around 200khz
+ // - running the pwm at 100khz looses resolution at the top and bottom.
+ // - running the pwm at 10khz has much more accuracy and resolution.
+ // - running the pwm at 20khz has same accuracy and resolution as 10khz.
+ fan_pwm.period_us(100); // setup PWM in micro seconds. 100 == 10khz, 50 == 20khz,10 == 100khz, 5 == 200khz,
+
+ setfanspeed();
+ // Set up encoder callbacks
+ enc.attachROTCW(cw);
+ enc.attachROTCCW(ccw);
+ enc.attachSW(btn);
+
+ lcd.setMode(TextLCD::DispOn); //DispOff, DispOn
+ lcd.setBacklight(TextLCD::LightOff);//LightOff, LightOn
+ lcd.setCursor(TextLCD::CurOff_BlkOff);//CurOff_BlkOff, CurOn_BlkOff, CurOff_BlkOn, CurOn_BlkOn
+ //lcd.printf("Testing I2C LCD");
+ //lcd.locate(0, 1); //locate(int column, int row);
+ //lcd.printf("does it work");
+ //lcd.setBacklight(TextLCD::LightOn);//LightOff, LightOn
+
+ lcd.cls();
+ lcd_printS(0,0,"Fan Setting:");
+ lcd_printS(1,0,"Fan Speed: ");
- }
\ No newline at end of file
+ while (true) // nothing else to do but wait
+ {
+ wait(0.25);
+ if (fan_pwr>0) lcd_printS(0,12," ON ");
+ else lcd_printS(0,12," OFF");
+ sprintf(buffer,"%3d", (int)(fan_speed * 100));
+ lcd_printS(1,12,buffer);
+ //LCD.printS(1, 0, buffer);
+ }
+}
\ No newline at end of file